2016-04-11 30 views
1

私はvideo.mp4ファイルから読み込んだchar *バッファを持っています。サイズ4096 私がcharからGstBufferを作成しようとしました*バッファGstreamerでraw char * bufferを再生するには?

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 

私は(、videconvert、例えばffmpegcolorspaceいくつかの他の)パイプラインのさまざまな要素を使用し、バッファ*文字のサイズを変更しようとしましたが、この問題が解決しませんでした。

= 3 GST_DEBUGで実行した場合、私は警告を私は1.0のgstreamerを使用

0:00:00.064480642 4059  0x12c66d0 WARN codecparsers_mpegvideo gstmpegvideoparser.c:887:gst_mpeg_video_packet_parse_picture_header: Unsupported picture type : 0 

がたくさんあります。 誰もこのような問題に直面していますか?

P.S. Gstreamerを使ってファイルからデータを読み込むことはできません。私はfreadを使ってファイルからバッファを読み込み、それを再生しようとします。 特定の固定サイズの読み込みバッファを設定する必要があるのでしょうか?

+0

[this](https://cgit.freedesktop.org/gstreamer/gst-plugins-base/tree/tests/examples/app/appsrc_ex.c)の例を使用しましたか?そのエオスはどのように作られたのですか(私は流れの終わりを意味します - 誰がそれを作りました、何とかこれをしていますか?)私の推測では、EOSの後でバッファをプッシュすることです。これに関する警告が表示されます( 'GST_DEBUG = 3。/ your_app'で実行) – nayana

+0

なぜ '' 'gst_element_set_state(consumer、GST_STATE_NULL);' ''?あなたは '' 'GST_STATE_PLAYING' ''に設定していますか?おそらくより完全なコードスニペットが必要になるでしょう。また、ffmpegcolorspaceを見ると、何年も更新されていないgstreamer-0.10を使用していることがわかります。特に新しいコードの場合は、1.Xに切り替えることを検討してください。 – ensonic

+0

@otopolsky いいえ、https://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-data-spoof.htmlの例で使用しましたが、ほとんど同じです。 すべてのデータが既にプッシュされているときに、EOSをバッファにプッシュします。私は問題の本文を更新しました。 = 3 GST_DEBUGで実行した場合 、私はcodecparsers_mpegvideo gstmpegvideoparser.c の多くを得る:887:gst_mpeg_video_packet_parse_picture_header:サポートされていない画像タイプ:私は他のオブジェクトの初期化を完了したときにとき0 –

答えて

1

私はこの問題を解決しました。 私は予期せずGstBufferを作成していました。既知のサイズのデータ​​から、このようなバッファ(のchar *)を作成するために

正しい方法は

GstBuffer * buffer = gst_buffer_new_allocate(NULL, size, NULL); 
    gst_buffer_fill(m_dataBufferProducer, 0, data, size); 

はあなたの助けをありがとうです!

関連する問題