MediaSource API を使用して、個別の WebM ビデオを単一のソースに追加しようとしています。
WebM のプレイリストが読み込まれ、それぞれが SourceBuffer として追加される、同じことを試みていたGithub プロジェクトを見つけました。しかし、最後にコミットされたのは 1 年前であるため、現在の仕様とは同期していません。そこで私はそれをフォークし、最新の API プロパティ/メソッドに更新し、さらにいくつかの再構築を行いました。既存のコードの多くは、仕様の例とEric Bidelman のテスト ページから直接取得されました。
ただし、期待どおりに動作させることはできません。Mac OS X 10.9.2 の 2 つのブラウザーでテストしています: Chrome 35 安定版 (この記事の執筆時点で最新) と、フラグが about:config にmedia.mediasource.enabled
設定された Firefox 30 ベータ版 (この機能は、 true
FF 25、および現在の安定は 24 です)。
ここに私が遭遇している問題があります。
両方のブラウザ
最終的には、11 個の WebM (00.webm、01.webm、…、10.webm) で構成された 1 つの長いビデオにしたいと考えています。現在、各ブラウザはビデオの 1 つのセグメントのみを再生します。
クロム
非常に一貫性のない行動。これらのバグを確実に再現することは不可能のようです。
- ビデオが空白になったり、途中に黒いバーが表示されたりして、再生できないことがあります。
- ビデオがロードされ、01.webm の最初のフレームで一時停止することがあります。
- 場合によっては、ビデオが 02.webm のいくつかのフレームを再生して一時停止し、最初の 3 つのセグメントのみが読み込まれることがあります。
- [再生] ボタンは、最初はグレー表示されています。
- グレー表示された再生ボタンを押すと、非常に一貫性のない動作が発生します。時々、再生できない黒いビデオがロードされます。それ以外の場合は、最初のセグメントを再生し、最後に到達すると停止し、もう一度 [再生/一時停止] を押すと、次のセグメントがロードされます。それでも、セグメントをスキップして 04.webm でスタックすることがあります。とにかく、コンソールがすべてのバッファを通過したことを報告しても、最終セグメントを再生することはありません。
正直毎回違います。ここにすべてをリストすることはできません。
既知の警告: Chrome は現在実装していsourceBuffer.mode
ませんが、これがどのような影響を与えるかはわかりません。
ファイアフォックス
- 00.webm のみを再生します。合計実行時間は、そのビデオの長さである 0:08 です。
- ビデオシークが機能しません。(これは、onSeeking イベント ハンドラーで実際に何も起きていないため、予期された動作である可能性があります。)
- 動画は一度終了すると再開できません。
私の最初の理論は、これは と に関係しているというものでしmediaSource.sourceBuffers[0].timestampOffset = duration
たduration = mediaSource.duration
。しかし、新しいセグメントを追加しているにもかかわらず、mediaSource.duration
以外から何も返せないようです。NaN
ここで完全に失われました。ガイダンスは非常に感謝しています。
編集: コードのデュレーション部分のコメントを外し、すべてのビデオでAaron Colwell の Media Source Extension Tools (ヒントを提供してくれたAdam Hartmse_webm_remuxer
に感謝)から実行しました。Chrome で予期せぬ不具合が発生することはもうありません。しかし残念なことに、メディア セグメントが終了すると一時停止し、再生を押しても 1 つのフレームで動かなくなることがあります。
Firefox Beta では、最初のセグメントを超えて再生されず、次のように応答します。
TypeError: SourceBuffer.timestampOffset に割り当てられている値は、有限の浮動小数点値ではありません。
duration
戻り値のログNaN
(ただし FF のみ)。