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

Share

先日、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 iOS SDK / Sora Android SDK がステレオ音声の再生に対応しました

これまで、時雨堂 が提供する WebRTC SFU Sora の iOS / Android SDK では、ステレオ音声を受信した場合でもステレオで再生することができませんでした。 今回 iOS / Android SDK ともに、ステレオ音声を再生できるように対応しました。 特に Sora iOS SDK では、利用している libwebrtc に、今回必要となる iOS 向けのステレオ音声関連の機能が実装されていないため、一から対応しています。 また、Sora Android SDK では、ステレオ音声の再生に加えて、端末からのステレオ音声の取り込み・送信にも対応済みです。iOS SDK についても、将来的に対応予定です。 GitHub - shiguredo/sora-ios-sdk: WebRTC SFU Sora

By voluntas

Sora Rust SDK 正式リリース

時雨堂は WebRTC SFU Sora 向けの Rust SDK を正式リリースしました。 昨今、Rust の採用が増えていることを踏まえ、 C++ や Python だけでなく、Rust からも気軽に Sora へ接続できる仕組みを提供したいと考えていました。 Sora Rust SDK は Sora C++ SDK や Sora Python SDK と同等の機能を提供しています。AMD、Intel、NVIDIA のハードウェアアクセラレーターに加えて、 Raspberry Pi のハードウェアアクセラレーターにも対応しています。 WebRTC 部分は、主要ブラウザでも採用されている、Google が主導して開発する libwebrtc をベースとしているため、ブラウザと同等の品質で利用できます。 GitHub - shiguredo/sora-rust-

By voluntas

WebRTC SFU Sora 2026.1.0 リリースノート

時雨堂は Sora 2026.1.0 をリリースしました。今回のアップデートでは大きめの変更は入れず、性能、安定化、セキュリティなどを中心に改善しています。 * OBS Studio WHIP サイマルキャスト対応 * 暗号ライブラリを AWS-LC ライブラリに変更 * クラスター利用時の接続ノード範囲指定機能 * クラスター利用時の負荷分散機能の強化 * ログ出力先指定機能 * Ubuntu 26.04 x86_64 / arm64 対応 OBS Studio WHIP サイマルキャスト対応 OBS Studio 32.1.0 の WHIP (WebRTC 配信) にサイマルキャスト機能が追加されました。これは OBS から複数の画質の映像を WebRTC SFU へ送信し、視聴者側で画質を選択できるようにする機能です。 Sora

By voluntas

WebRTC SFU Sora 2025.1.0 リリースノート

2025 年 6 月 25 日に WebRTC SFU Sora 2025.1.0 をリリースしました。今回はスケールアップとスケールアウトを中心に改善しました。また、アプリ側で実現するのが面倒な仕組みを Sora 側で完結できるような機能も追加しています。 スケールアップの効率化 Sora では 1 台で多くのクライアントへ配信できるよう、いわば複数のワーカーを配置して配信を少しずつ分担させるような仕組みになっています。 これまではこのワーカーの数を事前に予測して設定しておく必要がありました。そのため、予測よりも接続が大幅に少ないような場合は、本来必要のないワーカーのリソースを使ってしまうという課題がありました。 今回のリリースからは、ワーカーの数を事前に設定することなく、今現在の接続数に応じて動的にスケールする仕組みを追加しました。これにより、リソースの無駄を最小化し、効率的に運用できるようになります。 さらなるスケールアウト Sora は、分散合意アルゴリズムである Raft をベースにした分散システムとして動作します。これにより、複数台の Sora でクラスター

By voluntas