« Amazon Fire TV / Fireタブレットを、TvRemoteViewer_VBで活用する | トップページ | TvRemoteViewer_VB 新機能について。(ショートカット機能、hls.js、黒画面除去、DVD-ISO再生) »

2016年3月 6日 (日)

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

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

2

従来TVRemoteViewer_VBを使うにはそこそこのCPUパワーを持ったPCが必要で、そこがネックになっていたケースも多かったと思いますが、CPUの負荷が軽くなるレベルではなくCPU負荷が殆どないレベルでQSV/NVEncを活用しますので、従来動画配信サーバに使うことがあまり想像できなかったNUCやAtomベースのスティックPCですら、楽に映像配信サーバとして活用できるようになります。

使うための敷居がぐっと下がることになりますので、今までPCを持ってすらいなかった方でも安価なWindowsスティックやタブレットを手に入れれば良いということで利用し易くなるのではないでしょうか?

また従来、フル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をサポートしているか判らない場合はインテルのページでチェックしてみてください。

またよくある話ですが、QSVをサポートしているPCであっても、Windows導入/アップグレード直後、あるいはPC購入直後に動いているHDグラフィックドライバではQSVは動かないことが多いです。利用前に必ずインテルのサポートページから最新版のグラフィックス・ドライバを導入しておいてください。
運用中もQSVEncのバージョンアップに合わせてインテルドライバのアップデートが必要な場合があります。とりあえず使えているけどかなり画像が乱れる、というような場合インテルドライバのアップデートで解消できる場合が多いので、定期的なアップデートをお勧めします。(Windowsアップデートが頻繁なのでシステムが常に最新状態にあると錯覚しがちですが、Windowsアップデートではグラフィックドライバの更新の面倒は見てくれず、また時々Microsoftが提供するものは最新のものではありません。必ずインテルのページに行ってアップデートしてください。)

さて、QSVをサポートしたCPUであることに加えてたまに問題になる点として、お使いの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が使える状態になっているかどうかは、少し下にあるQSVEncに付属しているツールを使って簡単にチェックできます。

具体的にはQSVEncのフォルダにある「QSVが利用可能か確認 [ダブルクリック].bat」

Qsvencck_2

を実行すれば、しばらくしてブラウザ表示でチェック結果が返ってきます。

Qsvencck2_2

「QSVが使用できます。」 と返ってくればQSVEncが使える状態になっています。

ちなみにこちらは手元にあるスティックPCで実行してみたものです。

Qsvencck3

Atom Z8350でも、インテルは明確には謳っていませんがh.264QSVは普通にサポートしているので、TVRemoteViewerの配信サーバとして使えることが判ります。

QSVが使えるはずの構成なのに「使用できます」と表示されない場合は、インテルドライバのアップデートなど、環境を見直してみてください。

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(またはGoogleDrive)上で公開されています。rigayaさんのBlogで右のサイドメニューにある「QSVEnc + QSVEncC」(またはそのミラー)をクリックすればOneDrive(ミラーはGoogleDrive)のフォルダが開きますので、QSVEnc_x.xx_7zip というアイコンを右クリックし、プルダウンで「ダウンロード」を選択して適切な場所に保存してください。保存が完了したら7z等を使って解凍し、中身を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によるエンコでもたまに起きていた現象です。QSVEncではffmpegに比べてやや頻度が高かったのですが、これもQSVEncが改善を進めたことによって、現在は殆ど差がないレベルになりました。

一方これは古いSandyBridgeやIvyBridgeでは起きなかったのですが、新しいKaby Lake(7700K)で最近気が付いたこととして、長時間フルHDの配信を続けていくと、急にブロックノイズが出て画質が崩れる事がありました。理由は今のところよく判っていないのですが、そういう時は少し解像度を下げてストリームを再起動してください。フルHDではなく1280x720にしておけば、殆ど問題は起きないようです。

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

QSVEncはバージョンアップを重ねるうちに非常に安定した環境になっていますので、ffmpegで再生できてQSVEncで再生できないケースは殆どなくなっていると思われますが、これも最近気が付いた点として、番組によってはデフォルト音声(主・副)ではうまく再生できないケースがあります。そういう場合は音声の指定をモノラル(主、または副)にしてストリーム再起動してみてください。

もともとffmpegでは起動パラメータで、デフォルトでは強制的にステレオ(2channel)音声にしてストリーミングしていたので殆どの再生環境で問題は出なかったのですが、QSVEncではデフォルトの指定が違っており、元の音声チャンネルの構成によってはうまく再生できないストリームを作ってしまうケースがあるようです。強制的にモノラル音声にすれば解消するので、もうちょっとデフォルトの設定も見直せば解決する気がしますがまだ詰めていません。とりあえずそういう場合はモノラル音声に変えてください。

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(またはGoogleDrive)上で公開されています。rigayaさんのBlogで右のサイドメニューにある「NVEnc + NVEncC」(またはそのミラー)をクリックすればOneDrive(ミラーはGoogleDrive)のフォルダが開きますので、NVEnc本体を保存した上で解凍し、中身を\NVEncの実行用フォルダにコピーしてください。

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

Nv1

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

なおNVEncの利用時もQSVと同様、NVIDIAのページからご利用のビデオカードに合わせた最新のグラフィックドライバをダウンロードして、アップデートしておくことをお勧めします。
これは最初だけでなく、NVEncをアップデートすればグラフィックドライバも最新版にしないと動かない場合がありますので、定期的に最新版にしておいてください。

NVEncが動作するかどうかは、NVEncCのフォルダにあるツールで確認できます。

Nvencc_2

これはコマンドラインツールなので、コマンドプロンプトを開いてNVEncCフォルダに移動し、「NVEncC_feature_test.bat」を実行してみてください。
動作する環境であれば何も表示されず、動作しない環境の場合エラーが表示されます。その場合はドライバのアップデート等、環境を見直してみてください。

その他の使い方の注意点や特性はQSVと殆ど変らない筈ですので、QSVのパートをご参照ください。
私自身も最近ようやくNVEncを使える環境(i7-7700K + GTX1050)を手に入れ使っていますが、QSVEncと同じく殆どCPUに負荷をかけない状態でフルHDを含む高画質の配信が可能です。(ただしQSVと違って定期的に一瞬CPU負荷が上がることがありますが、これが特性なのか環境依存なのか、はたまたパラメータを見直せば解消するのかは判りません。)
GPU-Zで見ると、QSVと同じくGPU-Loadも上がりますが、むしろNVIDIAの場合に表示されるVideo Engine Loadが上がり、GPUエンコードが働いていることが判ります。

Gpuz_nv_2

尚、最近になってようやく手元の環境を作ったこともあり、NVEncでの動作も改めて検証しているところですが、画質、動作の安定性とも十分満足できるレベルだと思います。ただ時々うまく起動できないケースや、DVD-ISOの配信がうまく動かない等いくつか問題にも気がつきましたので、時間を見て追っかけてみようと思います。

« Amazon Fire TV / Fireタブレットを、TvRemoteViewer_VBで活用する | トップページ | TvRemoteViewer_VB 新機能について。(ショートカット機能、hls.js、黒画面除去、DVD-ISO再生) »

デジタルTV、TS抜きチューナー」カテゴリの記事

コメント

QSVを使用し .tsファイルを視聴しようとすると、不具合が発生してしまいます。

iOS、Androidでは再生から1~2分程すると、いきなり30秒程先に動画が先に進む、を繰り返します。
PCのChrome、Firefoxでは再生が止まり、手動で停止→再生をすると同じように動画が進んでしまいます。

ですが、Windows10のEdgeでは何故か問題なく再生できているので原因が特定できません。
また、リアルタイムの放送でも問題なく再生できます。
標準のffmepg使用時にはファイル再生、リアルタイム放送の両方とも問題ありません。
使用しているQSVEnc、TVRemoteViewer_VBは最新です。

私の設定が間違っているのかもしれませんが、同じような症状の方はいらっしゃらないでしょうか?

HLS設定のところに
; 例 exepath_ffmpeg = "D:\TvRemoteViewer\ffmpeg\bin\ffmpeg.exe"
;   exepath_QSVEnc = "D:\TvRemoteViewer\QSVEnc\bin\QSVEncC.exe"
とありますが「""」これがついているときちんとQSVなどが認識されずWebで選択できずはまってしまったので同じ悩みが起きないようにコメントをしました
誤 exepath_ffmpeg = "D:\TvRemoteViewer\ffmpeg\bin\ffmpeg.exe"
正 exepath_ffmpeg = D:\TvRemoteViewer\ffmpeg\bin\ffmpeg.exe

下の質問ですが、無事に自己解決したことを報告します。

失礼しました。

毎回このブログには、お世話になります。

TVRemoteViewer_VB.iniにQSVEncC.exeとffmpeg.exeのパスを記述しても、動画再生時エンコーダを選ぶための新しい欄が追加されません。パスも合っています。

なぜでしょうか。


コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/570024/63309352

この記事へのトラックバック一覧です: QSV/NVEnc + TVRemoteViewer_VBで軽量PCでもロケフリ フルHDでも気軽にストリーミング:

« Amazon Fire TV / Fireタブレットを、TvRemoteViewer_VBで活用する | トップページ | TvRemoteViewer_VB 新機能について。(ショートカット機能、hls.js、黒画面除去、DVD-ISO再生) »

フォト
無料ブログはココログ
2018年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      

ウェブページ