ドキュメントは一通り読んでいて、ようやく Ubuntu Desktop 上で既存の element の挙動を調べています。

ついでに言うと Linux は今まで RedHat 系 (RHL, Fedora, CentOS) しか使ったことがないんで、Ubuntu のパッケージ命名規則に微妙に戸惑いがあります。だったら Fedora 使えと言われそうですが VM 上でなんか挙動が不審だったんで…

とりあえず gstreamer1.0-libav パッケージを入れ、いくつかの element のプロパティを gst-inspect-1.0 で見ていて気付いたこと。

  • avdec_huffyuv element がある。
    • 入力フォーマットとして video/x-huffyuv を受け付けるようになっている。ビデオストリームのフォーマットを識別する処理を書く方法ってどうやるんだっけな。(ドキュメントで読んだ記憶はある)
    • 出力フォーマットは video/x-raw になっていて、ピクセルフォーマットは文字列で指定するらしい。(GStreamer 以外のシステムだと、例えば FourCC や単なる列挙値で指定する)
  • avdec_utvideo element もある。
    • こっちは何故か入力フォーマットは unknown/unknown になっている。はて?
    • element の rank (同じ入力を処理する element 間での優先度)は marginal (= unlikely to be chosen) になっている(これは avdec_huffyuv も同じ)。自分が作る element は primary (= will be chosen first) にしておけば、 libav の element 群がインストールされていても自分が作ったものが優先的に使われるはず。
  • avdec_ffv1 element もある。
    • FFv1 の実装は libavcodec の物がオリジナルであるはずだが、なぜかこれも rank が marginal である。いいのか?

で、テストで動画ファイルを gst-play-1.0 で再生してみたところ、Huffyuv は再生できますが、UtVideo (ULRG median) は再生できません(音声だけ再生される)。mov だと絵が出ないどころかちょっと再生したところで core dump します。

umezawa@devubuntu:~$ gst-play-1.0 test-360p-hyuv.avi
Press 'k' to see a list of keyboard shortcuts.
Now playing /home/umezawa/test-360p-hyuv.avi
Redistribute latency...
Redistribute latency...
Redistribute latency...
0:01:02.4 / 0:01:02.4         < - 映像も音声も再生される
Reached end of play list.

umezawa@devubuntu:~$ gst-play-1.0 test-360p-ulrg-median.avi
Press 'k' to see a list of keyboard shortcuts.
Now playing /home/umezawa/test-360p-ulrg-median.avi
WARNING No decoder available for type 'video/x-avi-unknown, fourcc=(int)1196575829'.
WARNING debug information: gsturidecodebin.c(931): unknown_type_cb (): /GstPlayBin:playbin/GstURIDecodeBin:uridecodebin0
Redistribute latency...
0:01:02.4 / 0:01:02.4         <- 映像は再生されず、音声だけ再生される
Reached end of play list.

umezawa@devubuntu:~$ gst-play-1.0 test-360p-ulrg.mov
Press 'k' to see a list of keyboard shortcuts.
Now playing /home/umezawa/test-360p-ulrg.mov
WARNING No decoder available for type 'video/x-gst-fourcc-ULRG, width=(int)640, height=(int)360, framerate=(fraction)30000/1001, pixel-aspect-ratio=(fraction)1/1'.
WARNING debug information: gsturidecodebin.c(931): unknown_type_cb (): /GstPlayBin:playbin/GstURIDecodeBin:uridecodebin0
Redistribute latency...
ERROR pa_stream_writable_size() failed: Connection terminated for file:///home/umezawa/test-360p-ulrg.mov
ERROR debug information: pulsesink.c(1752): gst_pulseringbuffer_commit (): /GstPlayBin:playbin/GstPlaySink:playsink/GstBin:abin/GstAutoAudioSink:audiosink/GstPulseSink:audiosink-actual-sink-pulse
Reached end of play list.
*** Error in `gst-play-1.0': double free or corruption (out): 0x00007f694c00e880 ***
Aborted (core dumped)

プラグインのソースはまだ読んでませんが、avdec_utvideo element の入力フォーマットが unknown/unknown なのがダメなんですかね?

Trackback

no comment untill now

Add your comment now