<div dir="ltr">Hi gotsring,<div><br></div><div>Thanks for the reply.</div><div><br></div><div>Our platform did not support MKV mux module on gstreamer component. So, I still need to work on mp4mux.</div><div><br></div><div>I double check the option of '-e' from tools/gst-launch.c and I add following code to my testing tool.</div><div>1. The duration of mp4 file is over 10 sec, we will send EOS event.</div><div><i>if (((hdr->fpts.tv_sec - app->first_pts.tv_sec >= 10) && (hdr->fpts.tv_usec >= app->first_pts.tv_usec)) ||</i></div><div><i>            hdr->fpts.tv_sec - app->first_pts.tv_sec > 10)) {<br>              ok = FALSE;<br>}</i></div><div><i>.....</i></div><div><i>if (ok == FALSE) {</i></div><div><i>         GST_INFO("send EOS event\n");<br>        gst_element_send_event(app->pipeline, gst_event_new_eos());<br>}</i><br></div><div>2. At message part, when we recv EOS, we will do stop loop.</div><div><i>        case GST_MESSAGE_EOS: {<br>                                 g_printerr("recv EOS msg\n");<br>                                 g_main_loop_quit (app->loop);<br>                                 break;</i></div><div><i>                              }</i><br></div><div>3. Double check the log from testing tool, testing tool did send EOS to pipeline.</div><div><i>0:00:09.650924349  1255      0x3611e00 INFO         appsrc-pipeline ringbuf_appsrc.cpp:77:read_data: send EOS event<br><br>0:00:09.653614066  1255      0x36b10a0 INFO                    task gsttask.c:312:gst_task_func:<ringbuf:src> Task going to paused<br>0:00:09.653862576  1255      0x36b10a0 INFO                    task gsttask.c:314:gst_task_func:<ringbuf:src> Task resume from paused<br>0:00:09.654003645  1255      0x36b10a0 INFO                 basesrc gstbasesrc.c:2854:gst_base_src_loop:<ringbuf> pausing after gst_base_src_get_range() = eos<br>0:00:09.654223941  1255      0x36b10a0 INFO                    task gsttask.c:312:gst_task_func:<ringbuf:src> Task going to paused<br>0:00:09.654832350  1255      0x3611e00 INFO         appsrc-pipeline ringbuf_appsrc.cpp:108:bus_message: got message eos<br>recv EOS msg<br>0:00:10.655268590  1255      0x3611e00 INFO         appsrc-pipeline ringbuf_appsrc.cpp:215:main: stopping</i><br></div><div><i><br></i></div><div>Add above code, mp4 file still not working on VLC player.</div><div>Please provide advise to fix it. Thanks.</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">gotsring <<a href="mailto:gotsring@live.com">gotsring@live.com</a>> 於 2020年7月28日 週二 上午3:07寫道:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Are you finalizing the MP4 file? This is done by sending an EOS signal<br>
through the pipeline. For the gst-launch command-line tool, just add -e in<br>
the options, like<br>
gst-launch-1.0 -e appsrc name=ringbuf ! mp4mux ! filesink<br>
location=/tmp/opt/h264.mp4<br>
<br>
On a side note, I prefer MKV containers instead of MP4 because they tend to<br>
be more resistant to errors. If you don't finalize an MKV file, you can<br>
still play the video, scrubbing or other metadata isn't available. If you<br>
don't finalize the MP4 file, the file is unplayable. MKV files can still<br>
play in VLC, so you'd be good there. <br>
<br>
Example:<br>
gst-launch-1.0 -e appsrc name=ringbuf ! matroskamux ! filesink<br>
location=/tmp/opt/h264.mkv<br>
<br>
You might need a parser right before the matroskamux, like h264parse.<br>
<br>
<br>
<br>
--<br>
Sent from: <a href="http://gstreamer-devel.966125.n4.nabble.com/" rel="noreferrer" target="_blank">http://gstreamer-devel.966125.n4.nabble.com/</a><br>
_______________________________________________<br>
gstreamer-devel mailing list<br>
<a href="mailto:gstreamer-devel@lists.freedesktop.org" target="_blank">gstreamer-devel@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a><br>
</blockquote></div>