@@ -72,13 +72,13 @@ defmodule ExWebRTC.RTP.H264.DepayloaderTest do
7272 end
7373
7474 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 >>
7777
7878 depayloader = Depayloader.H264 . new ( )
7979
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 )
8282
8383 { bin , depayloader } = Depayloader.H264 . depayload ( depayloader , packet1 )
8484
@@ -91,6 +91,28 @@ defmodule ExWebRTC.RTP.H264.DepayloaderTest do
9191 { bin , depayloader }
9292 end
9393
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+
94116 test "all unsupported NAL types" do
95117 # reserved (22, 23, 30, 31) and unsupported NALu types (STAP-B: 25, MTAP-16: 26, MTAP-24: 27, FU-B: 29)
96118 payloads_nalu_unsupported = [
@@ -114,7 +136,28 @@ defmodule ExWebRTC.RTP.H264.DepayloaderTest do
114136 end )
115137 end
116138
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+
117149 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
118161 # malformed STAP-A payload. First NAL should be 1-byte long, but is 2-bytes long
119162 payload_invalid = << 56 , 0 , 1 , 128 , 12 , 0 , 1 , 129 >>
120163
0 commit comments