Rust の MP4 ライブラリを公開しました

先日、Rust で書いた MP4 ライブラリを OSS として Apache License 2.0 にて公開しました。

GitHub - shiguredo/mp4-rust: MP4 library
MP4 library. Contribute to shiguredo/mp4-rust development by creating an account on GitHub.

以前公開した C++ のMP4 ライブラリは、 Go で書かれた MP4 ライブラリを参考に開発しましたが、今回は MP4 関連の ISO の仕様書を購入し、しっかり仕様を読み込んで開発を行いました。

なぜ今更 MP4 ?

これまで、自社製品であるWebRTC SFU Sora(以下 Sora)では、録画ファイルの出力形式として WebM のみを採用していました。これは、 MP4ファイルが壊れやすいという特性があり、サーバー上で録画することを考慮した場合、WebM 一択だったためです。

ところが、OBS が Hybrid MP4 という壊れにくい MP4 形式を考え出し、公開しました。

これにより、Sora の録画機能として MP4 形式の採用が可能であると判断したのがスタートです。

Sora は Erlang/OTP という言語で書かれていますが、マイナーな言語なため、MP4 ライブラリはありません。一から書き起こす必要があります。

MP4 ライブラリは ISO の仕様によって厳密に決められているため、今回は ISO の仕様書を購入し、仕様に沿った MP4 を出力することに決めました。現時点で、すでに無事 Sora の MP4 出力対応は実現できており、12 月リリースの Sora で MP4 への対応を予定しています。

録画合成ツール Hisui の対応

時雨堂では、 Sora 専用の「録画合成ツール Hisui (以下 Hisui) 」を OSS として公開していますが、現状は MP4 の出力のみで、入力には対応していません。

この Hisui は C++ で書かれており、元々、より安全な Rust で書き直そうと考えてはいました。今回、Sora 向けの MP4 ライブラリを開発したこともあり、同じタイミングで一気に Hisui 向けの MP4 ライブラリも Rust で書き直すことにしました。

つまり、Rust で書き直し、MP4 の入力に対応できるようにした新しい Hisui を作る予定で、こちらは来年年明けぐらいにはリリースできればと考えています。

今回、この一連の流れの中で公開したのが Rust で書かれた MP4 ライブラリとなります。

WebAssembly をうまく使う

Rust は WebAssembly との相性が良いのも強みです。今回 Rust 版の MP4 を公開するにあたり、MP4 ライブラリを WebAssembly 化して、MP4 の簡易的な解析結果を提供することにしました。MP4 ファイルをアップロードすると、解析結果が JSON 形式で出力されます。

MP4 Dump
Edit description

Rust で MP4 !と言われてもピンとこない人でも、ブラウザで MP4 が解析できる!ってなると試してくれます。さらに完全にローカルで動くため、ファイル容量が大きくても困ることはありません。

今後

MP4 ライブラリ (WebAssembly) と WebCodecs を利用して、ブラウザで MP4 を読み込んで変換する仕組みをサンプルとして追加する予定です。

Read more

Sora Cloud を Akamai Connected Cloud へ移行しました

2024 年 8 月に、時雨堂の自社サービスである Sora Cloud を DataPacket というベアメタルクラウドサービスから Akamai Connected Cloud (以降 Linode) へ移行しました。 なぜ移行したのか 自社製品である WebRTC SFU Sora でスケールアウトが実現できるようになったためです。 Sora Cloud は時雨堂が開発しているパッケージソフトウェアである WebRTC SFU Sora (以降 Sora) のクラウド版です。 この Sora が Raft ベースの分散システムに対応し、スケールアウトを実現できるようになりました。そのため、DataPacket のベアメタルサーバーで高スペックのマシンを利用する必要がなくなり、低スペックなサーバーをたくさん並べることで、好きなだけスケールできるようになりました。 移行先の選定 条件として、転送量が安いことが第一でした。 もともと Sora Cloud は転送量や利用時間による課金ではなく、転送量に制限がないサービスとして提供したいという思いがありました。

By voluntas

WebRTC SFU Sora 2024 年ロードマップ

WebRTC SFU Sora (以下 Sora) をリリースしてから昨年の 12 月で 9 年目に入りました。ここ最近は OBS を利用した WebRTC の配信に対応したり、より便利な録画機能を提供したりしています。 今回は 2024 年に提供を予定している機能を紹介していきます。今年の大きなアピールポイントは「クラスターリレー機能」と「マルチコーデック対応」の 2 つです。 クラスターリレー機能 現在の Sora のクラスター機能は耐障害性を目的としたものです。特定のクラスターノードに障害が発生しても、再接続すれば別のノードに接続でき、サービスが継続できます。 ただ、ある同一のチャネル (一般的にルームと呼ばれる概念と同じモノです) に参加するクライアントは特定のクラスターノードにしか接続できないという課題がありました。そのため、「どのクラスターノードに接続しても同一のチャネルに参加できる」ようにすることでチャネルのスケールアウトを実現したいと考えていました。 Redis などのデータベースを用意すれば、どのクライアントがどのノードに接続しているかなどの情報を共有する

By voluntas

録画と合成、追加料金なし

WebRTC SFU Sora のクラウド版である Sora Cloud では、 Sora の強みの一つである録画機能が利用できます。また時雨堂が OSS として公開している録画合成ツール Hisui も、クラウド版 Hisui Cloud として提供しています。 クラウド版の映像配信サービスで録画というと、「1 分いくら」というイメージがあると思います。実際、 1 分 2 円程度で録画サービスを提供していることが多いです。また、録画したファイルの置き場の費用がかかる場合もあります。 映像を合成する場合も同様に、合成時間や合成するファイル自体の合計時間などによって費用が発生します。合成は CPU リソースを消費するので、費用がかかるのは当たり前と言えばそのとおりですが、安くても 1 分 2 円程度で提供されることが多いようです。 Sora Cloud ではこの録画と合成を追加料金なしで利用できるようにしました。 録画 Sora の録画機能では、配信している音声と映像を WebM ファイルにします。変換などをせずに録画をするため、

By voluntas