8

ビデオが完全に読み込まれるまで、MediaElement.js (フラッシュ ビデオ プレーヤー) が .m4V ビデオ ファイル (ffmpeg を使用してエンコード) を再生しないという問題が発生しています。

完全にロードされる前にすぐに再生されるように見えるさまざまなサードパーティのビデオ ファイルでこれをテストしました。私のファイルだけではありません:(

html5 ビデオ ソリューションを使用して再生すると、フラッシュ フォールバックではなく、すぐに再生されます。

これは、ビデオがエンコードされている設定に関係している可能性がありますか? 他に理由はありません。

コード:

<video id="player1" src='BriefTour.m4v' type="video/mp4" preload="none"></video>

<script>
var videoPlayer = MediaElement('player1',{
  success:function(me){me.play();}              
});
</script>

ご覧のとおり、オプションを指定していません。プレーヤーはデフォルト設定になっています。

誰かがこれに遭遇したことがあり、私を助けてくれることを願っています!

4

4 に答える 4

10

独自のビデオをエンコードして FFmpeg を使用しているので、'qt-faststart' を使用することをお勧めします。

これは FFmpeg に含まれる便利なツールで、「moov アトムがデータの前に来るように」H.264 ビデオでファイルを再配置し、ネットワーク ストリーミングを容易にします。基本的に、ダウンロードが完了する前に Web ムービーの再生を開始できます。

次の ffmpeg ディレクトリで有効にします。

cd ~/ffmpeg
make tools/qt-faststart

使用法 (ffmpeg エンコーディング後):

qt-faststart input.foo output.foo

これにより、ダウンロード中にプレーヤーでビデオを再生できるようになります。

于 2011-02-22T18:25:47.737 に答える
6

MP4 が必要な方法でインデックス化されていない場合、Flash は常に MP4 を再生できるとは限りません。

ファイルを修正するには、これをダウンロードしてください: QTIndexSwapper

于 2011-02-22T02:54:36.850 に答える
2

自分のMP4(h264 + AAC)でエンコードされたファイルでqt-faststartを試しましたが、常に「ファイルの最後のアトムはmoovアトムではありませんでした」というエラーメッセージが表示されていました(出力ファイルがありません)。次に、ファイルに問題がないと想定し、他の問題を検索しました。何時間ものテストの後、私の仮定は間違っていることがわかりました-実際、私のファイルには、最初でも最後でも、moov-atomがまったくなかったようです!

これをうまく修正するために、私は最初にffmpegを使用してファイルを「再生成」しました。つまり、元のh264+AACトラックを再エンコードせずに新しいMP4ファイルに再多重化します。

ffmpeg -i souce_file.mp4 -acodec copy -vcodec copy target_file_1.mp4

この後、新しいファイルの最後に適切なmoov-atomが必要になります。キットが彼の答えで説明したように、これでqt-faststartを使用して最初に移動できます。

qt-faststart target_file_1.mp4 target_file_2.mp4

その後、mediaelementは、ファイルのダウンロードが開始されたときに、再生ボタンをクリックした直後にすべてのビデオを再生します。:)

問題がYouTubeのようなサイトにすべてのファイルを既に持っていること、ホスティングがLinuxベースであり、ffmpegが存在せず、自分でコンパイルできない場合は、ffmpegの静的ビルドを取得すると便利です。あなたはここでそれを見つけることができます:

http://ffmpeg.gusari.org/static/(32ビット)またはここ: http ://dl.dropbox.com/u/24633983/ffmpeg/index.html (64ビット)

残念ながら、私が使用した32ビットビルドでは、バイナリとしてもソースコードとしてもqt-faststartはありませんでした。この場合、ffmpeg SVNからダウンロードして、gccで直接コンパイルできます。私はultra-el-cheapo共有ホスティングで成功しました。ビルドの依存関係はないようです。または、私自身のqt-faststartバイナリビルドを試して、それが機能するかどうかを確認することもできます。

編集:新しいバージョンでは、qt-faststartがまったく必要ないことを発見しました。次のオプションを使用して、ffmpegで直接エンコードできます。

-movflags +faststart 
于 2013-03-15T19:35:47.923 に答える
1

John Dyer のコメントを少し拡張して、QTIndexSwapper の使用は、MediaElement.js の Flashフォールバック/フォールフォワード機能だけでなく、Flash 以外のプレーヤーでも機能すると言いたいと思いました。

私が抱えていた問題は、Flash 以外のプレーヤーで、.mp4 ファイルが再生を開始する前に完全なビデオをロードする必要があったことでした (Flash なしで動作するようになるまで、Flash のバージョンを確認しませんでした)。QTIndexSwapper は、問題。

このコメントを最初に読んだとき、これは Flash だけに当てはまると思い、すぐには試していなかったので指摘したいと思います。最終的に私の問題を解決したのはジョン・ダイアーのコメントだったので、ジョン・ダイアーから何かを奪っているわけではありません。

誰かが興味を持っている場合は、この問題と、それを修正する必要がある PHP クラスについてのブログ投稿を書きました。

于 2013-02-07T17:08:14.920 に答える