@@ -72,13 +72,13 @@ defmodule ExWebRTC.RTP.H264.DepayloaderTest do
72
72
end
73
73
74
74
test "starting new without ending previous FU-A" do
75
- payload_fuas = << 60 , 133 , 128 >>
76
- payload_fua = << 60 , 133 , 129 >>
75
+ payload_fuas1 = << 60 , 133 , 128 >>
76
+ payload_fuas2 = << 60 , 133 , 129 >>
77
77
78
78
depayloader = Depayloader.H264 . new ( )
79
79
80
- packet1 = ExRTP.Packet . new ( payload_fuas , timestamp: 10 )
81
- packet2 = ExRTP.Packet . new ( payload_fua , timestamp: 10 )
80
+ packet1 = ExRTP.Packet . new ( payload_fuas1 , timestamp: 10 )
81
+ packet2 = ExRTP.Packet . new ( payload_fuas2 , timestamp: 10 )
82
82
83
83
{ bin , depayloader } = Depayloader.H264 . depayload ( depayloader , packet1 )
84
84
@@ -91,6 +91,28 @@ defmodule ExWebRTC.RTP.H264.DepayloaderTest do
91
91
{ bin , depayloader }
92
92
end
93
93
94
+ test "non-start packet without starting FU-A beforehand" do
95
+ payload_fua = << 60 , 5 , 128 >>
96
+
97
+ depayloader = Depayloader.H264 . new ( )
98
+
99
+ packet = ExRTP.Packet . new ( payload_fua , timestamp: 10 )
100
+
101
+ assert { nil , % { current_timestamp: nil , fu_parser_acc: [ ] } } =
102
+ Depayloader.H264 . depayload ( depayloader , packet )
103
+ end
104
+
105
+ test "non-fragmented FU-A (start and end bits set to 1)" do
106
+ payload_fua = << 60 , 197 , 129 >>
107
+
108
+ depayloader = Depayloader.H264 . new ( )
109
+
110
+ packet = ExRTP.Packet . new ( payload_fua , timestamp: 10 )
111
+
112
+ assert { nil , % { current_timestamp: nil , fu_parser_acc: [ ] } } =
113
+ Depayloader.H264 . depayload ( depayloader , packet )
114
+ end
115
+
94
116
test "all unsupported NAL types" do
95
117
# reserved (22, 23, 30, 31) and unsupported NALu types (STAP-B: 25, MTAP-16: 26, MTAP-24: 27, FU-B: 29)
96
118
payloads_nalu_unsupported = [
@@ -114,7 +136,28 @@ defmodule ExWebRTC.RTP.H264.DepayloaderTest do
114
136
end )
115
137
end
116
138
139
+ test "empty RTP payload" do
140
+ payload_empty = << >>
141
+
142
+ depayloader = Depayloader.H264 . new ( )
143
+ packet = ExRTP.Packet . new ( payload_empty , timestamp: 123 )
144
+
145
+ assert { nil , % { current_timestamp: nil , fu_parser_acc: [ ] } } =
146
+ Depayloader.H264 . depayload ( depayloader , packet )
147
+ end
148
+
117
149
test "malformed NAL" do
150
+ # forbidden zero bit set to 1
151
+ payload_invalid = << 181 , 0 >>
152
+
153
+ depayloader = Depayloader.H264 . new ( )
154
+ packet = ExRTP.Packet . new ( payload_invalid , timestamp: 123 )
155
+
156
+ assert { nil , % { current_timestamp: nil , fu_parser_acc: [ ] } } =
157
+ Depayloader.H264 . depayload ( depayloader , packet )
158
+ end
159
+
160
+ test "malformed STAP-A" do
118
161
# malformed STAP-A payload. First NAL should be 1-byte long, but is 2-bytes long
119
162
payload_invalid = << 56 , 0 , 1 , 128 , 12 , 0 , 1 , 129 >>
120
163
0 commit comments