ライブ配信とHDMI-USBキャプチャに関する技術的メモ

ほぼ個人メモです。わすれちゃうので。

Facebook LiveとYouTube Liveへ、HDMI-USBキャプチャを使用して配信する場合

Facebook Liveはフレームレートのずれにゆるく、29.97fpsを30fpsとしてRTMPしても、サーバー側で音と同期を(適当に)取ってくれる。

YouTube Liveはタイムスタンプ見てるのか、29.97fpsのソースを30fpsとしてRTMPすると、ブチブチ途切れ気味の音になる(タイムスタンプ単位で同期をとってると思われる)。

この場合、もちろん使いやすいのはFacebook Liveだけど、ストリームとして厳密に仕様を守っているのはYouTube Live。プロも使うからか。

理由についての考察、というか観察事実

HDMIからUSBにコンバートする場合、29.97fpsが出せず30fpsだけになるアダプタがあるので注意。今年に入ってから買った ezcap というモデルがそうだった。これを使ってYouTube Liveなどに送り込むと、HDMIソース側が29.97fpsの場合、

ソース(カメラ) 29.97fps → キャプチャ 30fps固定 → 配信ソフトウェア (30fpsのまま) → YouTube Live

となり、YouTube Live側は30fpsとして受け取っているのに、実際のデータは29.97fpsとなり、実時間に合わなくなる。1000フレーム枚に1フレーム「足りない」ということになる。

ただ、映像フレームは1フレームぐらい欠落してもほぼ気づかれない。どちらかというと問題は音声で、フレームに同期を合わせていると、サンプリング周波数そのものは合致していても、途中でデータが足りなくなったりする。

現状で市場にあるWebカメラ、USBアダプタともにUSBホスト/PC側からフレームレートの設定を変えられるものが多い。OBSなどではその設定ができるし、さすがにOBSからは最終的に同期がとれてるストリームをRTMPで吐き出している。

ATEM mini/ PROはUSBでのUVCによるキャプチャでも設定どおりのフレームレートで吐き出すが、逆にUSB側からの制御が効かない(USBホスト側からの変更リクエストを受け付けない)ので注意。

ユーザーが注意すべきことは?

実際には、前述のとおりOBSを使えば随所にあるフレームレートの違いはOBS側でうまく吸収してくれるし、ATEM mini /PRO から直接ネットワークに送り込む分にはもちろん問題ない。

問題となるのは、USBカメラ(UVC)入力のRTMPライブストリーマーを自作する際w 。いねーよそんな奴?ごもっともw

サポート Welcome! いただいたサポートは今後の研究開発や寄付に使わせていただきます。