Recording a segment from MP4 file.

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Recording a segment from MP4 file.

jlancaster
The following pipeline successfully creates an mp4 file that is playable.

gst-launch -v -e filesrc location="sample1.mp4" ! qtdemux name=demux ! queue !  nal2bytestream_h264  !  qtmux ! filesink location=sample2.mp4

If I create this pipeline programmatically, I can playback the output file:

    pipeline = gst_pipeline_new ("my-pipeline");
    src      = gst_element_factory_make ("filesrc", "src");
    demux    = gst_element_factory_make ("qtdemux", "demux");
    queuev   = gst_element_factory_make ("queue", "queuev");
    parse    = gst_element_factory_make ("nal2bytestream_h264", "parse");
    mux      = gst_element_factory_make ("qtmux", "mux");
    sink     = gst_element_factory_make ("filesink", "sink");
    g_object_set (G_OBJECT (src), "location", filename, NULL);
    g_object_set (G_OBJECT (demux), "name", "demux", NULL);
    g_object_set (G_OBJECT (sink), "location", fileout, NULL);
    gst_bin_add_many(GST_BIN (pipeline), src, demux, queuev, parse, mux, sink, NULL);
    gst_check(gst_element_link(src, demux));
    gst_element_link_many(queuev, parse, mux, sink, NULL);
    gst_pad_add_event_probe(gst_element_get_static_pad(mux,"src"), G_CALLBACK(drop_eos_probe), pipeline);
    g_signal_connect (demux, "pad-added", G_CALLBACK (on_pad_added), queuev);
    //gst_element_set_state(pipeline, GST_STATE_PLAYING);

BUT, when I try to record a segment of the original clip using the above pipeline and the following lines of code I cannot playback the new file:
    gst_element_seek(data.pipeline, 1.0, GST_FORMAT_TIME,
        GST_SEEK_FLAG_SEGMENT | GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT,
        GST_SEEK_TYPE_SET, start * GST_SECOND, GST_SEEK_TYPE_SET, (end+2) * GST_SECOND);
    gst_element_set_state (data.pipeline, GST_STATE_PLAYING);

If I change the sink from filesink to v4l2sink, it will playback just the segment just fine.

Question: Why can't I playback a recorded segment of an mp4 file?

If I use MediaInfo to examine the output file it only sees that it is a QT file and not much more. So the mp4 container is somehow corrupt.


Jeff Lancaster