🍦

ffmpegからWebRTCのWHIPでSora Laboにつなぐ実験

2023/05/31に公開

このPullReqのもので、Sora Laboにつながるか実験しました。
https://github.com/ossrs/ffmpeg-webrtc/pull/1

以下のものはメモです。マージされればもっと楽にビルドできるようになるはずです。

なんとかしてビルド

この変更はまだマージされていないので、ビルドの方法が示されていません。
いろいろ試行錯誤して、なんとかビルドすることに成功しました。

先にマージ先のリポジトリを取得する。

$ git clone https://github.com/ossrs/ffmpeg-webrtc.git
$ cd ffmpeg-webrtc
$ git checkout -b whip origin/feature/whip

これはffmpeg-webrtc.old にディレクトリ名を変更

$ cd ..
$ mv ffmpeg-webrtc{,.old}

マージしようとしているものを取得。

$ git clone https://github.com/winlinvip/ffmpeg-webrtc.git
$ cd ffmpeg-webrtc
$ git checkout -b whip origin/feature/rtc-muxer 

Dockerfileの入っているディレクトリがマージ先にしかなかったので、これをコピーする。

$ cp -a ../ffmpeg-webrtc.old/tmp ./
$ docker build -f tmp/Dockerfile.3_1_0 .

ビルド失敗。
opensslのライブラリが見つからないと言われる。
しかし、これはどうやらconfiureスクリプトの方が間違っているようなので、そのチェックをしているところを外す。

$ cp configure{,.old}
$ vi configure
--- configure.old	2023-05-31 15:17:33.110595627 +0900
+++ configure	2023-05-31 15:22:52.058554654 +0900
@@ -6803,8 +6803,9 @@
 
 enabled openssl            && {
     enabled rtc_muxer && {
-        require_pkg_config openssl "openssl >= 1.0.1k" openssl/ssl.h SSL_library_init ||
-        $pkg_config --exists --print-errors "openssl >= 1.0.1k"
+        true
+        # require_pkg_config openssl "openssl >= 1.0.1k" openssl/ssl.h SSL_library_init ||
+       	# $pkg_config --exists --print-errors "openssl >= 1.0.1k"
     }
 }
$ docker build -f tmp/Dockerfile.3_1_0 .

これでビルドできました。

ビルドしたffmpegを動かしてみる

今ビルドしたdocker imageのimage IDを確認する

$ docker images  |head -2 

image IDを指定して、起動する。

$ docker run -it $IMAGE_ID /bin/bash

ffmpegを実行すると、libopensslの共有ライブラリが見つからないというエラーになったので、以下を実行。

# ldconfig

Sora LaboにWHIPでつないでみる。
TOKENCHANNEL_IDは自分のものをセットして下さい。

#!/bin/sh -eux

TOKEN="your_key"
CHANNEL_ID=your_channel_id
URL="https://canary.sora-labo.shiguredo.app/whip/$CHANNEL_ID"
./ffmpeg -re -f lavfi -i testsrc=s=1280x720:r=30 -f lavfi -i sine=f=440:b=4 \
    -vcodec libx264 -pix_fmt yuv420p -profile:v baseline -r 25 -g 50 \
    -acodec libopus -ar 48000 -ac 2  \
           -f rtc -authorization $TOKEN $URL

音声と映像が出た!!
でも16秒経過するとエラー終了してしまう。
10回やって10回とも同じ症状。送信したバイト数は毎回1328でした。

エラーメッセージ

[rtc @ 0xaaab0434f5c0] Failed to write packet=285B, ret=-111=N/A dup=0 drop=77 speed=   1x     
[rtc @ 0xaaab0434f5c0] Failed to write packet, size=263
av_interleaved_write_frame(): Connection refused
[out#0/rtc @ 0xaaab0434e730] Error muxing a packet
[rtc @ 0xaaab0434f5c0] Failed to write packet, size=260
[rtc @ 0xaaab0434f5c0] WHIP: Dispose resource https://0006.canary.sora-labo.shiguredo.app/whip-resource/tetsu-koba_xxxxxx_sora-devtools/1PS5EXE7DPE63RHCWAF2WKBMKVY4XJH8E9RNR7ZHMY7X8D1ZV5HG ok
[out#0/rtc @ 0xaaab0434e730] Error writing trailer: Connection refused

なんか ffmpeg 側の実装が甘そうということらしいです。まだマージされていないものですし。

でもffmpegからWHIPで配信できるようになったら、いろいろ面白いことになりそうですね。

https://twitter.com/tetsu_koba/status/1663704336030113794

Discussion