Hi,
The issue i am facing is , Iam not able to playback the mp4 file created . The code is shown below. This issue is happen when i use mp4mux. Instead of using mp4mux if i use mpegtsmux (currently commented) then i am able to playback the recorded video. Another thing i have noticed is if i use videotestsrc with mp4mux, then i am able to playback the recorded video. #include <gst/gst.h> #include <unistd.h> int main(int argc, char *argv[]) { GstElement *pipeline, *source, *capsfilter, *h264parse, *mux, *sink, *encoder; // GstBus *bus; // GstMessage *msg; // GstPad *blockpad; GstCaps *Cap; gst_init (NULL,NULL); Cap = gst_caps_from_string("video/x-h264,stream-format=(string)byte-stream,width=320,height=240,framerate=30/1"); //source = gst_element_factory_make("videotestsrc","source"); source = gst_element_factory_make("v4l2src","source"); capsfilter = gst_element_factory_make("capsfilter","caps"); h264parse = gst_element_factory_make("h264parse","h264parse"); // mux = gst_element_factory_make("mpegtsmux","mux"); mux = gst_element_factory_make("mp4mux","mux"); sink = gst_element_factory_make("filesink","sink"); encoder = gst_element_factory_make("x264enc","encoder"); g_object_set(G_OBJECT(source), "num-buffers",300, NULL); g_object_set(sink, "location" , "test1.mp4",NULL); g_object_set(capsfilter,"caps",Cap,NULL); pipeline = gst_pipeline_new("test-pipeline"); gst_bin_add_many(GST_BIN(pipeline), source,encoder,capsfilter,h264parse,mux,sink,NULL); gst_element_link_many(source,encoder,capsfilter,h264parse,mux,sink,NULL); gst_element_set_state (pipeline, GST_STATE_PLAYING); GST_DEBUG_BIN_TO_DOT_FILE(GST_BIN(pipeline), GST_DEBUG_GRAPH_SHOW_ALL, "stream_graph_file"); sleep(8); gst_element_send_event(source, gst_event_new_eos ()); gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_NULL); gst_object_unref(GST_OBJECT(pipeline)); return 0; } vlc test1.mp4 VLC media player 2.1.6 Rincewind (revision 2.1.6-0-gea01d28) [0x1af7118] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface. [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f9f54c21280] moov atom not found [0x7f9f54c21a18] mp4 demux error: MP4 plugin discarded (no moov,foov,moof box) [0x7f9f54c21a18] mp4 demux error: MP4 plugin discarded (no moov,foov,moof box) [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f9f54002340] moov atom not found [0x7f9f54c21a18] avformat demux error: Could not open /home/sha/gstreamer/gstreamer/test1.mp4: Unknown error 1094995529 gst-launch-1.0 filesrc location=test1.mp4 ! decodebin name=dec ! videoconvert ! autovideosink (gst-plugin-scanner:8543): GStreamer-CRITICAL **: gst_structure_new_empty: assertion 'gst_structure_validate_name (name)' failed Setting pipeline to PAUSED ... Pipeline is PREROLLING ... WARNING: from element /GstPipeline:pipeline0/GstDecodeBin:dec/GstQTDemux:qtdemux0: Invalid atom size. Additional debug info: isomp4/1.2/qtdemux.c(3064): gst_qtdemux_loop_state_header (): /GstPipeline:pipeline0/GstDecodeBin:dec/GstQTDemux:qtdemux0: Header atom 'mdat' has empty length ERROR: from element /GstPipeline:pipeline0/GstDecodeBin:dec/GstQTDemux:qtdemux0: This file contains no playable streams. Additional debug info: isomp4/1.2/qtdemux.c(577): gst_qtdemux_post_no_playable_stream_error (): /GstPipeline:pipeline0/GstDecodeBin:dec/GstQTDemux:qtdemux0: no known streams found ERROR: pipeline doesn't want to preroll. Setting pipeline to NULL ... Freeing pipeline ... |
Hi, you have to wait for EOS to reach the filesink. When you have received the EOS Message, the MP4 file is complete. Then you can stop your pipeline.
-----Ursprüngliche Nachricht----- Von: gstreamer-devel [mailto:[hidden email]] Im Auftrag von ebrahim Gesendet: Freitag, 18. November 2016 13:26 An: [hidden email] Betreff: End Of stream issue while playing mp4 file Hi, The issue i am facing is , Iam not able to playback the mp4 file created . The code is shown below. This issue is happen when i use mp4mux. Instead of using /mp4mux/ if i use /mpegtsmux/ (currently commented) then i am able to playback the recorded video. Another thing i have noticed is if i use videotestsrc with mp4mux, then i am able to playback the recorded video. / #include <gst/gst.h> #include <unistd.h> int main(int argc, char *argv[]) { GstElement *pipeline, *source, *capsfilter, *h264parse, *mux, *sink, *encoder; // GstBus *bus; // GstMessage *msg; // GstPad *blockpad; GstCaps *Cap; gst_init (NULL,NULL); Cap = gst_caps_from_string("video/x-h264,stream-format=(string)byte-stream,width=320,height=240,framerate=30/1"); //source = gst_element_factory_make("videotestsrc","source"); source = gst_element_factory_make("v4l2src","source"); capsfilter = gst_element_factory_make("capsfilter","caps"); h264parse = gst_element_factory_make("h264parse","h264parse"); // mux = gst_element_factory_make("mpegtsmux","mux"); mux = gst_element_factory_make("mp4mux","mux"); sink = gst_element_factory_make("filesink","sink"); encoder = gst_element_factory_make("x264enc","encoder"); g_object_set(G_OBJECT(source), "num-buffers",300, NULL); g_object_set(sink, "location" , "test1.mp4",NULL); g_object_set(capsfilter,"caps",Cap,NULL); pipeline = gst_pipeline_new("test-pipeline"); gst_bin_add_many(GST_BIN(pipeline), source,encoder,capsfilter,h264parse,mux,sink,NULL); gst_element_link_many(source,encoder,capsfilter,h264parse,mux,sink,NULL); gst_element_set_state (pipeline, GST_STATE_PLAYING); GST_DEBUG_BIN_TO_DOT_FILE(GST_BIN(pipeline), GST_DEBUG_GRAPH_SHOW_ALL, "stream_graph_file"); sleep(8); gst_element_send_event(source, gst_event_new_eos ()); gst_element_set_state(GST_ELEMENT(pipeline), GST_STATE_NULL); gst_object_unref(GST_OBJECT(pipeline)); return 0; }/ vlc test1.mp4 VLC media player 2.1.6 Rincewind (revision 2.1.6-0-gea01d28) [0x1af7118] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface. [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f9f54c21280] moov atom not found [0x7f9f54c21a18] mp4 demux error: MP4 plugin discarded (no moov,foov,moof box) [0x7f9f54c21a18] mp4 demux error: MP4 plugin discarded (no moov,foov,moof box) [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f9f54002340] moov atom not found [0x7f9f54c21a18] avformat demux error: Could not open /home/sha/gstreamer/gstreamer/test1.mp4: Unknown error 1094995529 gst-launch-1.0 filesrc location=test1.mp4 ! decodebin name=dec ! videoconvert ! autovideosink (gst-plugin-scanner:8543): GStreamer-CRITICAL **: gst_structure_new_empty: assertion 'gst_structure_validate_name (name)' failed Setting pipeline to PAUSED ... Pipeline is PREROLLING ... WARNING: from element /GstPipeline:pipeline0/GstDecodeBin:dec/GstQTDemux:qtdemux0: Invalid atom size. Additional debug info: isomp4/1.2/qtdemux.c(3064): gst_qtdemux_loop_state_header (): /GstPipeline:pipeline0/GstDecodeBin:dec/GstQTDemux:qtdemux0: Header atom 'mdat' has empty length ERROR: from element /GstPipeline:pipeline0/GstDecodeBin:dec/GstQTDemux:qtdemux0: This file contains no playable streams. Additional debug info: isomp4/1.2/qtdemux.c(577): gst_qtdemux_post_no_playable_stream_error (): /GstPipeline:pipeline0/GstDecodeBin:dec/GstQTDemux:qtdemux0: no known streams found ERROR: pipeline doesn't want to preroll. Setting pipeline to NULL ... Freeing pipeline ... -- View this message in context: http://gstreamer-devel.966125.n4.nabble.com/End-Of-stream-issue-while-playing-mp4-file-tp4680763.html Sent from the GStreamer-devel mailing list archive at Nabble.com. _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Free forum by Nabble | Edit this page |