code up

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PT2/Friioの映像をiPhone/Kindle Fire HDで見る

安定するにはまだまだ改良が必要だけど、ようやくPT2/Friioのテレビ映像がiPhoneで見れるようになったのでそのセットアップをまとめ。

続きの記事は2013/04/19 PT2/Friioの映像をiPhoneで見る (ffmpeg編)

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を導入。

処理の流れ

  1. SpinelからRecTaskを使って映像を取得
  2. RecTaskから映像をUDP送信する
  3. 受け取ったUDPデータをVLCでトランスコーディングして品質を落として、10秒毎のtsファイルとm3u8(プレイリスト)ファイルを作成する
  4. 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編)

関連記事
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。