ライブ配信と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
いいなと思ったら応援しよう!
