スポンサーサイト
PT2/Friioの映像をiPhone/Kindle Fire HDで見る
安定するにはまだまだ改良が必要だけど、ようやくPT2/Friioのテレビ映像がiPhoneで見れるようになったのでそのセットアップをまとめ。
iPhone
ついでにKindle
出張先や外出先でも1Mbps程度の帯域があればテレビが見れるようになった。
参考にさせて頂いたのはWebTest(配布場所は不定のようで公式サイトは見つからず)、VLC2.0.1 | VLC, ストリーミング | Macでテレビを見よう。、VLC経由でTVTestをブラウザから視聴する方法 | 某氏のたわごと NEXT。ありがとうございます。
WebTestがすんなり動いてくれればよかったんだけど、私の環境ではうまく動作しなかったので、とりあえずiPhoneだけでもと自前で構築した。
セットアップ
環境はWindows 7 Ultimate 64bitにPT2とFriioが接続されており、PT2/Friioの録画・視聴環境が整っていること。詳しくは過去の記事に。
上の記事に追加で必要なソフトウェアなど。
VLC
現在公開されている2.0.1ではうまく変換できなかった(The VideoLAN Forums • View topic - VLC 2.0.1 Crashes on Streaming HTTP & Transcoding)ので、Nightly Buildsから2.1.0を導入。
2013年4月10日現在、vlc-2.1.0-git-20130410-0403-win64.7zを使用中。
RecTask
EpgDataCap_Bonでもよかったのだが、録画の邪魔はしたくなかったのでRecTask 0.1.4を導入。
処理の流れ
- SpinelからRecTaskを使って映像を取得
- RecTaskから映像をUDP送信する
- 受け取ったUDPデータをVLCでトランスコーディングして品質を落として、10秒毎のtsファイルとm3u8(プレイリスト)ファイルを作成する
- iPhoneで見る!
HTTP Live Streamingという方法らしい。iPhone, iPad, Apple TV, iPod touchで追加のアプリなしでストリーミング再生ができるというもの。
RecTaskの設定
RecTaskはダウンロードしたら、解凍したファイル達をそのままTvTestのフォルダに移動する。
RecTaskを起動して次のように設定した。
RecTaskの設定→一般→スクランブル解除→非録画時スクランブル解除を『指定されたサービスのみスクランブル解除する』
RecTaskの設定→ストリーミング→送信先『127.0.0.1』『3456』に
TvTestと似た操作でドライバを選んでチャンネルを選ぶ、左側にある数字のボタンを押して下段のバーを出す、<Network>とある部分を押すとUDP 3456となって送信が始まる。
これでRecTaskによる映像のUDP配信まで完了。次にUDP配信されている映像をVLCで受け取りトラスコして保存するまでの設定を行う。
VLCの設定
最初公式から入手していた2.0.1で試したのだが、Windowsエラーで落ちてしまいうまく変換できなかった。The VideoLAN Forums によると(途中は読んでなくて最後の部分に)H.264 encoding should be fixed in next release.とあったので、Nightly Buildsから2.1.0をダウンロードした。
細かい部分はまだ調整しているけど、コマンドプロンプトから次のようにVLCを起動することでUDPのデータを受信しH264+AACでトラスコ、m3u8ファイルと分割されたtsファイルが出力されるようになる。
2.0.5でも動作。音声mp3もいけました。
start /high d:\Softwares\vlc-2.1.0-git-20120618-0002\vlc -vvv -I dummy udp://@:3456 --sout="#transcode{width=320,height=240,vcodec=h264,vb=192,fps=23.976,venc=x264{aud,profile=baseline,level=30,keyint=30,ref=1},acodec=aac,ab=64,samplerate=24000,channels=2}:std{access=livehttp{seglen=10,delsegs=true,numsegs=5,index=D:\var\www\html\streaming\mystream.m3u8,index-url=http://mydomain.com:8080/streaming/mystream-########.ts},mux=ts{use-key-frames},dst=D:\var\www\html\streaming\mystream-########.ts}"
下記は、最新(2013年4月10日)のvlc-2.1.0-git-20130410-0403-win64.7zで使用中のコマンド。Nightlyなので正式版では変わるかも知れないけど、上のコマンドから変更になった点、解決できなかった点。
- 別フォルダからvlc.exeの絶対パスを指定して起動ができなくなったかも。pushdでvlc.exeのフォルダに移動してから起動するように
- audio-sync, hurry-upはどちらもフレームをドロップさせて再生をスムーズにするためのオプション
- aencオプション(オーディオエンコーダー)のオプションを指定しなくてはいけなくなった
- オーディオエンコーダーに指定するmp3のエンコーダが見つからなかった
- index-urlはhttp://から始めるフルパスだと正しく出力されないので相対パスに変更
pushd d:\Softwares\vlc-2.1.0-git-20130410-0403
start /high vlc.exe -I dummy udp://@:3456 --sout "#transcode{width=640,height=360,vcodec=h264,vb=256,fps=24,venc=x264{aud,profile=baseline,level=30,keyint=30,ref=1},acodec=aac,aenc=avcodec{strict=-2},ab=128,samplerate=48000,channels=2,audio-sync,hurry-up}:std{access=livehttp{seglen=10,delsegs=true,numsegs=4,index=D:\var\www\html\streaming\mystream.m3u8,index-url=mystream-########.ts},mux=ts{use-key-frames},dst=D:\var\www\html\streaming\mystream-########.ts}"
赤字の部分がカスタマイズ可能部分。start /highで優先度高で実行している。
- -vvv
- デバッグ文を出力する場合のオプション。コマンドプロンプトに出る大量のメッセージが邪魔であれば削除可能
- udp://@:3456
- RecTaskで指定したポート番号
- width=320,height=240
- 映像の幅と高さ。iPhone4だとこれくらいでも十分視聴に耐えうる。iPadだとだいぶ見にくいのでもう少し上げた方が良い
- vb=192
- ビデオビットレート。単位はたぶんKbps。環境がADSLなのでだいぶ低めに設定。下記オーディオビットレートとの組み合わせでだいたい10秒=500KBくらい。512KbpsにするとADSL回線では配信(ADSL側から見たアップロード、iPhoneから見ればダウンロード)が間に合わないらしく音声が再生されなくなった
- fps=23.976
- フレームレートの設定。12くらいでも平気かも。低いと映像によっては動きがカクカクする・・・はず
- acodec=aac
- 音声コーデック。mp3かaac。mp3との違いは体感上ないけど、なんとなくAACを選択
- ab=64
- オーディオビットレート。単位はたぶんKbps。vbもそうだけどffmpegのオプションと合わせているみたい。このくらいで十分普通の音質
- samplerate=24000
- サンプリングレート。mp3だとここは48000か44100じゃないと音声が出なくなる。AACだと24KHzが設定可だった
- channels=2
- 音声チャンネル数、あまり変えることはないだろうけど
- seglen=10
- 何秒毎にtsファイルを分割するか。WikiによるとAppleの推奨は10、この記事を書いた人は5を使っているとのこと
- numsegs=5
- 保持するtsファイルの数で、超えると削除されていく。ライブストリーミングするには3以上必要。0だと一切削除しないとのこと
- index=D:\var\www\html\streaming\mystream.m3u8
- VLCが出力する.m3u8ファイルの場所。iPhoneからこのファイルをhttp経由で取りに来る
- index-url=http://mydomain.com:8080/streaming/mystream-########.ts
- m3u8ファイルに埋め込まれるtsファイルのURLの書式を定義する。iPhoneからアクセスする際のURLを指定。DDNSを使っているのでドメイン名で指定した
- dst=D:\var\www\html\streaming\mystream-########.ts
- VLCが出力する.tsファイルの場所。index-urlと一致した場所でファイル名の書式を一致させておく
このコマンドを起動しRecTaskでUDP送信を行えば、D:\var\www\html\streaming\にファイルが作成されていく。古いファイルは消してくれるようなので、クリーニングは気にする必要はない。
Apache HTTP Server
Apache HTTP Server Projectからhttpd-2.2.22-win32-x86-no_ssl.msiをダウンロードしてインストール。
こっちはログファイルが無制限に作成されるので、定期的にクリーニングする必要あり。
conf\httpd.confの下記部分を修正して、HTTP Serverを起動 or 再起動。m3u8のMIME Typeは既に登録されていたので、そのまま使えた
Listen 8080 #DocumentRoot "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs" DocumentRoot "D:/var/www/html" #<Directory "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs"> <Directory "D:/var/www/html">
D:\var\www\html\streaming\index.html
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=500" />
<title>HTTP Live Streaming</title>
</head>
<body style="padding:10px; margin:0; border:0;">
<video width="480" height="320" src="mystream.m3u8" />
</body>
</html>
最後に
Apache HTTP Serverのポート(今回は8080)にアクセスできるようルーターのポートを開けてiPhoneのSafariからhttp://mydomain.com:8080/streaming/にアクセスすればPT2/Friio→RecTask→VLC→HTTPd→iPhoneという流れの完成。iPhoneだけでなくてもm3u8に対応したブラウザ、クライアントであれば再生できる、例えばVLCとか
難点、今後の課題
- ADSLで配信しているため回線が細いからか、CPUが非力のためか、再生が途中で止まる。リロードすれば再生が再開
- チャンネル切替で再生が止まる。正確にはかなりの確率でサーバー側のVLCが落ちる。VLC立ち上げ直して、iPhone側はリロードすれば再生が再開
- TODO: Javaなりphpなりで専用のhtmlとチャンネル切り替え装置を作って、チャンネルが切り替えられるようにする。今はリモートデスクトップでRecTaskの起動、VLCの起動を手動で行っているので自動化したいところ
- TODO: 今はURLに誰でもアクセスできるので自分だけがアクセスできるように認証を導入する。今は見るときしかRecTaskを起動してないので垂れ流してるわけじゃないけど、今後自動化するようになったら導入したい
続きの記事は2013/04/19 PT2/Friioの映像をiPhoneで見る (ffmpeg編)。
- 関連記事
- PT2/Friio録画環境のページ更新
- PT2/Friioの映像をiPhone/Kindle Fire HDで見る
- 録画中に番組情報を確認できませんでした - EpgTimer