3

私は現在やっています:

source_path = 'file:///home/raj/videos/sample.mpg'
descr = 'uridecodebin uri=%s ! videoconvert ! gdkpixbufsink name=sink' % (source_path)
pipeline = Gst.parse_launch(descr)

しかし、を使用する代わりにuri、 from などの生のファイル ソースを使用するにはどうすればよいでしょうかsource_file = request.POST['file'].file。(おそらく、文字列からビデオ ファイルをロードすることになるでしょうか?)

これまでの調査でappsrc( http://ingo.fargonauten.de/node/447 ) にたどり着きましたが、ファイルをバッファにロードする方法がわからないため、 GStreamer 1.0で使用する方法がわかりません。 :

raw_src = request.POST['files[]'].file
descr = 'appsrc name=vidsrc ! videoconvert ! gdkpixbufsink name=sink'
pipeline = Gst.parse_launch(descr)
appsrc = pipeline.get_by_name('vidsrc')
appsrc.emit('push-buffer', Gst.Buffer(raw_src.read()) ##I am not creating the buffer correctly for GStreamer 1.0
4

2 に答える 2

1

使用できるオプションがいくつかあります。

  1. パイプし、パイプのセットを作成し、ファイルの内容を書き込みパイプに書き込み、fd プロパティを使用して読み取りパイプを fdsrc に渡します。

  2. tempfile モジュールを使用して一時ファイルを作成し、コンテンツを書き込み、filename プロパティを使用してファイルを filesink に渡します。

  3. Appsrc に接続しますが、push-buffer および end-of-stream シグナルに接続する必要があり、データからバッファーを作成します。Python で読み取りを行う必要があるため、このオプションは避けたほうがよいでしょう。処理の一部は C で行われるため、fdsrc/filesink を使用する方が効率的です。

于 2013-03-24T11:55:29.053 に答える
0

ファイルのようなものではなく、実際のファイル オブジェクトがある場合は、間にパイプを使用する代わりに fdsrc を直接使用できます。

問題のコードから適応するには、次のようなものが機能するはずです。

descr = 'fdsrc name=vidsrc ! decodebin ! videoconvert ! gdkpixbufsink name=sink'
pipeline = Gst.parse_launch(descr)

src = pipeline.get_by_name('vidsrc')
src.props.fd = source_file.fileno()

uridecodebin から切り替えているため、decodebin を追加する必要があります。fd ソースは、videoconvert/pixbufsink が必要とする種類の入力を提供しない可能性があります。

于 2013-03-28T21:10:11.663 に答える