Tvmaid MAYA ストリーミング設定

ストリーミング方式、画質設定について説明します。

ストリーミングの種類と変更方法

ストリーミング方式を以下の3つから選択できます(リリース8以降)。
利用しているブラウザがサポートしている方式の中から選択してください。

プログレッシブ・ダウンロード(PD) エンコードした番組を直接配信
WebMフォーマット(デフォルト)
MP4フォーマット
HLS エンコードした番組をHLSで配信
ブラウザがHLSをサポートしている場合に利用可
HLS エミュレーション(HLS EMU) エンコードした番組をHLSで配信
ブラウザ側はエミュレーション

各ブラウザのサポート状況

 OS   ブラウザ   PD/WebM   PD/MP4   HLS   HLS EMU 
Windows Chrome ×
Windows Firefox ×
Windows Edge ×
Windows IE × ×
Android Chrome
Android Firefox △1
Android 標準 〇2 〇2 ×
macOS ※ safari × ×
macOS ※ Chrome ×
iOS ※ safari × × 〇3 ×
iOS ※ Chrome × × 〇3 ×
Windows: Windows 10
Android: Android 4.4
macOS: macOS High Sierra
iOS: iOS 11
※ 掲示板での報告

△1 再生されるが、フルスクリーンになってしまい、操作できない
〇2 再生されるが、余分にエンコーダが起動し重くなる(Androidのバージョンによる?)
〇3 WebUIの設定で、HLS開始待ち時間を2または3に設定すると安定するようです。


表にないブラウザの場合

ストリーミング方式の変更方法

ブラウザで設定します。

番組表の設定パネルの「ストリーミング方式」を確認してください。
「pd」「hls」「hls emu」から選択します。

この設定は、ブラウザ毎に行います。
例えば、Chromeでは「pd」、Edgeでは「hls」のようにできます。

PDのWebM、MP4の切り替えは、ブラウザではできません。
設定ファイル(pd.def)を書き換えてください。
詳細は、後述の「ストリーミング画質設定」を見てください。

ストリーミング方式をどれにするか

一般的には、PD(WebM)が使えるなら、その方が再生開始が速いです。

PDが安定しない場合は、HLSを試すといいと思います。
「HLS」と「HLS EMU」両方使える場合、「HLS EMU」の方が安定しているようです。

PDのMP4は、やや不安定なようです。デフォルトはWebMになっています。

HLS使用時の注意点

HLS開始待ち時間

番組表の設定パネルに設定があります。
ストリーミング開始後に止まってしまう場合に変更してください。
1~3まで設定でき、数字が多い方が安定しますが、ストリーミングの開始が遅くなります。

エンコードの停止方法

HLSの配信時、停止ボタンを押した場合は即座にエンコードが停止します。
再生中にブラウザを閉じた場合、すぐには停止しません。
この場合は、しばらくすると自動的に停止します(15秒くらい)。

セグメントファイル

HLSは、エンコードしたデータを一時的なファイルに書き出します(セグメントファイル)。
このため、ある程度HDDに空きが必要です。

セグメントファイルは、「(一時フォルダ)\tvmaid」に作成されます。
使用されなくなったセグメントファイルは、自動的に削除されます。

録画再生時のシーク動作

例えば10秒先に進めた場合、その部分がすでにエンコード済みであれば、すぐに移動します。
エンコード済み以外の位置に移動すると、再度エンコードやり直しになります。

IEでHLSエミュレーション時に動作しない

IEで再生が始まってすぐに止まってしまう時は、以下の設定をしてみてください。

IEの設定→インターネットオプション→「全般」タブの「閲覧の履歴」の「設定」ボタン→Webサイトデータの設定の「インターネット一時ファイル」タブ→保存しているページの新しいバージョンがあるかどうかの確認
→「Webサイトを表示するたびに確認する」を選択

ストリーミング画質設定

ブラウザで設定します。
番組表の設定パネルで、ストリーミング画質を3種類(high、middle、low)切り替えできます。

画質詳細設定

デフォルトの画質設定は、非力なPCでも動くように最低限の設定になっています。
細かく設定したい場合は、設定ファイルを編集してください。
通常は変更しなくていいです。

設定ファイルは、以下のファイルです。

PD user\pd.def ※
HLS
user\hls.def

※リリース13以降

編集方法

設定ファイルを、テキストエディタで開いてください。

high=-i pipe: -vcodec libvpx -b 700k -quality realtime -s 1280x720 -r 30000/1001 -acodec libvorbis -ab 128k -f webm -
middle=(省略)
low=(省略)

上記がffmpegのオプションです。
high、middle、lowは、ブラウザ側の画質設定に対応しています。

「-b 700k」や「1280x720」等の数値を大きくすると画質が上がります。

ファイルを保存し、ブラウザでストリーミングを見てください。
このとき、Tvmaidを再起動する必要はありません。

window=hide

設定ファイルの上記の部分を「hide」以外にすると、ffmpegのコンソールウインドウが表示されます。
fps(変換速度)が表示されるので、30fpsを下回るようなら画質を下げてください。

PDのオプション設定の注意点

PDの設定時は、MIMEタイプを適切に設定してください。

WebMのとき
type=video/webm

MP4のとき
type=video/mp4

HLSのオプション設定の注意点

HLSの設定時は、以下のように指定してください。

オプション 説明
hls_list_size 1 プレイリストのセグメントファイル書き込み数です。
必ず「1」を指定してください。
hls_segment_filename {segment-id}-%d.ts セグメントファイル名です。
左のように設定してください。
hls_time 2 セグメントファイルの長さです。
デフォルトでは2秒です。
これは下のGOP設定と関連しています。
-g
--gop-len(QSVEncの場合)
60
GOP(キーフレームを入れる位置)の設定です。
TVは30fpsなので、2倍の60fpsを設定し、
2秒ごとにセグメントファイルを作れるようにします。

画質設定例

以下で具体的な設定例を記述します。

PDとHLSを間違えないように気を付けてください。
PDの設定をhls.defに書いてしまうなど、間違えると動きません。

[PD] MP4ストリーミング
[HLS] QSVEncを使用
[PD] MP4ストリーミング&QSVEncを使用
[PD] チャンネル切り替え高速化
[PD] 多重音声の番組を主音声のみにする

[PD] MP4ストリーミング

PDのデフォルトの設定はWebMフォーマットですが、MP4でのストリーミングも可能です。
WebMが使えないブラウザでも再生できるようになります。

MP4をプログレッシブ・ダウンロード対応にするためのオプション「-movflags frag_keyframe+empty_moov」が必要です。

encoder=ffmpeg.exe
type=video/mp4
window=hide

high=-probesize 1000000 -i pipe: -movflags frag_keyframe+empty_moov -vcodec libx264 -b:v 600k -frag_duration 2000000 -preset veryfast -s 1280x720 -r 30000/1001 -f mp4 -
middle=-probesize 1000000 -i pipe: -movflags frag_keyframe+empty_moov -vcodec libx264 -b:v 600k -frag_duration 2000000 -preset veryfast -s 1024x576 -r 30000/1001 -f mp4 -
low=-probesize 1000000 -i pipe: -movflags frag_keyframe+empty_moov -vcodec libx264 -b:v 600k -frag_duration 2000000 -preset veryfast -s 512x288 -r 30000/1001 -f mp4 -

[HLS] QSVEncを使用

ffmpegの代わりに、QSVEncを使ってエンコードを行う設定です。
QSVEncを使うと、非常に高速なエンコードができるため、高画質設定にしてもコマ落ちしなくなります。
使えるかどうかは環境によります。上記のリンク先で確認してください。

encoder=QSVEncC\x64\QSVEncC64.exe
window=hide

high=-f hls -m hls_time:2 -m hls_list_size:1 -m hls_segment_filename:{segment-id}-%d.ts --output-thread 0 --avqsv --audio-codec aac --audio-ignore-notrack-error --audio-samplerate 48000 --audio-bitrate 192 --avsync forcecfr -c h264 --vbr 512 --gop-len 60 --tff --vpp-deinterlace normal --output-res 1280x720 -i - -o -
middle=-f hls -m hls_time:2 -m hls_list_size:1 -m hls_segment_filename:{segment-id}-%d.ts --output-thread 0 --avqsv --audio-codec aac --audio-ignore-notrack-error --audio-samplerate 48000 --audio-bitrate 192 --avsync forcecfr -c h264 --vbr 512 --gop-len 60 --tff --vpp-deinterlace normal --output-res 1024x576 -i - -o -
low=-f hls -m hls_time:2 -m hls_list_size:1 -m hls_segment_filename:{segment-id}-%d.ts --output-thread 0 --avqsv --audio-codec aac --audio-ignore-notrack-error --audio-samplerate 48000 --audio-bitrate 192 --avsync forcecfr -c h264 --vbr 512 --gop-len 60 --tff --vpp-deinterlace normal --output-res 640x320 -i - -o -

「encoder」がエンコードプログラムの指定です。
TvmaidMAYAフォルダ以外に設置する場合は、TvmaidMAYAからの相対パスを指定してください。
上記の設定は、QSVEncのアーカイブの「QSVEncC」フォルダをTvmaidMAYAの中に全部コピーした場合の例です。

iOS、macOSでは、512x288だと再生できないようです。

[PD] MP4ストリーミング&QSVEncを使用

ffmpegの代わりに、QSVEncを使ってエンコードを行う設定です。
「-movflags frag_keyframe+empty_moov」だと失敗するので、「-m frag_duration:1000000」を指定しています。

encoder=QSVEncC\x64\QSVEncC64.exe
type=video/mp4
window=hide

high=--sar 1:1 --audio-copy -m frag_duration:1000000 -f mp4 --codec h264 --output-res 1280x720 --cqp 28 --quality fastest --input-analyze 3 --avqsv -i - -o -
middle=--sar 1:1 --audio-copy -m frag_duration:1000000 -f mp4 --codec h264 --output-res 1024x576 --cqp 28 --quality fastest --input-analyze 3 --avqsv -i - -o -
low=--sar 1:1 --audio-copy -m frag_duration:1000000 -f mp4 --codec h264 --output-res 512x288 --cqp 28 --quality fastest --input-analyze 3 --avqsv -i - -o -

[PD] チャンネル切り替え高速化

TSデータ解析時間を制限することで、チャンネル切り替えや、録画再生の開始を少し高速化します。
デメリットとして、再生がエラーになってしまう可能性が高まります。

オプションに「-probesize 1000000」を付けます。

encoder=ffmpeg.exe
type=video/webm
window=hide

high=-probesize 1000000 -i pipe: -vcodec libvpx -b 600k -quality realtime -s 1280x720 -r 30000/1001 -acodec libvorbis -ab 128k -f webm -
middle=-probesize 1000000 -i pipe: -vcodec libvpx -b 600k -quality realtime -s 1024x576 -r 30000/1001 -acodec libvorbis -ab 128k -f webm -
low=-probesize 1000000 -i pipe: -vcodec libvpx -b 600k -quality realtime -s 512x288 -r 30000/1001 -acodec libvorbis -ab 128k -f webm -

[PD] 多重音声の番組を主音声のみにする

オプションに「-dual_mono_mode main」を付けます。
副音声の場合は、「-dual_mono_mode sub」です。
一番前に付けてください。

設定の一部分だけ記述します。

low=-dual_mono_mode main -i pipe: -vcodec libvpx -b 700k -quality realtime -s 512x288 -r 30000/1001 -acodec libvorbis -ab 128k -f webm -

サポートの表にないブラウザのストリーミング

Webブラウザは、とてもたくさん発表されていますが、特定の動画フォーマットが再生できるかどうかは、ある程度予測がつきます。

ブラウザはたくさんあっても、描画部分であるエンジンが数種類しかないからです。
同じエンジンだと、ほぼ同じ特徴です。

以下の表は、だいたいの目安です。
OSやブラウザのバージョンによって違います。

ブラウザエンジン名 ブラウザ
PD/WebM PD/MP4 HLS HLS EMU
Blink Chrome(新)
Android標準(新)
Androidのほとんどのブラウザ(新)
×(Windows)
〇(Android)
WebKit ※ Chrome(旧)
Android標準(旧)
Androidのほとんどのブラウザ(旧)
macOS、iOSのほとんどのブラウザ(旧)
× 〇? × ×
Gecko Firefox ×(Windows)
〇(Android)
Edge Edge ×
Trident ※ IE、Windowsのほとんどのブラウザ × × ×(旧)
〇(新)
WebKit2 macOS、iOSのほとんどのブラウザ(新) × ×? 〇(macOS)
×(iOS)

※ WebKitは、BlinkとWebKit2に分裂
※ Tridentは、Edgeへ移行