Skip to content

Commit 838af94

Browse files
authored
Create a module for every codec in ExWebRTC.RTP (#122)
1 parent 8b0af9e commit 838af94

File tree

8 files changed

+49
-49
lines changed

8 files changed

+49
-49
lines changed

lib/ex_webrtc/rtp/opus_depayloader.ex renamed to lib/ex_webrtc/rtp/opus/depayloader.ex

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
defmodule ExWebRTC.RTP.OpusDepayloader do
1+
defmodule ExWebRTC.RTP.Opus.Depayloader do
22
@moduledoc """
33
Decapsualtes Opus audio out of RTP packet.
44

lib/ex_webrtc/rtp/opus_payloader.ex renamed to lib/ex_webrtc/rtp/opus/payloader.ex

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
defmodule ExWebRTC.RTP.OpusPayloader do
1+
defmodule ExWebRTC.RTP.Opus.Payloader do
22
@moduledoc """
33
Encapsulates Opus audio packet into an RTP packet.
44

lib/ex_webrtc/rtp/vp8_depayloader.ex renamed to lib/ex_webrtc/rtp/vp8/depayloader.ex

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
defmodule ExWebRTC.RTP.VP8Depayloader do
1+
defmodule ExWebRTC.RTP.VP8.Depayloader do
22
@moduledoc """
33
Reassembles VP8 frames from RTP packets.
44
55
Based on [RFC 7741: RTP Payload Format for VP8 Video](https://datatracker.ietf.org/doc/html/rfc7741).
66
"""
77
require Logger
88

9-
alias ExWebRTC.RTP.VP8Payload
9+
alias ExWebRTC.RTP.VP8.Payload
1010

1111
@opaque t() :: %__MODULE__{
1212
current_frame: nil,
@@ -26,10 +26,10 @@ defmodule ExWebRTC.RTP.VP8Depayloader do
2626
def write(depayloader, %ExRTP.Packet{payload: <<>>, padding: true}), do: {:ok, depayloader}
2727

2828
def write(depayloader, packet) do
29-
with {:ok, vp8_payload} <- VP8Payload.parse(packet.payload) do
29+
with {:ok, vp8_payload} <- Payload.parse(packet.payload) do
3030
depayloader =
3131
case {depayloader.current_frame, vp8_payload} do
32-
{nil, %VP8Payload{s: 1, pid: 0}} ->
32+
{nil, %Payload{s: 1, pid: 0}} ->
3333
%{
3434
depayloader
3535
| current_frame: vp8_payload.payload,
@@ -40,7 +40,7 @@ defmodule ExWebRTC.RTP.VP8Depayloader do
4040
Logger.debug("Dropping vp8 payload as it doesn't start a new frame")
4141
depayloader
4242

43-
{_current_frame, %VP8Payload{s: 1, pid: 0}} ->
43+
{_current_frame, %Payload{s: 1, pid: 0}} ->
4444
Logger.debug("""
4545
Received packet that starts a new frame without finishing the previous frame. \
4646
Dropping previous frame.\

lib/ex_webrtc/rtp/vp8_payload.ex renamed to lib/ex_webrtc/rtp/vp8/payload.ex

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
defmodule ExWebRTC.RTP.VP8Payload do
1+
defmodule ExWebRTC.RTP.VP8.Payload do
22
@moduledoc """
33
Defines VP8 payload structure stored in RTP packet payload.
44

lib/ex_webrtc/rtp/vp8_payloader.ex renamed to lib/ex_webrtc/rtp/vp8/payloader.ex

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
defmodule ExWebRTC.RTP.VP8Payloader do
1+
defmodule ExWebRTC.RTP.VP8.Payloader do
22
@moduledoc """
33
Encapsulates VP8 video frames into RTP packets.
44
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,57 @@
1-
defmodule ExWebRTC.RTP.VP8DepayloaderTest do
1+
defmodule ExWebRTC.RTP.VP8.DepayloaderTest do
22
use ExUnit.Case, async: true
33

4-
alias ExWebRTC.RTP.{VP8Payload, VP8Depayloader}
4+
alias ExWebRTC.RTP.VP8.{Payload, Depayloader}
55

66
test "write/2" do
7-
depayloader = VP8Depayloader.new()
7+
depayloader = Depayloader.new()
88
# random vp8 data, not necessarily correct
99
data = <<0, 1, 2, 3>>
1010

1111
# packet with entire frame
12-
vp8_payload = %VP8Payload{n: 0, s: 1, pid: 0, payload: data}
13-
vp8_payload = VP8Payload.serialize(vp8_payload)
12+
vp8_payload = %Payload{n: 0, s: 1, pid: 0, payload: data}
13+
vp8_payload = Payload.serialize(vp8_payload)
1414

1515
packet = ExRTP.Packet.new(vp8_payload, marker: true)
1616

1717
assert {:ok, ^data, %{current_frame: nil, current_timestamp: nil} = depayloader} =
18-
VP8Depayloader.write(depayloader, packet)
18+
Depayloader.write(depayloader, packet)
1919

2020
# packet that doesn't start a new frame
21-
vp8_payload = %VP8Payload{n: 0, s: 0, pid: 0, payload: data}
22-
vp8_payload = VP8Payload.serialize(vp8_payload)
21+
vp8_payload = %Payload{n: 0, s: 0, pid: 0, payload: data}
22+
vp8_payload = Payload.serialize(vp8_payload)
2323

2424
packet = ExRTP.Packet.new(vp8_payload)
2525

2626
assert {:ok, %{current_frame: nil, current_timestamp: nil} = depayloader} =
27-
VP8Depayloader.write(depayloader, packet)
27+
Depayloader.write(depayloader, packet)
2828

2929
# packet that starts a new frame without finishing the previous one
30-
vp8_payload = %VP8Payload{n: 0, s: 1, pid: 0, payload: data}
31-
vp8_payload = VP8Payload.serialize(vp8_payload)
30+
vp8_payload = %Payload{n: 0, s: 1, pid: 0, payload: data}
31+
vp8_payload = Payload.serialize(vp8_payload)
3232

3333
packet = ExRTP.Packet.new(vp8_payload)
3434

3535
assert {:ok, %{current_frame: ^data, current_timestamp: 0} = depayloader} =
36-
VP8Depayloader.write(depayloader, packet)
36+
Depayloader.write(depayloader, packet)
3737

3838
data2 = data <> <<0>>
39-
vp8_payload = %VP8Payload{n: 0, s: 1, pid: 0, payload: data2}
40-
vp8_payload = VP8Payload.serialize(vp8_payload)
39+
vp8_payload = %Payload{n: 0, s: 1, pid: 0, payload: data2}
40+
vp8_payload = Payload.serialize(vp8_payload)
4141

4242
packet = ExRTP.Packet.new(vp8_payload, timestamp: 3000)
4343

4444
assert {:ok, %{current_frame: ^data2, current_timestamp: 3000} = depayloader} =
45-
VP8Depayloader.write(depayloader, packet)
45+
Depayloader.write(depayloader, packet)
4646

4747
# packet with timestamp from a new frame that is not a beginning of this frame
4848
data2 = data
49-
vp8_payload = %VP8Payload{n: 0, s: 0, pid: 0, payload: data2}
50-
vp8_payload = VP8Payload.serialize(vp8_payload)
49+
vp8_payload = %Payload{n: 0, s: 0, pid: 0, payload: data2}
50+
vp8_payload = Payload.serialize(vp8_payload)
5151

5252
packet = ExRTP.Packet.new(vp8_payload, timestamp: 6000)
5353

5454
assert {:ok, %{current_frame: nil, current_timestamp: nil}} =
55-
VP8Depayloader.write(depayloader, packet)
55+
Depayloader.write(depayloader, packet)
5656
end
5757
end
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
defmodule ExWebrtc.Rtp.Vp8PayloadTest do
1+
defmodule ExWebRTC.Rtp.VP8.PayloadTest do
22
use ExUnit.Case, async: true
33

4-
alias ExWebRTC.RTP.VP8Payload
4+
alias ExWebRTC.RTP.VP8.Payload
55

66
test "parse/1 and serialize/1" do
77
# test vectors are based on RFC 7741, sec. 4.6
@@ -14,7 +14,7 @@ defmodule ExWebrtc.Rtp.Vp8PayloadTest do
1414
<<1::1, 0::1, 0::1, 1::1, 0::1, 0::3, 1::1, 0::7, 0::1, 17::7, vp8_payload::binary>>
1515

1616
parsed_frame =
17-
%VP8Payload{
17+
%Payload{
1818
n: 0,
1919
s: 1,
2020
pid: 0,
@@ -26,13 +26,13 @@ defmodule ExWebrtc.Rtp.Vp8PayloadTest do
2626
payload: vp8_payload
2727
}
2828

29-
assert {:ok, parsed_frame} == VP8Payload.parse(frame)
30-
assert frame == VP8Payload.serialize(parsed_frame)
29+
assert {:ok, parsed_frame} == Payload.parse(frame)
30+
assert frame == Payload.serialize(parsed_frame)
3131

3232
# X=0, S=1, PID=0
3333
frame = <<0::1, 0::1, 0::1, 1::1, 0::1, 0::3, vp8_payload::binary>>
3434

35-
parsed_frame = %VP8Payload{
35+
parsed_frame = %Payload{
3636
n: 0,
3737
s: 1,
3838
pid: 0,
@@ -44,15 +44,15 @@ defmodule ExWebrtc.Rtp.Vp8PayloadTest do
4444
payload: vp8_payload
4545
}
4646

47-
assert {:ok, parsed_frame} == VP8Payload.parse(frame)
48-
assert frame == VP8Payload.serialize(parsed_frame)
47+
assert {:ok, parsed_frame} == Payload.parse(frame)
48+
assert frame == Payload.serialize(parsed_frame)
4949

5050
# X=1, S=1, I=1, L=1, T=1, K=1, M=1, picture_id=4711
5151
frame =
5252
<<1::1, 0::1, 0::1, 1::1, 0::1, 0::3, 1::1, 1::1, 1::1, 1::1, 0::4, 1::1, 4711::15, 1::8,
5353
1::2, 1::1, 1::5, vp8_payload::binary>>
5454

55-
parsed_frame = %VP8Payload{
55+
parsed_frame = %Payload{
5656
n: 0,
5757
s: 1,
5858
pid: 0,
@@ -64,33 +64,33 @@ defmodule ExWebrtc.Rtp.Vp8PayloadTest do
6464
payload: vp8_payload
6565
}
6666

67-
assert {:ok, parsed_frame} == VP8Payload.parse(frame)
68-
assert frame == VP8Payload.serialize(parsed_frame)
67+
assert {:ok, parsed_frame} == Payload.parse(frame)
68+
assert frame == Payload.serialize(parsed_frame)
6969

70-
assert {:error, :invalid_packet} = VP8Payload.parse(<<>>)
70+
assert {:error, :invalid_packet} = Payload.parse(<<>>)
7171

7272
# X=0 and no vp8_payload
7373
assert {:error, :invalid_packet} =
74-
VP8Payload.parse(<<0::1, 0::1, 0::1, 1::1, 0::1, 0::3>>)
74+
Payload.parse(<<0::1, 0::1, 0::1, 1::1, 0::1, 0::3>>)
7575

7676
# X=1, I=1 picture_id=1 and no vp8_payload
7777
frame = <<1::1, 0::1, 0::1, 1::1, 0::1, 0::3, 1::1, 0::7, 0::1, 1::7>>
78-
assert {:error, :invalid_packet} = VP8Payload.parse(frame)
78+
assert {:error, :invalid_packet} = Payload.parse(frame)
7979

8080
# invalid reserved bit
8181
assert {:error, :invalid_packet} =
82-
VP8Payload.parse(<<0::1, 1::1, 0::1, 1::1, 1::1, 0::3>>)
82+
Payload.parse(<<0::1, 1::1, 0::1, 1::1, 1::1, 0::3>>)
8383

8484
# missing picture id
8585
missing_picture_id = <<1::1, 0::1, 0::1, 1::1, 0::1, 0::3, 1::1, 0::7>>
86-
assert {:error, :invalid_packet} = VP8Payload.parse(missing_picture_id)
86+
assert {:error, :invalid_packet} = Payload.parse(missing_picture_id)
8787

8888
# missing tl0picidx
8989
missing_tl0picidx = <<1::1, 0::1, 0::1, 1::1, 0::1, 0::3, 0::1, 1::1, 0::6>>
90-
assert {:error, :invalid_packet} = VP8Payload.parse(missing_tl0picidx)
90+
assert {:error, :invalid_packet} = Payload.parse(missing_tl0picidx)
9191

9292
# missing tidykeyidx
9393
missing_tidykeyidx = <<1::1, 0::1, 0::1, 1::1, 0::1, 0::3, 0::2, 1::1, 0::1, 0::4>>
94-
assert {:error, :invalid_packet} = VP8Payload.parse(missing_tidykeyidx)
94+
assert {:error, :invalid_packet} = Payload.parse(missing_tidykeyidx)
9595
end
9696
end

test/ex_webrtc/rtp/vp8_payloader_test.exs renamed to test/ex_webrtc/rtp/vp8/payloader_test.exs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
defmodule ExWebRTC.RTP.VP8PayloaderTest do
1+
defmodule ExWebRTC.RTP.VP8.PayloaderTest do
22
use ExUnit.Case, async: true
33

44
alias ExWebRTC.Media.IVF.Reader
5-
alias ExWebRTC.RTP.VP8Payloader
5+
alias ExWebRTC.RTP.VP8.Payloader
66

77
test "payload vp8 video" do
88
# video frames in the fixture are mostly 500+ bytes
9-
vp8_payloader = VP8Payloader.new(200)
9+
vp8_payloader = Payloader.new(200)
1010
{:ok, _header, ivf_reader} = Reader.open("test/fixtures/ivf/vp8_correct.ivf")
1111

1212
for _i <- 0..28, reduce: vp8_payloader do
1313
vp8_payloader ->
1414
{:ok, frame} = Reader.next_frame(ivf_reader)
15-
{rtp_packets, vp8_payloader} = VP8Payloader.payload(vp8_payloader, frame.data)
15+
{rtp_packets, vp8_payloader} = Payloader.payload(vp8_payloader, frame.data)
1616

1717
# assert all packets but last are 200 bytes
1818
rtp_packets

0 commit comments

Comments
 (0)