@@ -3,38 +3,36 @@ defmodule ExWebRTC.RTP.H264.DepayloaderTest do
3
3
4
4
alias ExWebRTC.RTP.Depayloader
5
5
6
- test "depayload/2" do
7
- payload_stapa = << 56 , 0 , 1 , 128 , 0 , 1 , 129 >>
8
- payload_stapa_out = << 0 , 0 , 0 , 1 , 128 , 0 , 0 , 0 , 1 , 129 >>
9
-
10
- payload_fuas = << 60 , 133 , 128 >>
11
- payload_fua = << 60 , 5 , 129 >>
12
- payload_fuae = << 60 , 69 , 130 >>
13
- payload_fua_out = << 0 , 0 , 0 , 1 , 37 , 128 , 129 , 130 >>
14
-
6
+ test "Check valid Single NAL Unit" do
15
7
payload_single = << 53 , 131 >>
16
8
payload_single_out = << 0 , 0 , 0 , 1 , 131 >>
17
9
18
- # reserved NALu types (22, 23, 30, 31)
19
- payloads_nalu_reserved = [ << 55 , 131 >> , << 56 , 131 >> , << 62 , 131 >> , << 63 , 131 >> ]
20
- # malformed STAP-A payload. First NAL should be 1-byte long, but is 2-bytes long
21
- payload_invalid = << 56 , 0 , 1 , 128 , 12 , 0 , 1 , 129 >>
22
-
23
10
depayloader = Depayloader.H264 . new ( )
24
-
25
- # Single NAL Unit
26
11
packet = ExRTP.Packet . new ( payload_single , timestamp: 123 )
27
12
28
13
assert { ^ payload_single_out , % { current_timestamp: 123 , fu_parser_acc: nil } } =
29
14
Depayloader.H264 . depayload ( depayloader , packet )
15
+ end
30
16
31
- # STAP-A NAL
17
+ test "Check valid STAP-A NAL" do
18
+ payload_stapa = << 56 , 0 , 1 , 128 , 0 , 1 , 129 >>
19
+ payload_stapa_out = << 0 , 0 , 0 , 1 , 128 , 0 , 0 , 0 , 1 , 129 >>
20
+
21
+ depayloader = Depayloader.H264 . new ( )
32
22
packet = ExRTP.Packet . new ( payload_stapa , timestamp: 123 )
33
23
34
24
assert { ^ payload_stapa_out , % { current_timestamp: 123 , fu_parser_acc: nil } } =
35
25
Depayloader.H264 . depayload ( depayloader , packet )
26
+ end
27
+
28
+ test "Check valid FU-A NAL" do
29
+ payload_fuas = << 60 , 133 , 128 >>
30
+ payload_fua = << 60 , 5 , 129 >>
31
+ payload_fuae = << 60 , 69 , 130 >>
32
+ payload_fua_out = << 0 , 0 , 0 , 1 , 37 , 128 , 129 , 130 >>
33
+
34
+ depayloader = Depayloader.H264 . new ( )
36
35
37
- # FU-A NAL
38
36
packet1 = ExRTP.Packet . new ( payload_fuas , timestamp: 10 )
39
37
packet2 = ExRTP.Packet . new ( payload_fua , timestamp: 10 )
40
38
packet3 = ExRTP.Packet . new ( payload_fuae , timestamp: 10 )
@@ -51,8 +49,14 @@ defmodule ExWebRTC.RTP.H264.DepayloaderTest do
51
49
52
50
assert { ^ payload_fua_out , % { current_timestamp: 10 , fu_parser_acc: nil } } =
53
51
Depayloader.H264 . depayload ( depayloader , packet3 )
52
+ end
53
+
54
+ test "Check colliding timestamps in one FU-A" do
55
+ payload_fuas = << 60 , 133 , 128 >>
56
+ payload_fua = << 60 , 5 , 129 >>
57
+
58
+ depayloader = Depayloader.H264 . new ( )
54
59
55
- # Colliding timestamps in one FU-A
56
60
packet1 = ExRTP.Packet . new ( payload_fuas , timestamp: 10 )
57
61
packet2 = ExRTP.Packet . new ( payload_fua , timestamp: 11 )
58
62
@@ -65,16 +69,27 @@ defmodule ExWebRTC.RTP.H264.DepayloaderTest do
65
69
66
70
assert { nil , % { current_timestamp: nil , fu_parser_acc: nil } } =
67
71
{ bin , depayloader }
72
+ end
73
+
74
+ test "Check all reserved NAL types" do
75
+ # reserved NALu types (22, 23, 30, 31)
76
+ payloads_nalu_reserved = [ << 55 , 131 >> , << 56 , 131 >> , << 62 , 131 >> , << 63 , 131 >> ]
77
+
78
+ depayloader = Depayloader.H264 . new ( )
68
79
69
- # Check all reserved NAL types
70
80
Enum . map ( payloads_nalu_reserved , fn payload ->
71
81
packet = ExRTP.Packet . new ( payload , timestamp: 123 )
72
82
73
83
assert { nil , % { current_timestamp: nil , fu_parser_acc: nil } } =
74
84
Depayloader.H264 . depayload ( depayloader , packet )
75
85
end )
86
+ end
76
87
77
- # Check malformed NAL
88
+ test "Check malformed NAL" do
89
+ # malformed STAP-A payload. First NAL should be 1-byte long, but is 2-bytes long
90
+ payload_invalid = << 56 , 0 , 1 , 128 , 12 , 0 , 1 , 129 >>
91
+
92
+ depayloader = Depayloader.H264 . new ( )
78
93
packet = ExRTP.Packet . new ( payload_invalid , timestamp: 123 )
79
94
80
95
assert { nil , % { current_timestamp: nil , fu_parser_acc: nil } } =
0 commit comments