« 2015年11月 | トップページ | 2016年10月 »

2016年3月

2016年3月 6日 (日)

QSV/NVEnc + TVRemoteViewer_VBで軽量PCでもロケフリ フルHDでも気軽にストリーミング

題名の通りです。ご関係者各位のご尽力によってこういった汎用のH/Wエンコーダが活用出来るようになりました。

2

従来TVRemoteViewer_VBを使うにはそこそこのCPUパワーを持ったPCが必要で、そこがネックになっていたケースも多かったと思いますが、これでNUCやAtomベースのスティックPCですらインテルQSVをサポートしていれば楽に映像配信ができるようになります。

またQSVがなくても比較的安価なNVIDIA GT750やMaxwell世代のGT930を挿す余地があれば、TVRemoteViewer_VBサーバが立てられるようになります。(勿論配信だけでなく録画やファイルサーバとしても使うとなると、それぞれの負荷や影響も考慮する必要がありますが。)

いずれにしろ使うための敷居がぐっと下がることになりますので、今までTVRemoteViewer_VBに興味があっても環境がなかった方も利用し易くなるのではないでしょうか?

また従来、フルHD(1920x1080)での配信は高性能PCにとっても荷が重かったのですが、H/Wエンコード機能を使えば楽にHD画質を複数ストリームで常時配信できるようになります。

(但しHD配信の場合、再生環境にもH/W支援は必要です。通常のiOS/Mac/Android環境であればH/W支援が効くのであまり問題はありません(むしろモバイル環境でそれ程の解像度は意味が無かったり回線速度の方が問題になります)が、PCでEdge以外の環境ではちょっと前まではFlashによるエミュレーションで動いていましたので、HD解像度は荷が重い状況がありました。
が、それもhls.jsによって解決し、現在のバージョンでは大抵のPCでHD視聴も軽くこなせるようになりました。さすがにスティックやWinタブだとWin10/Edgeがないと苦しいですが、それでもHLSはH.264がベースなだけあってハードウェア支援も効きが良く、TVTestでmpeg2デコーダで映すより遥かに滑らかな視聴環境が得られます。)

さて、以下はQSVを使ってフルHDで4ストリームを同時配信している例です。

Qsvenc2

軽くOCしているとはいえ今や年代物のSandyBridgeベースのマシンですが、CPU負荷は殆ど無視できるレベルで、(4ストリームともなると内蔵GPUをかなり目一杯使うとはいえ)インテルHD3000内蔵グラフィクスを活用して、フルHDの映像x4を並行して配信しています。
また内蔵グラフィクスはこれだけ使ってもCPU温度はあまり上がらないのも判ります。

一方こちらは従来型の、H/W支援のない状態でのストリーミングの例です。

Swenc

フルHDでのストリーミングはS/W処理だけだと非常に重く、1ストリームの配信だけで一杯一杯になるのが判ります。(CPUクーラーもかなり煩くなりますね。)
この比較だけでもQSVの効果が判ると思います。

もっと新しいCPUであればミッドレンジ以下であっても内蔵グラフィクス能力はこれより上ですので、複数ストリームの高画質配信も難なくこなします。

QSV/NVEncは従来、「画質はそれほど良くないけどリモートやモバイルで低画質で観るには役に立つ」という程度の立ち位置だったと思いますが、そういう印象は対応ソフトが簡易なものばかりだったのも一因だと思います。最近になってサポートされた高機能なソフトではカスタマイズの幅も広く、(x264の画質には及ばないもののそこらのレコーダの画質を上回る程度に)高画質なトランスコードを、ローエンドCPUにも殆ど負荷をかけない形で処理できます。汎用のCPU/GPU+ソフト的手段がまたもや専用品を上回ることになるわけで、家電自慢の専用トランスコーダという発想がまた1つ過去の遺物になっていきますね。

モバイル端末での視聴であればそもそもHD画質は必要ないのですが、現在のTVRemoteViewer_VBは低ビットレートのロケフリ用途だけではなく、家中のテレビ/モニタを汎用性の高い映像端末にする使い道に広がっていますので、無線LANでも無理のないビットレートで高画質映像を屋内配信するのに重宝すると思います。

1.QSVの利用法

TVRemoteViewer_VB、TVRemoteFilesはいずれも最新版(少なくともそれぞれv1.99以降およびver1.75以降。)にしてください。
その上でTVRemoteViewer_VBでQSVを利用するには、rigaya氏が公開しているフリーウェアのQSVEncを使います。

もともとTVRemoteViewer_VBがHLS生成に使っているffmpegにもQSVサポートはあるのですが、現状では出来が良くなく効果が薄いため、その性能向上を待っていた状態でした。
ところが今年に入ってQSVEncがHLSのリアルタイム生成をサポートし、またrigaya氏がTVRemoteViewer_VBを意識したチューニングやガイドをおこなってくださったため、短期間で必要十分な機能が実現できました。rigaya氏には本当に感謝です。

0) QSVを利用可能なシステム環境かどうかチェック。

QSVEncはQSVが利用できない環境では起動できず、TVRemoteviewerではストリームを開始出来ません
インテルCPUでQSVをサポートしたHDグラフィックを内蔵していることがQSVを利用できる第一の条件です。あるいはこれから購入するCPUがQSVをサポートしているか判らない場合はインテルのページでチェックしてみてください。

その上でお使いのPCのマザーボード(チップセット)がインテルHDグラフィックを利用していることが第二の条件です。利用せずに画面表示はNVIDIAやAMDのGPU任せで内蔵グラフィックを殺した状態にしているノートPC等は要注意ですので、お持ちのPCの製品情報をよく調べて、QSV利用可能かどうかチェックしてください。

そういう話を含めてQSVの機能を使うにはいくつか条件がある場合があります。
http://vladi.cocolog-nifty.com/blog/2011/05/plex-px-w3u2-0d.html#HBQSV

今回の場合利用するプログラムはhandbrakeCLI..exeではなくQSVEncC.exe(またはQSVEncC64.exe)ですので、登録が必要な場合はそちらを登録することになりますが、実際は私の環境では2台中1台がWindows7でプライマリモニターもGeforceに繋がっているにも関わらず、Virtu登録は不要でした。

ご利用の環境でQSVが使える状態になっているかどうかは、少し下にあるQSVEncC.exeを使ってコマンドラインでチェックしてみると判ります。
具体的には(少し下で解説している)\QSVEnc\QSVEncC\x86 フォルダをエクスプローラーで開いた状態で、アドレス欄に cmd と打ってコマンドプロンプトを開き、

QSVEncC --check-hw

と打ってみてください

Qsvcheck

「Success」 と返ってくればQSVが使える状態になっています。しかし、「Error」が返ってきた場合QSVが使えない状態ですので、そのままではQSVEncは使えません。
その場合設定や構成を見直してみてください。

1) QSVEncのダウンロードと配置

QSVEncのReadmeによると、動作に必要なランタイムは以下の通りになりますので、先に導入しておいてください。

Visual Studio 2015 の Visual C++ 再頒布可能パッケージ
http://www.microsoft.com/ja-jp/download/details.aspx?id=48145
.NET Framework 4.x

但し.NET Framework 4.xはTVRemoteViewer_VBの前提にもなっているので、導入済みの筈ですね。

次に、OSVEncの実行用フォルダを適切な場所に作成してください。(以降は\QSVEncフォルダとします。)
QSVEncは2.38以降のできるだけ最新のバージョンを使ってください。2.38でHLS起動時の応答時間や確実性もffmpegと遜色のないほどに向上しましたし、現在のTVRemoteViewer_VBでは2.38で追加されたパラメータを使っていますので、それより前のバージョンをお使いの方も最新版にアップデートしてください。

QSVEncは現在OneDrive上で公開されています。リンクを開いた上で、QSVEnc_x.xx_7zip というアイコンを右クリックすると、プルダウンで「ダウンロード」という選択肢が表示されますので、適切な場所に保存した上で解凍し、中身をQSVEncの実行用フォルダにコピーしてください。
中身は以下のようなファイル構成になっています。

Qsvencc1

QSVEncは対話的に実行する事もでき、その場合setupプログラムの実行が必要ですが、ここではやらなくても構いません。TvRemoteViewer_VBはここの \QSVEncCフォルダ以下にあるバッチ用プログラムのみをそのまま使います。
\QSVEncCフォルダの下にはx86,x64の2つのフォルダがあり、それぞれ32bit版、64bit版のWindowsに対応します。

64bit版Windowsで32bit版QSVEncCを使ってもかまいません(他のソフトと違ってあまり大きな差はありませんが、現在64bit版のほうかいくらか速くなるかも、ということです。)が、32bit版Windowsで64bit版QSVEncC64を指定しないよう、ご注意ください。

2) TVRemoteViewer_VB.iniの編集

QSVEncを利用する場合にTVRemoteViewer_VBの設定画面は一切弄る必要はありません。
QSV対応のテストをしていた時期にはここを弄ることでffmepgとQSVEncCを切り替える方法をガイドしていた事がありましたが最終的にその方法はほぼ使わなくなっていますので、むしろQSV対応でここを弄らないよう注意してください。

現在はTVRemoteViewer_VB.ini にQSVEncC.exe (または64bit版の場合QSVEncC64.exe)の絶対パスを指定するだけでQSV対応が完了します。

またffmpegは本来のHLS生成には使いませんが、補助的な用途としてサムネイルの作成に使います。したがってffmpeg.exeのフルパスもTVRemoteViewer_VB.iniに指定してください。
以上の指定場所は以下の図の通りです。(設定場所はiniの一番上のほうにありますので、判り易いと思います。)

Qsvenccsetting0

以上を設定して保存したら、TVRemoteViewer_VBを再起動してください。これでQSV対応は完了です。

3) 使い方

TVRemoteViewer_VB.iniにきちんと設定がされていれば、動画再生時に以下のように、エンコーダを選ぶための新しい欄が追加されている筈です。(図にはVLCの選択肢もありますがとりあえず気にしないでください。)
ここで「標準」を選べば今まで通りffmpegを使ったS/Wエンコード、「QSV」を選べばQSVEnc使ったH/Wエンコードが起動します。

番組表からの起動
Qsvprogram

ファイル再生
Qsvfile

プレイリスト再生
Qsvpl

ライブ視聴中のチャンネル切替え/属性変更
Qsvlivechg

ファイル/プレイリスト再生中の属性変更/再ロード
Qsvfilechg

リモコンによる属性変更
Qsvremochg

なお、QSV対応をおこなった初回の視聴開始時に、TVRemoteViewer_VBサーバ側にQSVEncCによる通信を許可するかどうかのファイアウォールのメッセージが表示されます。

Qsvenc1_2

これには速やかに「アクセスを許可する」と答えてください。見逃すと視聴が開始できません。

4) 使用上の注意点

QSVEncはffmepgとは全く違うプログラムであるため、HLS配信そのものはほぼ同じような使い勝手になりますが、ffmpegの機能を使って実現していた以下の機能は現状使えません。

①  ファイル再生での可変速(倍速)再生がNG

なお、QSVEnc最新版では実況焼き込みは出来るようになりました。
また以下の点でややffmpegと違う動作をします。

② 映像と音がずれる事があるかも。ずれ方は

 (A) ライブ、ファイル再生とも、コンマ何秒~数秒程度ずっとずれていることがある。、これはストリーム再起動すると変わるので、何度か再起動して適正なタイミングに調整することが可能。
 (B)WOWOW、スターチャンネルや一部映画チャンネルなどで時間経過とともにずれが大きくなっていく

という2種類があります。
(A) (B)ともrigaya氏とユーザーの努力でだいぶ出なくなっています。ただもし気になるほどの音ずれがある場合は、ストリームを再起動してみてください。

③ 途中で再生が止まるケース

長い時間流しっぱなしにしていると映像やCMの切れ目で映像が止まったままになる事があります。
mpeg2-tsの何かの切れ目でエンコードが停止してしまうと考えられ、従来のffmpegによるエンコでもたまに起きていた現象です。ただffmpegでは暫く止まったのち自動的に再開する事が多かったのですが、QSVEncでは再開できず止まったままになる事がありますので、そういう時はストリームを再起動させてください。いずれにしろ流しっぱなしにした時にたまに起きる程度の頻度です。

④ うまく起動できないケース

QSVEnc 2.38で安定性も大きく向上しましたので、ffmpegで再生できてQSVEncで再生できないケースは殆ど解消したと思われますが、まだ長期利用されている訳ではないので、未確認の障害はあるかもしれません。

もしストリーム起動がうまくいかずRevTaskが起動⇔停止を繰り替えしてしまう場合は、無理にストリームを何度も起動しようとせず、(利用できないストリームがどんどん増えてしまわないよう)トップページ管理タブの「ストリーム管理」機能で、使えないストリームはきちんと停止させてください。
その上でライブの場合、別のBonDriverを使えば(相性なのか受信状態の違いなのか判りませんが)うまく起動できる場合があります。
またファイル再生の場合、オプションが適切かどうか確認してみてください。QSVを選択してもエンコード無し(noenc)や音声のみ(sound)の選択は抑止されませんが、実際は現在その選択肢はサポートされていませんので、ストリームは起動できません。

2.NVEncの利用法

NVEncについてもrigaya氏が公開しているフリーウェアNVEncCを使ってQSVEncとぼ同じ手順で、ハードウェアエンコードが使えるようになりました。

Nv2

NVEncを利用するにはKepler以降のGeFoeceが必要になりますが、Gefoeceの型番とコア世代は入り組んでいるので、よく判らない時は英語のまとめ記事からリンクされているWikiなどでご確認してください。安いものでは4千円台のGT710でも使えますし、QSVがどのCPUモデルでも性能に大きな差がない(世代による機能の差はある)のに比べると、高級なモデルほど効きも良くなります。
環境によって同時エンコードできるストリームの数にも違いがあります。上限を越える同時エンコードをおこないたい場合はソフトエンコード(や使える場合はQSV)と併用するのが1つの方法です。

ちなみにQSV、NVEncとくればAMDのVCEもぜひ、という声もあると思いますし、Ryzenも盛り上がってるところですので私もそれが出来るのを望んでいますが、現状ではVCEは前2者と同じレベルで汎用エンコーダに組み込むにはまだまだ機能の不足があるようで、現状実現手段がありません。AMD派の方は気長に待つか、あるいはRyzenに(いずれにしろZenのAPUタイプはまだ出てませんので)安いNVEnc対応グラボを活用する手もあります。

NVEncのダウンロードと配置

QSVEncと同じく、動作に必要なランタイム等を確認してください。現状以下のランタイムが必要です。

Visual Studio 2015 の Visual C++ 再頒布可能パッケージ (x86)
https://www.microsoft.com/ja-jp/download/details.aspx?id=48145

.Net Framework 4.x

次に、NVEncの実行用フォルダを適切な場所に作成してください。(以降は\NVEncフォルダとします。)

NVEncも現在OneDrive上で公開されています。リンクを開いた上で、NVEnc本体を保存した上で解凍し、中身を\NVEncの実行用フォルダにコピーしてください。

TvRemoteViewer_VBで使うのはこの中の\NVEncC\x86 (または\NVEncC\x64)フォルダ下にあるNVEncC.exe (またはNVEncC64.exe)です。
その場所をTvRemoteViewer_VB.ini の以下の場所で指定してください。

Nv1

以上でTvRemoteViewer_VBを再起動すれば、NVEncがエンコーダとして選択できるようになる筈です。

使い方の注意点や特性はQSVと殆ど変らない筈ですので、QSVのパートをご参照ください。
私自身は未だNVEncを使える環境を持っていませんので検証ができませんが、NVEncがきちんと動く環境になっていれば利用に問題は無い筈です。

尚、このようにNVEncをエンコーダとして選ぶやり方は随分前からTvRemoteFilesでも想定してOptionsファイル等も添付してあったのですが、QSVEncの設定をコピーしたものを未検証のまま長らく添付にていました。
現在サーバ側作者さんが正常に動くNVEnc版Optionsファイルを添付されていますので、TVRemoteFiles Ver1.83以降ではそれと同じものを添付する形にしました。
しかしそれ以前に添付されていたものは上記理由できちんと動きませんので、NVEncをこれからご利用の方は上記バージョンにUPすることをお勧めします。

« 2015年11月 | トップページ | 2016年10月 »

フォト
無料ブログはココログ
2017年10月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

ウェブページ