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月
対応OSiOS 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を動かすもあわせてどうぞ。

変換も、待ち時間も、発熱も、動画を観るという体験の本筋ではありません。そこを削るために作りました。ご意見・ご要望はお問い合わせからお寄せください。

MelvraをApp Storeで見る(無料)