MediaElement.js - Flash Video не воспроизводится до полной загрузки - PullRequest
8 голосов
/ 20 февраля 2011

У меня проблема с тем, что 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 ]

10 голосов
/ 22 февраля 2011

Поскольку вы кодируете свои собственные видео и используете FFmpeg, я предлагаю использовать 'qt-faststart'.

Это полезный инструмент, включенный в FFmpeg, который переупорядочивает файл с видео H.264, «так, чтобы атом moov находился перед данными, тем самым облегчая потоковую передачу по сети».По сути, он позволяет начать воспроизведение веб-фильмов до того, как они будут полностью загружены.

Включите его с помощью следующего каталога ffmpeg:

cd ~/ffmpeg
make tools/qt-faststart

Использование (после вашей кодировки ffmpeg):

qt-faststart input.foo output.foo

Это должно позволить вашему проигрывателю воспроизводить видеопока он все еще загружается.

6 голосов
/ 22 февраля 2011

Flash не всегда может воспроизводить MP4, если они не проиндексированы так, как они хотят.

Чтобы исправить ваш файл, просто скачайте это: QTIndexSwapper

2 голосов
/ 15 марта 2013

Я пробовал qt-faststart с моими собственными файлами, закодированными в MP4 (h264 + AAC), и всегда получал сообщение об ошибке " последний в файле не был атомом 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 
1 голос
/ 07 февраля 2013

Я хотел бы немного расширить комментарий Джона Дайера и сказать, что использование QTIndexSwapper не только для функциональности Flash fallback / fallfoward в MediaElement.js, но и для не-Flash проигрывателя.

Проблема, с которой я столкнулся в не-Flash плеере: мой файл .mp4 должен был загрузить полное видео до того, как он начал проигрываться (я не проверял версию Flash до тех пор, пока не заработал без Flash) и QTIndexSwapper решили проблему.

Я хотел указать на это, так как, когда я впервые прочитал комментарий, я подумал, что он применим только к Flash, и не попробовал его сразу.Не то чтобы я забирал что-то у Джона Дайера, поскольку именно его комментарий в конце концов решил мою проблему, я просто хотел добавить к этому, так что, надеюсь, другие не сделают мою ошибку.

Если кто-тозаинтересованный Я написал в блоге сообщение об этой проблеме и о классе PHP, который тоже должен это исправить.

...