🍦
ffmpegからWebRTCのWHIPでSora Laboにつなぐ実験
このPullReqのもので、Sora Laboにつながるか実験しました。
以下のものはメモです。マージされればもっと楽にビルドできるようになるはずです。
なんとかしてビルド
この変更はまだマージされていないので、ビルドの方法が示されていません。
いろいろ試行錯誤して、なんとかビルドすることに成功しました。
先にマージ先のリポジトリを取得する。
$ 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でつないでみる。
TOKEN
とCHANNEL_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で配信できるようになったら、いろいろ面白いことになりそうですね。
Discussion