1
我有char *緩衝區,我從video.mp4文件讀取。該緩衝區的大小爲4096 我試圖從字符*緩衝創建GstBuffer如何用Gstreamer玩原始char *緩衝區?
GstBuffer* Buffer = gst_buffer_new_wrapped(data, size);
dataBuffer = gst_buffer_copy(tmpBuf);
然後我把這個緩衝區的appsrc
GstElement* source = gst_bin_get_by_name (GST_BIN (consumer), "source");
gst_app_src_push_buffer (GST_APP_SRC (source), dataBuffer);
gst_object_unref (source);
管道消費者在接下來的方式創建:
gchar* videoConsumerString = g_strdup_printf ("appsrc max-buffers=5 drop=false name=source ! decodebin ! xvimagesink");
consumer = gst_parse_launch (videoConsumerString, NULL);
gst_element_set_state (consumer, GST_STATE_NULL);
g_free (videoConsumerString);
創建管道後,我將其狀態設置爲GST_STATE_NULL。 當我開始播放時,我將其狀態設置爲GST_STATE_PLAYING。
但在出我的錯誤:
ERROR from element mpegvparse0: No valid frames found before end of stream
我試圖改變的char *緩衝區的大小,在管道中使用不同的元素(如ffmpegcolorspace,videconvert,其他一些),但並沒有解決這個問題。
如果具有GST_DEBUG = 3運行,我有很多警告
0:00:00.064480642 4059 0x12c66d0 WARN codecparsers_mpegvideo gstmpegvideoparser.c:887:gst_mpeg_video_packet_parse_picture_header: Unsupported picture type : 0
我使用gstreamer的1.0。 有沒有人遇到這樣的問題?
P.S.我無法使用Gstreamer從文件讀取數據。我只能用fread從文件中讀取緩衝區,然後嘗試播放它們。 也許我必須設置一些特定的固定大小的緩衝區?
您是否使用過[this](https://cgit.freedesktop.org/gstreamer/gst-plugins-base/tree/tests/examples/app/appsrc_ex.c)示例?這個eos是如何創建的(我的意思是流的結束 - 誰創建了這個,你是否在做這個)?我的猜測是,你在EOS後推緩衝區..你看到有關此警告(使用'GST_DEBUG = 3。/ your_app'運行) – nayana
爲什麼'''gst_element_set_state(consumer,GST_STATE_NULL);'''?你是否將它設置爲'''GST_STATE_PLAYING'''?我們可能需要更完整的代碼片段。另外看到ffmpegcolorspace告訴我,你正在使用gstreamer-0.10,它已經好幾年沒有更新過了。請考慮切換到1.X,特別是對於新代碼。 – ensonic
@otopolsky 不,使用https://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-data-spoof.html示例,但它們幾乎相似。 當所有數據已被推送時,我將EOS推入緩衝區。我更新了問題的主體。 如果有GST_DEBUG = 3運行,我得到了很多的 codecparsers_mpegvideo gstmpegvideoparser.c:887:gst_mpeg_video_packet_parse_picture_header:不支持的圖片類型:0 –