2026-04-19

週刊オープンソース:OxideAV、公開へ

週刊ダイジェストの第一回。オープンソースでその週に出したものを短くまとめる。 書くほどのことが何もなかった週は、これは出さない。

OxideAV、公開へ

今週の目玉は OxideAV — Pure-Rust の メディアトランスコード/ストリーミングフレームワーク。週の頭までは ワークスペースのモノレポだったが、17日にフォーマット単位で45以上の クレートに切り出し、それぞれを OxideAV/ organization 配下の独立した リポジトリとして公開した。同日には release-plz 経由で最初の v0.0.3 / v0.0.4 を出し、以降リリースサイクルはずっと回っている。

対応範囲はあえて広めに取っている:

  • 映像 — H.264、H.265、AV1、VP8、VP9、MPEG-1/2、MPEG-4 ASP、H.263、 Theora、ProRes、MJPEG。
  • 音声 — AAC、MP1/2/3、Opus、Vorbis、FLAC、CELT、Speex、GSM、 G.722 / G.723.1 / G.728 / G.729。
  • 画像 — PNG/APNG、GIF、WebP、JPEG、AVIF(スケルトン)、JPEG 2000 (スケルトン)、JPEG XL(スケルトン)。
  • コンテナ — MP4/MOV、Matroska/WebM、Ogg、AVI、IFF。単純なフォーマット (WAV、生 PCM、slin)はひとつのクレートに同居。
  • トラッカー — MOD、S3M(仕様上デコードのみ)。
  • 字幕 — PGS、DVB、VobSub、ASS/SSA。
  • 基盤oxideav-core(Packet / Frame / Timestamp)、oxideav-codecoxideav-container(トレイト+レジストリ)、oxideav-pixfmt(色空間変換、 量子化、ディザ)、oxideav-job(パイプライン化されたマルチスレッド ランタイムで走る JSON 駆動のトランスコードグラフ)。

原則は C 依存をツリーのどこにも入れない こと。ffmpeglibav も 使わず、直接・間接を問わず *-sys 系のクレートも引かない。各コーデックは 仕様から実装している。CLI(oxideav-cli)と、SDL2+TUI のリファレンス プレイヤー(oxideplay)も同梱。

まだ初期段階で、バージョンは全体的に v0.0.x、カバレッジも均一ではない。 デコードのみのもの、エンコーダがこれから乗るもの、コーデック ID の予約 だけで動作は拒否するスケルトンのままのもの、と幅がある。目指している のは、C のバイナリを 1 GB 引き込まずに実パイプラインへ差し込める フレームワーク。

今週いちばん押したのは H.264。134 コミットで 4:2:2 / 4:4:4 の CABAC デコード、MBAFF の P/B スライスデータ、SI/SP プライマリスライス デコード、separate_colour_plane_flag=1 の対応を片付け、さらに CAVLC の P スライスエンコーダ第一弾(P_L0_16x16 + P_Skip、整数動き推定)を 着地させた。AAC はショートブロック発射のステートマシン化と、 チャンネル単位の TNS 解析が入った。どちらもやることはまだたくさんある。

libwallet:Swap API

KarpelesLab/libwallet0.3.140.3.15 を出荷。目玉はマルチチェーンの Swap API — Solana 側は Jupiter Ultra と dFlow、EVM 側は 1inch を、プロバイダを抽象化した ひとつのインターフェースで扱えるようにした。ERC-20 の事前承認が必要な ケースを検出して UI に伝える仕組みも入っている。Solana の優先手数料は 正しく ComputeBudget 命令経由で流すようになり、表示残高はようやく rent-exempt 分を二重計上せず除外するようになった。

他にも今週

  • goavif — Pure-Go の AVIF コーデック。OxideAV と同じ週に公開。cgo 禁止ルールも同じ。
  • goro / goro-rs — Go 版の PHP と、その Rust 版の平行移植。どちらも継続的にコミット。
  • strtotime — PHP の strtotime() を Go に移植。タイムゾーン対応の自然言語日時パース、 RFC 2822、ISO 8601、相対日付。4月13日の一日で仕上げた。

来週

引き続き OxideAV 全体の作業を進める。