LoginSignup
9
8

More than 5 years have passed since last update.

Pepper のカメラ映像をライブ配信する実験 その2

Posted at

はじめに

案1 HTTP Live Streaming (HLS) を使用

案1-1 Pepper 内に FFmpeg がインストールされているならば、それを使用してインデックスファイル(.m3u8)とセグメントファイル(.ts)を生成できるのではないか (続き)

前回の後、「そういえば -f video4linux2 のオプションをつけていたら結果は違っただろうか」と思ったところがあり、今回、オプションをいろいろ試してみました。結論としては概ね以下の通り。

  • 以下のコマンドで Pepper 内蔵の ffmpeg を使用して /dev/video0 からの入力を動画ファイル化できる。
$ ffmpeg -f video4linux2 -s 320x240 -r 10 -i /dev/video0 -pix_fmt yuv420p video.mp4
  • ただ、残念ながらバージョンが古く、HTTP Live Streaming のためのセグメンタ機能は入っていないよう。

    • -f segment -segment_* 等のオプションをつけて実行すると、コマンドは失敗し、Pepper との接続が切れてしまう。 さらに Pepper は再起動するしないと、再度接続できなくなる っぽい。

ということで、Pepper の ffmpeg のみでは HLS での配信は無理そうです。

案1-2 Pepper 内蔵の FFmpeg で動画ファイルを生成し、別マシンの新しいバージョンの FFmpeg のセグメンタ機能でインデックスファイル(.m3u8)とセグメントファイル(.ts)を生成する

  • 1. 案1-1 のコマンドだと1動画ファイルの容量が増加し続けるので、録画時間のオプション(-t)を追加で指定します。
$ ffmpeg -f video4linux2 -s 320x240 -r 10 -i /dev/video0 -pix_fmt yuv420p -t 15 video.mp4
  • 2. 別マシンに生成した動画ファイルをコピーします。
  • 3. 別マシンの新しい ffmpeg で HLS のファイルを生成します。
$ ffmpeg -i video.mp4 -f segment -segment_format mpegts -segment_time 5 segment-list video.m3u8 video%04d.ts

$ ls -la video*
-rw-r--r--  1 suna  staff     201  1 31 18:06 video.m3u8
-rw-r--r--  1 suna  staff  566197  1 31 18:02 video.mp4
-rw-r--r--  1 suna  staff  296100  1 31 18:06 video0000.ts
-rw-r--r--  1 suna  staff  205860  1 31 18:06 video0001.ts
-rw-r--r--  1 suna  staff  116560  1 31 18:06 video0002.ts
  • 4. 以下のような HTML を作成して、動画を再生します。
index.html
<html>
  <head>
    <title>HLS test</title>
  </head>
  <body>
    <video src="./video.m3u8" controls>
  </body>
</html>

この流れで PC で動画の再生が確認できました。1〜4 を繰り返せばカメラ映像が表示できそうです。

ただ、Pepper と別マシンで 2 回 ffmpeg を通さないといけないのと、中間ファイルを作らないといけないのは、どうにも無駄に感じます。

案1-3 (未確認) Pepper 内蔵の FFmpeg で動画データを取得し、パイプを通して、別マシンの新しいバージョンの FFmpeg のセグメンタ機能でインデックスファイル(.m3u8)とセグメントファイル(.ts)を生成する

まずは中間ファイルを作らないようにするため、パイプを通すのはどうでしょう。

別マシン側から以下のようなコマンドを実行します。

$ ssh nao@IP_Address "ffmpeg -f video4linux2 -s 320x240 -r 10 -i /dev/video0 -pix_fmt yuv420p -f mp4 pipe:1" | ffmpeg -f segment -segment_format mpegts -segment_time 5 segment-list video.m3u8 video%04d.ts

このコマンドは未確認なのですが、こちら「ffmpegを応用する。ファイル転送しながら、エンコード」の情報によると、mp4 のパイプはダメそうな感じがします。

案1-4 (未確認) Pepper 内蔵の FFmpeg で動画データを取得し、生データ・あるいはパイプ可能なデータ形式でパイプを通して、別マシンの新しいバージョンの FFmpeg のセグメンタ機能でインデックスファイル(.m3u8)とセグメントファイル(.ts)を生成する

これも未確認ですが、何となくいけそうな予感がします。
次のアトリエ秋葉原の開発タッチ&トライに参加したときに試してきます。

次回へ続く。

感想

  • やはり手元に Pepper 実機がないと、思うように進みませんねぇ。
9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8