iPhoneやiPadで動画プレイヤーを選ぶとき、比較されるのはたいてい「対応形式の数」です。ところが実際に使っていて不満になるのは、タップしてから映像が出るまでの数秒と、シークバーを動かしてから絵が戻るまでの間、そして端末が熱くなって電池が減っていくことです。
その3つを削ることに設計を振った動画プレイヤー 「Melvra 動画プレイヤー:MKV/NAS対応」 を、App Storeで公開しました。
▶ App Storeで見る(無料) | 製品ページ:Melvra
📌 Melvraの3行まとめ
① MKV・AVI・WMV・RealMediaなどを変換せずそのまま再生(496デコーダ/354デマルチプレクサ)
② SMB/WebDAVのNASへ直接つながり、キーフレームindexの保存で2回目以降の起動とシークが短くなる
③ 起動とシークの実測ミリ秒を再生画面に表示する。速さを主張ではなく数字で見せる
数字を、そのまま製品の顔にする
Melvraには3つの軸があります。
| 軸 | ユーザーに見える価値 | 実測値の例 |
|---|---|---|
| Instant Open | タップしたらすぐ映る | ローカルH.264 1080p30で Open 448ms、MKVで243ms |
| Instant Seek | どこへ飛んでもすぐ再開 | ローカル Seek 15ms、MKV 1ms、SMB上 3〜11ms |
| Efficient Playback | 熱くなりにくい・電池が減りにくい | 熱状態を監視し、必要ならビットレートと解像度を自動で抑える |
これらは開発中に測って終わりにせず、再生画面のPerformance HUDにそのまま表示しています。コーデック、解像度、fps、ハードウェアデコードの可否、ドロップフレーム、起動とシークの実測ミリ秒、ビットレート、バッファ秒、熱状態、再生モード。速いと書く代わりに、いま何ミリ秒だったかを出す方式です。
ハイブリッドエンジン:ハードウェアで通せるものは通す
「MKVが再生できる」と「MKVが軽く再生できる」は別の話です。FFmpegですべてソフトウェアデコードすれば形式は開けますが、発熱と電池の消費は跳ね上がります。
Melvraは、コンテナの解析(demux)と映像のデコードを切り離しました。
├─ ネイティブ形式 → AVPlayer + AVPlayerLayer(PiP / AirPlay)
│
└─ MKV/AVI/TS等 → FFmpegエンジン
libavformat で demux
├─ H.264/HEVC → 圧縮パケットのまま passthrough
│ → AVSampleBufferDisplayLayer(VideoToolboxのハードウェアデコード)
├─ その他の映像 → FFmpegでソフトウェアデコード → NV12へ変換
└─ 音声 → FFmpegでデコード → 48kHzステレオPCM
同期: 音声クロックをマスターにCMTimebaseを駆動
MKVの中身がH.264やHEVCであることは多く、その場合はコンテナを解くだけで、映像の復号はハードウェアに任せられます。ソフトウェアデコードに回るのは、MPEG-4・VP9・VC-1のようにVideoToolboxが扱えないコーデックだけです。
判定には拡張子を使いません。Apple標準形式以外はすべてFFmpegへ回し、AVPlayerが開けなかった場合も自動でフォールバックするので、拡張子が実際の中身と違うファイルでも開けます。
FFmpegは--disable-gpl --disable-nonfreeのLGPL構成で自前ビルドし、encoder/muxer/filterを外したミニマル構成にしています。そのうえでLGPL範囲のdemuxer/decoderは全て収録しているため、RealVideo・Cook・Indeo・Cinepak・VC-1・ProRes・Theoraのような古い形式まで再生できます。
2回目のほうが速い
ネットワーク上の動画で待たされる理由の多くは、デコードではなく読み取りにあります。Melvraはこの層に2つの仕組みを入れました。
Seek Index の永続化:FFmpegエンジンが作るキーフレームのindex(バイト位置とタイムスタンプの対応表)を初回再生時にディスクへ保存し、次回オープン時に注入します。SMB上のMKVで、Openは255ms → 115msになりました。
適応的な先読み:実測スループットの移動平均から先読み量を2〜32MBの間で調整します。シーク(遠距離アクセス)を検出したら、進行中の先読みを即座に打ち切って新しい位置から読み直します。48MBのチャンクキャッシュと合わせて、実測でキャッシュヒット率92%でした。
NASの動画を、コピーせずに
SMB(SMB2/3)はlibsmb2を自前クロスビルドして対応し、サーバーのブラウズ・認証(Keychain保存)・接続テストを備えています。
再生経路には工夫が要りました。SMBのランダムアクセス読み取りを、ローカルHTTPプロキシがRange対応のHTTPとして127.0.0.1に配信する構成にしています。こうするとAVPlayerとFFmpegエンジンが同じ経路で再生でき、先読みやキャッシュの挿入点も1か所にまとまります。
WebDAV(PROPFIND・Basic認証)とHTTP直接URLにも対応します。オフライン保存はレジューム可能で、通信が切れても続きから再開し、完了後にサイズを検証します。ダウンロード済みのファイルは常にローカルを優先して再生します。
字幕を、作った人の意図どおりに出す
MKVに入っているASS/SSA字幕は、位置・フォント・縁取り・インラインのタグまで含めて見え方が決まっています。SRTのように「文字列とタイミング」だけを取り出すと、その指定は全部落ちます。
Melvraはlibass 0.17.3(+freetype/fribidi/harfbuzz/libunibreak)を自前クロスビルドし、VSFilter互換のスタイル・配置・インラインタグ込みで描画します。日本語の改行処理にはlibunibreakを使っています。
字幕トラックを選んだときは、独立したdemuxコンテキストで字幕ストリームだけを全走査し、再生位置より前のイベントも即座に取得します。途中から再生しても、そこまでに定義されたスタイルが効いた状態で表示されます。外部字幕ファイル(SRT/WebVTT/ASS/SSA)の読み込み、±0.5秒のタイミング補正、サイズ変更にも対応しました。
音声トラックも、再生を止めずに切り替えられます(言語・タイトル・コーデックを表示)。
再生中の操作
- 横ドラッグでシーク(サムネイルプレビュー付き)/左右の縦ドラッグで明るさ・音量
- 左右のダブルタップで±10秒、長押しで2倍速
- 0.5〜3.0倍速(音程を維持)、A-Bリピート
- ピクチャ・イン・ピクチャ、バックグラウンド再生、AirPlay
- iPadのキーボード操作(Space / ←→ / J・K・L / Esc)
- 再生位置を5秒ごとに保存し、「最近見た」から1タップで再開
トップ画面は「最近見た/この端末/サーバー/ダウンロード」の4系統だけにしました。多階層のファイルブラウザを模倣せず、再生開始までの摩擦を減らす方針です。
広告と課金について
Melvraは無料で配信しており、ヘッダーのバナーと、3回に1回だけ再生前に表示される全画面広告(15秒後に閉じられます)があります。表示するのは当社アプリの紹介のみで、第三者の広告SDKは組み込んでおらず、広告ID(IDFA)の取得も行いません。買い切りのアプリ内課金で広告を非表示にできます(機能の制限は一切ありません)。
製品概要
| 項目 | 内容 |
|---|---|
| 名称 | Melvra 動画プレイヤー:MKV/NAS対応 |
| 提供開始 | 2026年8月 |
| 対応OS | iOS 17.0以降 / iPadOS 17.0以降 |
| 価格 | 無料(広告非表示の買い切りアプリ内課金あり) |
| 対応形式 | MKV / AVI / WMV / FLV / WebM / TS / MPEG / MOV / MP4 / RealMedia ほか |
| ネットワーク | SMB2/3、WebDAV、HTTP直接URL |
| カテゴリ | エンターテインメント |
| 配信 | App Store |
| 開発・提供 | 株式会社Code and DESIGN |
会社概要
| 項目 | 内容 |
|---|---|
| 会社名 | 株式会社Code and DESIGN(Code and DESIGN inc.) |
| 代表者 | 代表取締役 中島安彦 |
| 事業内容 | iOSアプリ・ゲーム・Webサービスの企画・開発・運営、受託開発 |
| Webサイト | https://code-and-design.jp/ |
| App Store | 開発者ページ |
関連する記事
映像を扱う自社アプリとしては、3層レイヤーで映像をミックスするVJアプリutaverse、埋め込み動画で遊ぶリズムゲームUTapも公開しています。端末内で完結する処理という観点ではiPhoneでローカルLLMを動かすもあわせてどうぞ。
変換も、待ち時間も、発熱も、動画を観るという体験の本筋ではありません。そこを削るために作りました。ご意見・ご要望はお問い合わせからお寄せください。



