@@ -62,6 +62,24 @@ defmodule Membrane.MP4.Muxer.ISOM.IntegrationTest do
62
62
perform_test ( pid , "video" )
63
63
end
64
64
65
+ test "variable parameters H264 track" do
66
+ prepare_test ( "video" )
67
+
68
+ structure = [
69
+ child ( :file , % Membrane.File.Source { location: "test/fixtures/in_video_vp.h264" } )
70
+ |> child ( :parser , % Membrane.H264.Parser {
71
+ generate_best_effort_timestamps: % { framerate: { 30 , 1 } } ,
72
+ output_stream_structure: :avc3
73
+ } )
74
+ |> child ( :muxer , % Membrane.MP4.Muxer.ISOM { chunk_duration: Time . seconds ( 1 ) } )
75
+ |> child ( :sink , % Membrane.File.Sink { location: out_path_for ( "video_vp" ) } )
76
+ ]
77
+
78
+ pid = Pipeline . start_link_supervised! ( spec: structure )
79
+
80
+ perform_test ( pid , "video_vp" )
81
+ end
82
+
65
83
test "single H265 track" do
66
84
prepare_test ( "video_hevc" )
67
85
@@ -210,58 +228,4 @@ defmodule Membrane.MP4.Muxer.ISOM.IntegrationTest do
210
228
perform_test ( pid , "two_tracks_fast_start" )
211
229
end
212
230
end
213
-
214
- describe "When fed a variable parameter h264 stream, Muxer.ISOM should" do
215
- test "raise when stream format's inband_parameters are not used" do
216
- structure = [
217
- child ( :file , % Membrane.File.Source { location: "test/fixtures/in_video_vp.h264" } )
218
- |> child ( :parser , % Membrane.H264.Parser {
219
- generate_best_effort_timestamps: % { framerate: { 30 , 1 } } ,
220
- output_stream_structure: :avc1
221
- } )
222
- |> child ( :muxer , % Membrane.MP4.Muxer.ISOM {
223
- chunk_duration: Time . seconds ( 1 ) ,
224
- fast_start: true
225
- } )
226
- |> child ( :sink , Membrane.Fake.Sink.Buffers )
227
- ]
228
-
229
- { :ok , _supervisor_pid , pid } = Pipeline . start ( spec: structure )
230
- monitor_ref = Process . monitor ( pid )
231
-
232
- assert_receive { :DOWN , ^ monitor_ref , :process , ^ pid ,
233
- { :membrane_child_crash , :muxer ,
234
- { % RuntimeError {
235
- message: "ISOM Muxer doesn't support variable parameters"
236
- } , _stacktrace } } } ,
237
- 1_000
238
- end
239
- end
240
-
241
- describe "ctts table" do
242
- test "should not be stored when dts and pts values are equal" do
243
- prepare_test ( "video" )
244
-
245
- structure = [
246
- child ( :file , % Membrane.File.Source { location: "test/fixtures/in_video.h264" } )
247
- |> child ( :parser , % Membrane.H264.Parser {
248
- generate_best_effort_timestamps: % { framerate: { 30 , 1 } , add_dts_offset: false } ,
249
- output_stream_structure: :avc1
250
- } )
251
- |> child ( :muxer , % Membrane.MP4.Muxer.ISOM { chunk_duration: Time . seconds ( 1 ) } )
252
- |> child ( :sink , % Membrane.File.Sink { location: out_path_for ( "video" ) } )
253
- ]
254
-
255
- pid = Pipeline . start_link_supervised! ( spec: structure )
256
-
257
- assert_end_of_stream ( pid , :sink , :input )
258
- refute_sink_buffer ( pid , :sink , _buffer , 0 )
259
-
260
- assert :ok == Pipeline . terminate ( pid )
261
-
262
- assert { parsed_out , << >> } = out_path_for ( "video" ) |> File . read! ( ) |> Container . parse! ( )
263
- assert Container . get_box ( parsed_out , [ :moov , :trak , :mdia , :minf , :stbl , :stts ] )
264
- refute Container . get_box ( parsed_out , [ :moov , :trak , :mdia , :minf , :stbl , :ctts ] )
265
- end
266
- end
267
231
end
0 commit comments