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 –