Armadilloフォーラム

ブロードキャストで配信されたH.264映像のデコード・表示について

e-yamada

2016年9月20日 19時28分

お世話になっております。

Armadillo-840にてブロードキャスト配信された下記の動画のデコードおよびディスプレイへの表示を行いたいと考えております。

 ・H.264 TTS (タイムスタンプ形式)

設定するGStreamerのパイプラインについて、ユーザーズサイトの情報を拝見させていただいておりましたが、うまく表示させる事ができておりません。
申し訳ございませんが、パイプラインについてご教示いただけますでしょうか。

よろしくお願いいたします。

コメント

at_shota.tamura

2016年9月21日 10時09分

田村です。

> Armadillo-840にてブロードキャスト配信された下記の動画のデコードおよびディスプレイへの表示を行いたいと考えております。
>
>  ・H.264 TTS (タイムスタンプ形式)
>
> 設定するGStreamerのパイプラインについて、ユーザーズサイトの情報を拝見させていただいておりましたが、うまく表示させる事ができておりません。
> 申し訳ございませんが、パイプラインについてご教示いただけますでしょうか。

ATDE5 などの PC Linux でデコードおよび表示はできているのでしょうか?

※ GStreamer アプリケーションを開発する際には ATDE などでパイプラインを組み立ててから
Armadillo-840 用にパイプラインを合わせていく方法がおすすめです。

ATDEなどでデコード・表示ができていないのであれば、
Wireshark を使った記事[1]を見かけたのでこちらが参考になるかもしれません。

[1]: https://supportforums.cisco.com/ja/document/13042126

田村様

ご回答ありがとうございます。

> ATDE5 などの PC Linux でデコードおよび表示はできているのでしょうか?

現状はできておりません。
ATDE5およびWindows上のVLCメディアプレイヤーでは、下記のネットワークURLにて再生できております。

・udp://@:1234
 ※1234はポート番号

> ※ GStreamer アプリケーションを開発する際には ATDE などでパイプラインを組み立ててから
> Armadillo-840 用にパイプラインを合わせていく方法がおすすめです。
>
> ATDEなどでデコード・表示ができていないのであれば、
> Wireshark を使った記事[1]を見かけたのでこちらが参考になるかもしれません。
>
> [1]: https://supportforums.cisco.com/ja/document/13042126

ご教示いただきありがとうございます。
Wiresharkにてキャプチャを行ったところ、Protocolが"MPEG TS"となっていたのですが、
この場合、GStreamerのパイプラインはどのようにすればよろしいでしょうか。

ご教示いただけますと幸いです。

以上よろしくお願いいたします。

田村です。
お返事が遅くなってしまい申し訳ありません。

>> [1]: https://supportforums.cisco.com/ja/document/13042126
>
> ご教示いただきありがとうございます。
> Wiresharkにてキャプチャを行ったところ、Protocolが"MPEGTS"となっていたのですが、
> この場合、GStreamerのパイプラインはどのようにすればよろしいでしょうか。

お使いの機材(カメラ?)が手元に無いので "ズバリ動くパイプライン" は、
残念がらお伝えすることはできません。
※ データ形式によってパイプラインやエレメントのプロパティを変える必要があるからです。

そのかわりにパイプラインを構築していく手順を書いてみました。
ご参考になれば幸いです。

======================

1. MPEGTS に対応したエレメントを探す

Protocol "MPEGTS" ということがわかったので、
gst-inspect や GStreamer.org [1]で MPEGTS に対応したエレメントを探しましょう。

[ATDE ~]$ gst-inspect-1.0 | grep -ie mpegts

結果、 tsdemux などが使えそうです。

2. 見つかったエレメントのCapsを調べる

使えそうなエレメントを見つけたら、次は Caps(src側) を調べます。
tsdemux は mpeg, h264 などなどを出力することがわかります。

[ATDE ~]$ gst-inspect-1.0 tsdemux
  (省略)
  SRC template: 'video_%04x'
    Availability: Sometimes
    Capabilities:
      video/mpeg
            mpegversion: { 1, 2, 4 }
           systemstream: false
      video/x-h264
          stream-format: byte-stream
              alignment: nal
  (省略)

3. エレメントの次につなげるエレメントを調べる

demux できると、次はおそらくデコードが必要になるかと思います。

デコードに使うエレメントは decodebin なども便利ですが、
MPEGTSということがわかっているので、mpeg2 でgrepするのがよさそうです。

[ATDE ~]$ gst-inspect-1.0 | grep -ie mpeg2

結果、mpeg2dec が見つかりました。
mpeg2dec を inspect して、mpeg2dec の sink と tsdemux の src に同じ Caps があることを確認します。

[ATDE ~]$ gst-inspect-1.0 mpeg2dec
  (省略)
  SINK template: 'sink'
    Availability: Always
    Capabilities:
      video/mpeg
            mpegversion: [ 1, 2 ]
           systemstream: false
  (省略)

vdeo/mpeg の mpegversion [1, 2], systemstream: false で一致するので、
これらのエレメントが繋がることを確認できました。

4. 繰り返し

このようにして1つ1つ使えそうなエレメントを見つけて
パイプラインを組んでいきます。

======================

余談になりますが、もしGStreamerでの開発に慣れていないのであれば、
パイプラインを構築する前に GStreamer.org で公開されている
ドキュメント[2][3]を一読することをおすすめします。

というのも、フレームワーク特有の作法や覚えるべきことが書かれているのは
世に出ているブログなどではなく公式ドキュメントだからです。

[1]: https://gstreamer.freedesktop.org/documentation/plugins.html
[2]: https://gstreamer.freedesktop.org/documentation/
[3]: http://lac.linuxaudio.org/2010/download/GStreamerAudioApps.pdf

田村様

ご回答いただきありがとうございます。

> そのかわりにパイプラインを構築していく手順を書いてみました。
> ご参考になれば幸いです。

ご教示いただいた内容を踏まえ、
エレメントの調査およびドキュメントの内容を調べてみるようにいたします。

以上よろしくお願いいたします。