3 min read

依存が少ない Rust ライブラリを色々作った

C++ から Rust へ少しずつ移行するにあたり、Rust ライブラリを色々作っていました。簡単に紹介していきます。

audio-device-rs

Rust から macOS / Linux / Windows で音声デバイスを扱うライブラリです。

  • macOS: CoreAudio / AudioToolbox
  • Linux: PulseAudio (デフォルト) / PipeWire
  • Windows: WASAPI

video-device-rs

Rust から macOS / Linux / Windows で映像デバイスを扱うライブラリです。

  • macOS: AVFoundation
  • Linux: V4L2 (デフォルト) / PipeWire
  • Windows: Media Foundation

audio-toolbox-rs

Rust から macOS の Audio Toolbox を利用して AAC を利用できるライブラリです。

video-toolbox-rs

Rust から macOS の Video Toolbox を利用して H.264 / H.265 を利用できるライブラリです。

amf-rs

Rust から Linux の AMD GPU に積まれているハードウェアアクセラレーターを利用できるライブラリです。 VP9 / AV1 / H.264 / H.265 が利用できます。

vpl-rs

Rust から Linux の Intel GPU (N150 とかでも利用できる) に積まれているハードウェアアクセラレーターを利用できるライブラリです。 VP9 / AV1 / H.264 / H.265 が利用できます。

nvcodec-rs

Rust から Linux の NVIDIA GPU に積まれているハードウェアアクセラレーターを利用できるライブラリです。AV1 / H.264 / H.265 が利用できます。

openh264-rs

Rust から Cisco が提供している OpenH264 ライブラリを利用できるライブラリです。ダイナミックリンクかつパス指定する必要があります。

macOS / Linux / Windows 対応です。

libvpx-rs

Rust から libvpx を利用できるライブラリです。prebuilt 対応なので libvpx を時前でビルドする必要はありません。VP8 / VP9 が利用できます。シンボリック名の書き換え対応しています。

macOS / Linux / Windows 対応です。

aom-rs

Rust から libaom を利用できるライブラリです。 prebuilt 対応なので libaom を時前でビルドする必要はありません。AV1 のエンコーダーとデコーダーを利用できます。シンボリック名の書き換え対応しています。

macOS / Linux / Windows 対応です。

dav1d-rs

Rust から dav1d を利用できるライブラリです。prebuilt 対応なので dav1d を時前でビルドする必要はありません。AV1 のデコーダーを利用できます。シンボリック名の書き換え対応しています。

macOS / Linux / Windows 対応です。

svt-av1-rs

Rust から SVT-AV1 を利用できるライブラリです。prebuilt 対応なので SVT-AV1 wお時前でビルドする必要はありません。AV1 のエンコーダーを利用できます。

macOS / Linux / Windows 対応です。

opus-rs

Rust から opus を利用できるライブラリです。prebuilt 対応なので opus を時前でビルドする必要はありません。シンボリック名の書き換え対応しています。

macOS / Linux / Windows 対応です。

fdk-aac-rs

Rust から libfdk-aac を利用できるライブラリです。AAC を利用できるようになります。ダイナミックリンクかつパス指定する必要があります。

Linux でのみ利用できます。

libyuv-rs

Rust から libyuv を利用できるライブラリです。シンボリック名の書き換えに対応しています。

libcamera-rs

Rust から Rapsberry Pi の libcamera を利用できるライブラリです。libcamera は ダイナミックリンクかつパス指定する必要があります。

v4l2-rs

Rust から Linux の V4L2 を利用できるライブラリです。現時点では Raspberry Pi の V4L2-M2M でのみ利用できます。Raspberry 4 までの H.264 ハードウェアアクセラレーターが利用できます。

mp4-rs

Rust から MP4 を利用できるライブラリです。依存 0 かつ no_std 対応です。C API と Wasm も提供しています。

m3u8-rs

Rust から HLS で利用する m3u8 形式ファイルを利用できるライブラリです。依存 0 です。

mpd-rs

Rust から MPEG-DASH で利用する mpd 形式ファイルを利用できるライブラリです。依存を最小限に抑えています。

[dependencies]
xml = "1.2"

s3-rs

Rust から Amazon S3 API を利用できる Sans I/O なクライアントライブラリです。依存を最小限に抑えています。

[dependencies]
# 署名計算とチェックサム計算 (feature で切り替え)
# - 署名: SHA-256, HMAC-SHA256
# - チェックサム: SHA-256, SHA-1
aws-lc-rs = { version = "1", optional = true }
sha2 = { version = "0.10", optional = true }
sha1 = { version = "0.10", optional = true }
hmac = { version = "0.12", optional = true }
# チェックサム計算 (CRC32, CRC32C, CRC64NVME)
crc-fast = "1"
# Content-MD5 / SSE-C key MD5 計算
md-5 = "0.10"
base64 = "0.22"
# XML パース
xml = "1.2"

rtmp-rs

Rust から RTMP を利用できる Sans I/O な依存 0 ライブラリです。

rtsp-rs

Rust から RTSP を利用できるライブラリです。依存を最小限に抑えています。

[dependencies]
shiguredo_http11 = { version = "2026.1.1" }
md-5 = "0.10"

srt-rs

Rust から SRT を利用できるライブラリです。依存を最小限に抑えています。

[dependencies]
aws-lc-rs = "1"

cargo-sysroot

Rust のクロスコンパイル用 sysroot を JSON 設定ファイルから生成し、.cargo/config.toml を自動設定する Cargo サブコマンドです。

Raspberry Pi 向けのクロスコンパイル環境を気軽に作れるようになります。

cmake-rs

CMake の公式プリビルトバイナリをダウンロードして提供するライブラリです。新しい CMake を利用するのが簡単になります。

toml-rs

Rust から TOML を利用できる依存 0 のライブラリです。v1.0.0 / v1.1.0 に完全準拠しています。

http11-rs

Rust から HTTP/1.1 を利用できる依存 0 の Sans I/O なライブラリです。圧縮関連はトレイトを利用して好きに組み込む事ができます。

http2-rs

Rust から HTTP/2 を利用できる依存 0 の Sans I/O なライブラリです。WebTransport over HTTP/2 に対応しています。

http3-rs

Rust から HTTP/3 を利用できる依存 0 の Sans I/O なライブラリです。WebTransport over HTTP/3 に対応しています。

Safari 24.6 で入った WebTransport でも動作することを確認しています。

websocket-rs

Rust から WebSocket (HTTP/1.1) を利用できる依存を最小限に抑えた Sans I/O なライブラリです。

[dependencies]
base64 = "0.22"
sha1 = "0.10"
flate2 = "1.1"
shiguredo_http11 = "2026.1.1"

webrtc-rs

Rust から libwebrtc を利用できるライブラリです。libwebrtc の C API を生やして、それを Rust で薄くラップしています。prebuilt に対応しているため libwebrtc をビルドする必要はありません。

macoOS / Linux / Windows とは別に Raspberry Pi にも対応しています。

raw-player-rs

Rust から SDL3 を利用して生の音声や映像を再生するプレイヤーです。prebuilt に対応しているため SDL をビルドする必要はありません。

raden

Rust で利用できる GPU なしで利用できる 2D ベクターグラフィックスライブラリです。 Cranelift ライブラリを利用して高速化しています。API は Blend2D に寄せています。

CI 環境など GPU が無い環境でもダミー映像を気軽に作れるように開発しています。

[dependencies]
cranelift-codegen = "=0.130.0"
cranelift-frontend = "=0.130.0"
cranelift-jit = "=0.130.0"
cranelift-module = "=0.130.0"
cranelift-native = "=0.130.0"