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 | × |
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へ移行