@@ -3,38 +3,36 @@ defmodule ExWebRTC.RTP.H264.DepayloaderTest do
33
44 alias ExWebRTC.RTP.Depayloader
55
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
157 payload_single = << 53 , 131 >>
168 payload_single_out = << 0 , 0 , 0 , 1 , 131 >>
179
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-
2310 depayloader = Depayloader.H264 . new ( )
24-
25- # Single NAL Unit
2611 packet = ExRTP.Packet . new ( payload_single , timestamp: 123 )
2712
2813 assert { ^ payload_single_out , % { current_timestamp: 123 , fu_parser_acc: nil } } =
2914 Depayloader.H264 . depayload ( depayloader , packet )
15+ end
3016
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 ( )
3222 packet = ExRTP.Packet . new ( payload_stapa , timestamp: 123 )
3323
3424 assert { ^ payload_stapa_out , % { current_timestamp: 123 , fu_parser_acc: nil } } =
3525 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 ( )
3635
37- # FU-A NAL
3836 packet1 = ExRTP.Packet . new ( payload_fuas , timestamp: 10 )
3937 packet2 = ExRTP.Packet . new ( payload_fua , timestamp: 10 )
4038 packet3 = ExRTP.Packet . new ( payload_fuae , timestamp: 10 )
@@ -51,8 +49,14 @@ defmodule ExWebRTC.RTP.H264.DepayloaderTest do
5149
5250 assert { ^ payload_fua_out , % { current_timestamp: 10 , fu_parser_acc: nil } } =
5351 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 ( )
5459
55- # Colliding timestamps in one FU-A
5660 packet1 = ExRTP.Packet . new ( payload_fuas , timestamp: 10 )
5761 packet2 = ExRTP.Packet . new ( payload_fua , timestamp: 11 )
5862
@@ -65,16 +69,27 @@ defmodule ExWebRTC.RTP.H264.DepayloaderTest do
6569
6670 assert { nil , % { current_timestamp: nil , fu_parser_acc: nil } } =
6771 { 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 ( )
6879
69- # Check all reserved NAL types
7080 Enum . map ( payloads_nalu_reserved , fn payload ->
7181 packet = ExRTP.Packet . new ( payload , timestamp: 123 )
7282
7383 assert { nil , % { current_timestamp: nil , fu_parser_acc: nil } } =
7484 Depayloader.H264 . depayload ( depayloader , packet )
7585 end )
86+ end
7687
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 ( )
7893 packet = ExRTP.Packet . new ( payload_invalid , timestamp: 123 )
7994
8095 assert { nil , % { current_timestamp: nil , fu_parser_acc: nil } } =
0 commit comments