Я пробовал 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