Предотвращение крашей в медиаконтейнерах
Данная статья предназначена для тех, кто заинтересован в сохранении воспроизводимости своих записей на случай внезапного системного сбоя. Далее будут описаны харатктерные особенности целых и поврежденных файлов, записанных в нескольких наиболее известных форматах как MP4, MOV, MKV, FLV, рассмотрены особенности изменений в структуре файлов при различных условиях записи.
Целые
MP4
Данная группа файлов была записана в штатных условиях без угрозы внезапной остановки записи.
Можно заметить, что файл состоит из четырех атомов корневого уровня ftyp, free, mdat, moov, в соответствии со структурой описанной в официальной спецификации формата медиаконтейнера MP4.
Все величины в таблице представлены в байтах. В первом столбце отображено начало блока памяти для каждого атома, во втором — размер данных занимаемых атомом. Таким образом, расположение каждого следующего атома в памяти складывается из размеров всех предыдущих атомов.
Содержимое moov атома имеет особо важное значение для воспроизведения видеоматериала, так как именно в этом месте находится описание информации о том как файл должен быть расшифрован. Для расшифровки файла, чтобы его воспроизвести необходимо установить однозначное соответствие между данными и способами их чтения. Поэтому необходимо знать количество потоков, какой формат данных содержат потоки, какие кодеки совместимы для декодирования. Следует обратить внимание на расположение moov атома в памяти файла. Обычно он расположен в конце файла, что не всегда полезно и безопасно при записи. По этой причине не рекомендуется вести запись в MP4 из-за угрозы получения невоспроизводимого файла в результате внезапного прекращения записи. Такая ситуация возможна при системных сбоях, потере питания и в случае непредвиденного завершения процесса записывающего ПО.
Метаданные извлекаются с помощью ffprobe следующим образом.
ffprobe -hide_banner video.mp4 2> mp4.txt
MOV
В структуре MOV нет особых различий со структурой MP4, файл все также состоит из четырех атомов корневого уровня, но вместе атома free используется атом wide равный ему по размеру. В таких атомах содержится информация о неиспользуемом пространстве памяти. Узнать подробнее про формат медиаконтейнера MOV можно в официальной спецификации формата медиаконтейнера MOV.
В MOV по аналогии с MP4 все метаданные находятся в moov атоме в конце файла.
Метаданные извлекаются с помощью ffprobe следующим образом.
ffprobe -hide_banner video.mov 2> mov.txt
MKV
Структура MKV уже была описана ранее в официальной спецификации формата медиаконтейнера MKV. Основное отличие от прошлых двух контейнерных форматов в том, что данные по умолчанию записываются небольшими фрагментами, вместо одного общего блока информации в случае с mdat для MP4 и MOV. Такая особенность позволяет избавиться от проблемы критического повреждения файлов в случае внезапного прекращения записи, так как метаданные содержатся в каждом отдельном фрагменте.
Метаданные извлекаются с помощью ffprobe следующим образом.
ffprobe -hide_banner video.mkv 2> mkv.txt
FLV
Структура MKV уже была описана ранее в официальной спецификации формата медиаконтейнера FLV. В хранении информации используется идентичный способ с MKV. Видео располагается в памяти фрагментами, но содержимое атомов отличается.
Метаданные извлекаются с помощью ffprobe следующим образом.
ffprobe -hide_banner video.flv 2> flv.txt
Поврежденные
MP4
Если запись была внезапно прервана есть довольно большая вероятность получить невоспроизводимый файл на выходе.
Подробнее узнать причину ошибки можно узнать посмотрев логи через ffprobe в консоли
ffprobe -v error video.mp4 2> mp4_error.txt
Лог ошибки выглядит следующим образом для файла
По ошибке “moov atom not found” можно понять, что метаинформацию извлечь не получится, так как не найден moov атом. Дело в том, что запись закончилась раньше, чем планировалось и moov атом физически не был записан в память. Последний доступный атом в данном случае будет mdat.
Соответственно, если попробовать достать любую метаинформацию файла, то вывод будет пустой
ffprobe -hide_banner video.mp4 2> mp4.txt
MOV
В MOV файлах будет наблюдаться похожая ситуация, но как и в прошлый раз разница будет только в названии и размере некоторых корневых атомов структуры. Сам файл воспроизводиться не будет.
ffprobe -v error video.mov 2> mov_error.txt
Moov атом здесь не наблюдается, как и в MP4, что не позволяет извлечь метаинформацию
ffprobe -hide_banner video.mov 2> mov.txt
MKV
Записанный в условиях внезапной остановки записи MKV файл пострадает меньше по сравнению с MP4 или MOV. Его можно будет воспроизвести, но нельзя перемотать и узнать продолжительность в некоторых плеерах. В этом можно убедиться после извлечения метаданных. Значению поля Duaration соответствует N/A, это значит, что оно не было определено. Также отсутствуют значения длительности для видео и аудио потоков и битрейт.
Вывод метаданных для поврежденного MKV файла будет сопровождаться сообщением об преждевременном окончании файла, но в данном случае это повлияет лишь на последний фрагмент в течение записи которого была прервана запись.
FLV
Поврежденный FLV файл воспроизводится, но так же не имеет определенного значения длины, записанного в поле Duration, как и поврежденный MKV файл, тем не менее информация о начальной отметке времени осталась. Что касается битрейта, то его все также нет. Дело в том, что значения полей Duration и Bitrate вычисляются в самом конце, а не пересчитываются каждый раз после окончания записи каждого отдельного фрагмента, так как это спровоцировало бы дополнительную нагрузку на систему.
Вывод поломанного FLV файла содержит несколько больше информации о повреждениях. Видно на каком именно пакете прервалась запись и к какому потоку он относился. В данном случае проблема была обнаружена в момент декодирования пакета в потоке видео с dts = 9734. Более вероятно возникновение ошибки именно в видео потоке, так как обычно объем видеоданных занимает в разы больше места, чем аудио, соответственно и времени на его расшифровку тратится пропорционально больше.
DTS (decoding time stamp) — время декодирования опорного кадра, который требуется для отображения текущего в базовых единицах. Может совпадать с PTS (presentation time stamp) если текущий кадр опорный. Как правило базовая единица задается в виде дроби с числом тактов в числителе и частотой тактового генератора в знаменателе. В итоге в процессе расшифровки декодировщик не может получить доступ к объекту в памяти, потому что его не существует и выполнение чтения заканчивается ошибкой.
Записанные с предварительными настройками
Предварительно настроенная запись отличается от обычной, тем что в качестве дополнительной настройки используется параметр faststart, который помогает предотвратить проблему критического повреждения MP4 и MOV файлов путем перемещения moov атома в начало файла. Для MKV и FLV данный параметр не имеет большого смысла, так как в их структуре отсутствует отдельный атом с общими метаданными, как moov.
MP4
Теперь подверженный повреждению файл в условиях внезапной остановки записи удалось оставить воспроизводимым и читаемым. На изображении снизу можно изучить структуру полученного после записи файла. На этот раз moov атом был записан в начале файла после ftyp. Раньше он располагался в самом конце после атома mdat.
Метаданные вновь читаются, причем значения для полей duration и bitrate определены, несмотря на то, что запись была прервана внезапно.
MOV
В структуре MOV файла произошли изменения в порядке записи корневых атомов, как и в MP4. Moov атом остался неповрежденным и расположен в начале файла. Воспроизведение файла не нарушено.
Дополнительно убедиться в целостности файла можно после извлечения метаданных
MKV
Для MKV файлов особого эффекта параметр “faststart” не имеет, файл имеет повреждения, полученные в результате внезапной остановки записи.
Файл возможно воспроизвести, но как и в прошлый раз без значений длительности и битрейта. Вывод метаданных сопровождается ошибкой.
FLV
Никаких особых изменений в лучшую сторону для flv файла использованный параметр не дал. Все старые проблемы остались.
Длительность в результате записи осталась нулевой, битрейт неизвестен, тем не менее файл воспроизводится.
Фрагментированные
Еще один вариант предварительной настройки записи, который позволяет добиться фрагментированной записи в файл вместо хранения всей информации в едином атоме.
- empty_moov приведет к фрагментации вывода на 100%; без этого первый фрагмент будет мультиплексирован, как короткий фильм (с использованием moov), за которым следуют остальные медиафайлы во фрагментах
- frag_keyframe вызывает фрагментированный вывод
MP4
Использовав дополнительные параметры, удалось сохранить воспроизводимость файла в условиях внезапной остановки записи. В структуре файла наблюдаются заметные изменения. Moov атом расположен в начале файла, далее следует последовательность из двух повторяющихся практически до конца атомов moof и mdat. В этих двух атомах содержится вся необходимая информация о каждом отдельном фрагменте видео. Moof атом — аналог moov для фрагмента записи, mdat — атом содержащий потоки. Завершается файл атомом mfra.
C извлечением метаданных нет особых в данном случае. В метаданных присутствует длительность, тем не менее в некоторых плеерах отсутствует возможность перемотки и не отображается длительность.
MOV
Что касается структуры MOV файла, то она так же сильно изменена и больше напоминает структуру MKV или FLV файлов из-за последовательности фрагментов, записанных в атомы moof и mdat.
Повреждений метаданных в данном случае не наблюдается.
MKV
Особого эффекта или изменений в худшую или лучшую сторону не наблюдается.
FLV
Особого эффекта или изменений в худшую или лучшую сторону не наблюдается.
Дополнительная информация
Мультиплексирование в obs осуществляется при помощи ffmpeg, соответственно все указанные в данном примере настройки имели бы следующий вид:
ffmpeg -i input -movflags +frag_keyframe+empty_moov out.[mp4/mov]
Пример создания фрагментированного MP4 файла (fMP4) из стандартного MP4 файла
ffmpeg -i video.mp4 -g 52 -c:a aac -c:v libx264 -f mp4 -movflags frag_keyframe+empty_moov fragmented_video.mp4
Альтернативный вариант предварительной настройки записи, который позволяет добиться фрагментированной записи в файл вместо хранения всей информации в едином атоме.
- empty_moov приведет к фрагментации вывода на 100%; без этого первый фрагмент будет мультиплексирован, как короткий фильм (с использованием moov), за которым следуют остальные медиафайлы во фрагментах
- separate_moof инициирует создание отдельного атома moof (фрагмента видео) для каждого потока. Обычно пакеты для всех потоков записываются в moof atom (что немного эффективнее), но с этой установленной опцией мультиплексор записывает одну пару moof/mdat для каждой потоков, что упрощает разделение дорожек.
- frag_keyframe вызывает фрагментированный вывод
- omit_tfhd_offset отменяет запись абсолютного значения base_data_offset в атомах tfhd. Это позволяет избежать привязки фрагментов к абсолютным позициям байтов в файле/потоках.
MP4
Следующие настройки позволяют создавать фрагментированный MP4 (fMP4), который вы сможете просмотреть во время преобразования. Однако для просмотра будут доступны только фрагменты, полностью закодированные на момент запуска файла. Чтобы просмотреть фрагменты, закодированные после этой точки, вам придется перезагрузить источник просмотра.
Аналогично прошлому примеру с фрагментацией файл состоит из последовательности атомов корневого уровня mdat и moof и имеет moov атом вначале.
Таким образом, данный способ наравне с предыдущим позволяет избежать повреждения метаданных файла в условиях внезапного прекращения записи, что фактически гарантирует возможность дальнейшего воспроизведения файла.
MOV
Эти настройки также применимы в случае с MOV файлами и на выходе дают сравнимый результат
Как результат здесь так же сохраненные метаданные и нормальная воспроизводимость файла
MKV
Особого эффекта или изменений в худшую или лучшую сторону не наблюдается.
FLV
Особого эффекта или изменений в худшую или лучшую сторону не наблюдается.
Дополнительная информация
Мультиплексирование в obs осуществляется при помощи ffmpeg, соответственно все указанные в данном примере настройки имели бы следующий вид:
ffmpeg -i input -movflags +frag_keyframe+separate_moof+omit_tfhd_offset+empty_moov out.[mp4/mov]
Вывод
Чтобы уменьшить вероятность утраты доступа к записанным видеофайлам лучше задуматься сразу над тем, как избежать негативных последствий при возникновении аппаратных или системных проблем на записывающем устройстве. Сделать это можно, выбрав один из более отказоустойчивых форматов записи, как MKV/FLV или, если выходной формат принципиально важен, то воспользоваться одним из методов предотвращения крашей в MP4/MOV из статьи. Восстанавливать убитый файл, гораздо труднее и не всегда возможно. Для тех, кто уже столкнулся с этой проблемой и еще ищет решения возможно будет полезна следующая статья, посвященная теме восстановления MP4/MOV файлов.
Полезные источники
- FFMPEG
- FFPROBE
- MP4 Specification / Краткое описание формата MP4
- MOV Specification / Краткое описание формата MOV
- MKV Specification / Краткое описание формата MKV
- FLV Specification / Краткое описание формата FLV
Moov atom что это
[Ответить]
Exact33139 [14.10.2013 10:46] Хочу идеально закодировать видео для ютюба:
Ютуб с конца весны урезали, добавив опцию 144p в настройку качества, что повлияло на качество hd режима. 1080 выглядит как 720 , 720 выглядит как 480, без опции 144, все мои старые видео,залитые ранее весны , качество которых было хорошим, теперь выглядят хуже, при при статической ситуации разница не видна, в динамических сценах все превращается в кашу.
Ютуб дал инфу для оптимального кодирования, ссылка на источник: https://support.google.com/youtube/answer/1722171?hl=ru
Прогрессивная развертка (не чересстрочная)
Высокий профиль
2 последовательных B-кадра
Закрытая группа изображений (GOP). GOP равняется половинной частоте кадров.
CABAC (контекстно-адаптивное двоичное арифметическое кодирование)
Переменный битрейт. Ограничений для битрейта не предусмотрено. Рекомендуемые битрейты приведении ниже.
Цветовое пространство: 4.2.0
Помещайте элементы moov atom в начало файла (быстрый старт).
Я пытался найти программу которая бы закодировала бы видео по этим рекомендациям, но не нашел такой программы, чтобы все одновременно было, где есть cabac — нет 2 b фрейма и гоп итд. Затем я узнал про существование FFMPEG — по инфе интернета ютуб использует в своих серверах эту программу для сжатия поступаемого туда видео, но пока я не смог разобраться как точно выставить желаемые параметры для кодирования.
Теперь вопрос к тем, кто разбирается в FFMPEG encoder, как добиться таких настроек в этом кодере?
Свою неудачную попытку я обрисую так
Видео захваченное на 50 кадров/сек в цветовом пространстве glRGB в формате тга я конвертировал в программе вегас в формат uncompressed, добавив фильтры unsharp mask, sony levels , sony soft contrast и преобразовав в частоту кадров 30fps с помощью размытия.
Затем, покопавшись в гугле я скачал FFMPEG я закодировал видео с такими параметрами: ffmpeg -i Video.avi -pix_fmt yuv420p -c:v libx264 -qp 0 -bf 2 -g 150 -coder 1 -b:a 192k Video1.mp4 , так же я прогнал закодированное в мп4 видео через программу mp4box, которая переносит элементы moov atom в начало файла
на выходе я получил следуещее: https://www.youtube.com/watch?v=cOFU0I2vzYU&hd=1 , результат не лучше,чем мой старый метод кодирования, а именно залитый лослесс Huffyuv v2.1.1 — https://www.youtube.com/watch?v=ULzwtxyluJc&hd=1
и качество меня не устроило, возможно я не достиг нужного потому что параметры ffmpeg не настроены правильно и какая-либо опция упущена
Хочу идеально закодировать видео для ютюба
Exact33139 писал(а):
Закрытая группа изображений (GOP). GOP равняется половинной частоте кадров.
Exact33139 писал(а):
где есть cabac
https://dl.dropboxusercontent.com/u/29197369/ForumPosts/Screen%20Shot%202013-10-14%20at%2017.03.23.png
Turbo.264HD Exact33139 [14.10.2013 14:25] :
blblTb
Благодарю за совет и попробую эту софтину, возможно это то, что нужно. Exact33139 [15.10.2013 09:35] :
Ютуб транслирует все режимы с приходом весенней опции 144p, включая hd, в формате flv. Ранее он транслировал мп4 формат в режиме hd, однако еще хранит мп4 файл на сервере, что дает возможность оценить масштаб ухудшения каритнки в деталях . Для 720 режима, свойств транслируемого файла не знаю, потому как моя специальная утилита не видит hd flv и поэтому нет возможности его скачать для детального рассмотрения,но можно скачать flv максимального качества — large.flv.:
Качество его очень схоже визуально с транслируемым 720 с опцией 144, только разрешение ниже, также я могу скачать файл лучшего качества мп4 или вебм 720, качество которых на порядок выше, чем новое 720p c режимом 144,и соответствует качеству ютуба до весеннего «обновления», когда еще не было режима 144p, Это разница отчетливо видна в динамичных моментах видео с большим количеством деталей, четкие линии и контуры начинают распадаться на квадраты у флв, в отличии от мп4:
На 720 для мп4 и вебм отводился битрейт 3000 (Кб/c):
large.flv, разрешение которого является 854х480 (409920 пикселей) и битрейт 1291:
Это говорит о том, что гипотетически hd flv с разрешением 1280х720 (921600 пикселей)- качество которого меня интересует и имеет пикселей в 2.25 раз больше, имеет битрейт во столько же раз больший и эта цифра составляет 2900, что аналогично битрейту мп4 файла с качеством без 144p.
Из всего этого можно сделать вывод, что отличия старого ютуба от «нового» в качестве сжатия. Flv файл, что транслируется новым ютубом по умолчанию, вместо трансляции мп4, как это было раньше, до внедрения 144p, при аналогичном битрейте значительно проигрывает мп4 в качестве.
Поиски методов кодирования здесь бесполезны и нужно идти другим путём, а именно выяснить тонкости сжатия hd flv с битрейтом 3000Кб\c, каких оттенков или деталей избегать, чтобы картинка не сыпалась в динамичных моментах и какие фильтры накладывать.
К инструкция по расширенной настройке кодирования, которая написана до внедрения 144p, и которая ранее хорошо работала, теперь нужно добавить еще и фильтры, убирающие те или иные детали и цвета, которых боится flv, чтобы избежать развала картинки на квадраты.
Я не опытен в обработке видео, но думаю более опытные люди поделяться интересными мыслями о тонкостях этого формата и как бороться с его недостатками. blblTb [15.10.2013 12:18] :
1. А кто вам сказал, что внутри контейнера flv не мp4?
Раздражающая маслянистая неестественность «идеального», с вашей точки зрения» видео, лично меня выхихикивает.
как моя специальная утилита не видит hd flv
2. Тонких ценителей лицезрения волшебных полётов маловато, особенно тех, кто вместо самого процесса игры ставит перед собой целью увидеть как смешной персонаж, плавно воспаряет над хаосом в высоком разрешении.
Я уже много раз вам пытался донести, что суть кинематографа не в бессмысленно наращивании частоты и мегапикселов. Чем плавнее ваше видео, тем меньше сопереживаешь неподдельному страданию и жертвам персонажа.
Exact33139 писал(а):
использовали кодек xvid
https://dl.dropboxusercontent.com/u/29197369/ForumPosts/Screen-Shot_T.jpg
https://dl.dropboxusercontent.com/u/29197369/ForumPosts/Screen-Shot_B.jpg Exact33139 [15.10.2013 12:54] :
blblTb
Exact33139 писал(а):
транслируется через контейнер
Exact33139 писал(а):
повысив качество пикселя
Moov atom что это
Всем приветы! Меня зовут Ваня, я медиаинженер и занимаюсь разработкой видеоплатформы в Ozon — в основном бэкендом.
В апреле 2022 года мы презентовали сервис Ozon Моменты — ленту коротких видео. Главные фичи, которые мы хотели реализовать:
- скорость отображения контента: видео должно стартовать максимально быстро, а переходы между роликами должны быть максимально бесшовными;
- качество контента: видео должно быть приемлемого качества и хорошо выглядеть;
- размер контента: видеофайл должен быть минимального размера;
- универсальность контента: видео должно воспроизводиться на любом экране, будь то iPhone 69 Pro Max или тостер от Smeg.
Что мы сделали для реализации вот этого всего и на каких дрожжах, читайте под катом.
Из чего состояла видеоплатформа Ozon
Мы не стали изобретать велосипедов и сделали всё вполне стандартно. На видеоплатформе существует два типа контента:
- VoD (Video on Demand) — видео по запросу, которое уже полностью готово к просмотру;
- Live–видео, которое генерируется реалтайм и ещё не завершилось (видеостримы).
VoD-контент двигается примерно по следующему маршруту:
- Пользователь со своим медиаконтентом отправляется к нам на uploader и пробует загрузить некий файл. На данном этапе мы со стороны видеоплатформы проверяем его на базовую валидность и пригодность (медиафайл ли это вообще, что у него внутри и т. п.). Если всё хорошо, отправляем его в хранилище для оригиналов видео (в нашем случае это S3).
- После завершения загрузки видеоплатформа ставит в очередь обработки задачу на транскодинг принятого контента.
- Первый освободившийся транскодер забирает задачу из очереди и делает из оригинального файла пригодный для адаптивного просмотра «букет». В него входят видеофайлы для создания адаптивной раздачи (транскодинг в разные качества и сегментация), вспомогательные медиафайлы (превью, обложка и т. п.) и дополнительная информация о контенте. По окончании всех стадий обработки полученный контент улетает на файловый сервер для дальнейшего хранения и раздачи.
- Как только контент обработан и записан в хранилище, происходит его анализ на наличие запрещённого содержания: алкоголя, сигарет, порнографии, стороннего контента.
- После апрува контент может быть отдан наружу для просмотра. Естественно, передача происходит через кэширующие слои и провайдера CDN .
В случае с live-стримингом контент течёт по пайплайну:
- Пользователь создаёт в админке стримера новый стрим, под который выделяется отдельный транскодер. Сам стример получает endpoint для стриминга на видеоплатформу.
- Через приложение для стриминга пользователь запускает поток на выделенный endpoint, который проксирует контент на выделенный транскодер. На стороне транскодера поток преобразуется в адаптивный и сегментируется для раздачи пользователям.
- Когда поток запущен, через админку стримера пользователь публикует свой стрим — и он становится доступен на видеоплатформе другим пользователям. Параллельно стартует запись стрима для возможности его просмотра после завершения трансляции.
- Live-контент, так же как и VoD, раздаётся через кэширующие слои бэкенда Ozon и CDN провайдера.
Запихиваем всё в ленту
Так как основное наполнение нашей ленты — это видео, то нужно впихнуть всевозможный контент с сохранением всех её фич. Основные типы контента, которые должны быть в ленте и обслуживаться видеоплатформой:
- видеоотзывы;
- live-трансляции;
- развлекательный видеоконтент.
Причём если видеоотзывы и live-трансляции к моменту релиза Моментов (кек) уже существовали и комфортно себя чувствовали на видеоплатформе, то развлекательные ролики были новым типом и требовали к себе подхода в лучших традициях соцсетей.
Пройдёмся по контенту чуть более подробно.
Покупатель, купив определенный товар, может записать о нём видео и загрузить в карточку товара. Это и есть видеоотзыв.
Live-трансляции
Это стримы продавцов. На них могут быть как распродажи с хорошими скидками, действующими во время стрима, так и разнообразные розыгрыши призов с викторинами, песнями и электрошокерами на ведущих (хорошие стримы и конкурсы интересные).
Развлекательный видеоконтент
Короткие и залипательные ролики, в которых пользователи обычно в развлекательной форме взаимодействуют с товарами, снимая это всё на видео.
А что по технологиям?
На момент проектирования Ozon Моментов на видеоплатформе весь контент раздавался по HLS в адаптиве. Немного теории:
HTTP Live Streaming — протокол, придуманный корпорацией Apple, который позволяет предоставлять пользователю контент в виде нарезанных на кусочки (чанки) фрагментов, готовых к воспроизведению отдельно друг от друга. Может использоваться и для VoD, и для live-трансляции. Поддерживает возможность шифрования контента, разные качество, кодеки, языки, субтитры внутри одного HLS-потока.
В состав HLS обычно входят:
- Мастер манифест, в котором указываются доступные качества контента, их параметры (разрешение, кодеки, количество каналов звука и так далее) и ссылки на скачивание этих качеств.
Пример:
#EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=779162,RESOLUTION=360x640,FRAME-RATE=30.000,CODECS="avc1.4d401e" index-f1-v1.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1428476,RESOLUTION=540x960,FRAME-RATE=30.000,CODECS="avc1.4d401f" index-f2-v1.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2523337,RESOLUTION=720x1280,FRAME-RATE=30.000,CODECS="avc1.4d401f" index-f3-v1.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=5480232,RESOLUTION=1080x1920,FRAME-RATE=30.000,CODECS="avc1.4d4028" index-f4-v1.m3u8
- Медиаплейлисты, в которых описаны все сегменты выбранного качества, параметры сегментов и ссылки на них.
Пример:
#EXTM3U #EXT-X-VERSION:7 #EXT-X-PLAYLIST-TYPE:VOD #EXT-X-TARGETDURATION:2 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-MAP:URI="stream_0_init.m4s" #EXTINF:2.000000, stream_0_seg_1.m4s #EXTINF:2.000000, stream_0_seg_2.m4s #EXTINF:2.000000, stream_0_seg_3.m4s #EXTINF:0.633333, stream_0_seg_4.m4s #EXT-X-ENDLIST
- Медиасегменты, которые являются кусочками (чанками) медиаконтента.
Адаптивное вещание
Это способ раздачи контента для его воспроизведения без буферизаций на стороне клиента с учётом пропускной способности его интернет-соединения. Для адаптивного стриминга исходный медиапоток транскодируется в потоки разного размера и веса (например, в качество 1080р, 720р, 480р и 360р), которые режутся в одних и тех же местах на сегменты для синхронизации перехода с одного качества на другое. Картинка для наглядности:
Кодеки мы решили использовать самые стандартные:
- H.264 — для видео;
- AAC — для аудио.
Выбирали кодеки по простому правилу: чем распространённее, тем лучше. H.264 — это самый распространённый кодек, который может быть декодирован на 99,9% устройств с экраном на борту. AAC также считается стандартным для устройств, способных воспроизводить цифровые звуки.
Примечание: естественно, есть более навороченные кодеки с лучшей степенью сжатия (типа H.265 или Opus), но мы их не используем (пока что) в связи с тем, что есть необходимость свести к минимуму используемые типы контента.
В данном решении всё вроде бы выглядит неплохо:
- адаптив для пользователей с разным каналом (будь они в центре Москвы на 10G или в деревне Средние Петушки на тонком канале от вышки времён «верните мне мой 2007-ой»);
- протокол стриминга поддерживается если не каждым, то почти каждым плеером (Siemens ME45 не в счёт);
- software-плееры практически не требуют каких-то сакральных знаний от клиентского разработчика (Plug and Play: добавил ссылку в плеер и — оно работает).
Но так как лента должна не только работать, но и работать быстро, то в таком решении хранения и раздачи контента будут проблемы. Вот основные из них:
- время старта будет страдать из-за большой вложенности адаптивных плейлистов HLS (плеер сначала идёт за адаптивным плейлистом со ссылками на медиаплейлисты, потом — за медиаплейлистом с медиасегментами, потом — за init-чанками с метаинформацией о потоках для инициализации плеера, и только после этого в плеер загружается сам закодированный кодеками медиа-payload);
- время перехода от одного видео к другому будет страдать из-за проблем с предзагрузкой HLS (например, в iOS сделать это по-простому не получится в связи с правилами безопасности системы, которая не даст воспроизвести контент до тех пор, пока он не будет скачан полностью).
Как минимум эти вещи без каких-либо внушительных затрат (разработка своего протокола, написание своих плееров, обеспечение их корректной работы и пр.) делают прямое использование HLS в ленте неприемлемым.
Получается, что для реализации видеоленты в нужном нам виде требуется что-то простое, что-то универсальное и легко интегрируемое… И имя ему (внезапно) MP4.
MP4 — это формат медиаконтейнера, являющийся частью стандарта MPEG-4. Используется для упаковки цифровых видео- и аудиопотоков, субтитров, афиш и метаданных, которые определены группой специалистов MPEG. Как и большинство современных медиаконтейнеров, MPEG-4 предусматривает возможность показа видео через интернет. Вместе с файлом передаются метаданные, содержащие необходимую для вещания информацию. Контейнер позволяет упаковывать несколько видео- и аудиопотоков, а также субтитров.
МР4-файл состоит из частей (так называемых атомов), которые отвечают за определённое поведение MP4-демультиплексора (грубо говоря, распаковщика MP4-контейнера). Вот пример структуры файла:
Атомы имеют в своей структуре несколько важных полей:
- SIZE — размер атома в байтах. Он нужен для корректности демультиплексирования структуры файла.
- TYPE — тип атома (например, упомянутые выше MOOV, FTYP, MDAT и пр.). Он указывается для корректного раскладывания вложенности атома.
- LARGESIZE — размер атома, в случае если параметра SIZE не хватает и атом слишком большой. Для этого в поле SIZE проставляется 1, оно игнорируется — и используется LARGESIZE.
- DATA — непосредственно данные атома.
Атомы бывают верхнеуровневыми и вложенными. Все атомы в рамках этой статьи описывать не имеет смысла (их достаточно много, при желании можно почитать о них тут), но основные три описать всё же стоит:
- [FTYP] — атом, указывающий на то, что файл формата MP4 (грубо говоря — MIME type);
- [MDAT] — атом, в котором находится payload для декодера;
- [MOOV] — атом, в котором описываются все дорожки внутри MP4-файла и их параметры для корректного декодирования.
В файле эти атомы обычно стоят в следующем порядке:
Это обусловлено следующим:
- при транскодировании медиадекодер сразу записывает полезные данные в файл;
- как только весь ролик корректно транскодируется, атом [MDAT] закрывается, а мультиплексор понимает выходные параметры файла (его медиапотоки, их длительность и пр.);
- в конце дописывается атом [MOOV] с указанием структуры и информации о файле.
При такой структуре MP4 есть проблемы с воспроизведением — файл не может проигрываться по HTTP сразу. Объяснение простое: для воспроизведения нужно сначала инициализировать декодеры и только после этого закидывать payload в топку плеера. Но так как все параметры для декодера находятся в атоме [MOOV] (а он, напоминаю, располагается в самом конце файла), то клиенту нужно скачать весь файл, чтобы добраться до заветных настроек. В случае если файл достаточно большой (четырёх-часовая лекция о пользе тепличных огурцов и силе земли), то быстрый старт получить вам вряд ли удастся.
Примечание: в настоящее время некоторые плееры оснащены умным воспроизведением MP4-файлов и могут сами использовать range-запросы для получения атома [MOOV] отдельно (например, Google Chrome так умеет), но уповать на это, естественно, не надо.
Для того чтобы файл сразу был доступен для воспроизведения без полной загрузки, нужно перенести атом [MOOV] ближе к его началу. Хороший MP4-файл, пригодный к неистово быстрому воспроизведению по HTTP, имеет следующую структуру:
Что ж, поехали делать модно и красиво!
Итак, что же надо изменить в текущей схеме, чтобы всё получилось? По большому счёту нужно научиться отдавать контент в двух видах (HLS и MP4), при этом максимально избегая дублирования контента в хранилище и поддерживая функциональность, которая уже есть в видеоплатформе Ozon.
Для этого нужно:
- изменяем специальные настройки для транскодера, который будет генерировать MP4-файлы с атомом [MOOV] в хедере;
- реализовать возможность раздачи таких файлов в виде HLS-адаптива;
- подготовить основные и дополнительные файлы для визуально бесшовного воспроизведения;
- сделать так, чтобы live-трансляции могли быть встроены в видеоленту.
Первое и главное, что нужно реализовать, — это раздача MP4-файлов в адаптивном HLS без дублирования контента. Серебряной пулей для этого будет модуль для Nginx от команды Kaltura. Основная фича этого модуля, нужная нам — это то, что он позволяет из обыкновенных MP4 нарезать на лету адаптив в HLS. Для этого нужно всего ничего:
- развернуть Nginx с этим модулем и настроенным конфиг-файлом для раздачи нарезанного HLS (делаем Docker-контейнер с нужными версиями и конфигурациями, чтобы по нажатию кнопки поднимать N инстансов в модных кубернетесах);
- указать upstream на что-то, откуда будут отдаваться MP4-файлы (это может быть локальное хранилище, но в нашем случае это S3);
- указать место, откуда можно получать конфигурационные JSON-файлы, содержащие ссылки на MP4-файлы для нарезания в HLS (в нашем случае — отдельная ручка микросервиса для отдачи таких конфигурационных файлов по ID контента).
Теперь то, что получилось, нужно аккуратно вклинить в имеющийся флоу раздачи контента. Так как на походы до S3 за MP4-файлами тратится много времени, то наилучшим вариантом будет разместить ноды с nginx-vod-module максимально близко к хранилищу MP4-файлов и к проксирующей ноде. Также было бы неплохо максимально быстро ходить и до ручки микросервиса с конфигурационными файлами для контента. Таким образом, новая схема с nginx-vod-module получилась такая:
Главная задача решена. Теперь нужно подготовить файлы для удобной раздачи в формате MP4, но чтобы при этом иметь возможность раздавать контент через nginx-vod-module . Для этого на транскодере генерируем MP4-файлы, в которых переписываем структуру, перенося атом [MOOV] в начало.
Примечание: nginx-vod-module умеет на лету преобразовывать файлы из обычных не подготовленных для раздачи по HTTP файлов MP4 уже с перенесённым атомом [MOOV]. Но зачем, если можно раздавать уже предподготовленные файлы напрямую из S3?
А что про стримы?
С генерацией VoD-контента вроде как всё хорошо и понятно. Но что делать с live-потоками? Стримы генерируются в адаптивный HLS, который не совсем удовлетворяет нас в задаче наполнения контентом ленты коротких видео. Завернуть их в MP4 нельзя, так как для этого нужен кастомный плеер (чего мы стараемся избежать). Вдобавок MP4 не поддерживает адаптивность, а с учётом качества покрытия и работы беспроводных и мобильных сетей адаптивный битрейт на трансляциях просто необходим. Ну и вдобавок хочется весь контент, поступающий в ленту, свести к одному типу, чтобы облегчить жизнь и разработчикам, и пользователям.
Новая цель — сделать из адаптивного живого HLS-потока простой и легковоспроизводимый MP4-файл.
Так как в случае с таким видеопревью перед нами не стоит задача отдавать наисвежайший контент, мы попробовали сделать фоновый воркер, который будет на стороне транскодера собирать из самых свежих медиасегментов (чанков) простой MP4-файл. Этот воркер перекладывает контент из живого HLS-потока в MP4-контейнер и отдаёт его как VoD-контент со всеми вытекающими плюшками. Убедившись, что такой вариант всех устраивает, нужно было сделать так, чтобы исключить возможность перезаписи файла во время его отдачи с транскодера и без дополнительных вызовов переупаковщиков.
Так как в FFmpeg (да, у нас, как почти у всех, для транскодирования видео используется именно он) есть возможность генерировать один набор полезных данных и укладывать их как душе угодно в рамках одной команды, то флоу внутри FFmpeg был немного допилен для генерации нескольких видов контента. А именно:
- оставили HLS-генерацию как есть (она нас более чем устраивает);
- добавили MP4-мультиплексор для одного из качеств, которое летит в HLS-адаптив, и укладывали его как есть (контент не требует повторного транскодинга);
- также настроили MP4-мультиплексор для сегментирования входящего контента частями, генерируя новый MP4-файл в определённую дельту времени;
- обновлённый файл записывали в отдельный плейлист, по которому можно контролировать последний из сгенерированных файлов, содержащий последнюю часть стрима.
Схема до изменений выглядела следующим образом:
А так она выглядит после:
Таким образом, в рамках одного запуска FFmpeg мы генерируем привычный всем live HLS-адаптив, а рядышком складываем обновляемые сегменты в формате MP4 с возможностью быстрого просмотра по HTTP. Именно последние раздаются на клиент, что решает задачу интеграции стримов в текущую парадигму ленты коротких видео.
А что там по клиентам?
На клиентах для реализации проигрывания коротких видео всё достаточно стандартно:
- на iOS — нативный AVPlayer от Apple;
- на Android — ExoPlayer от Google.
Мы взяли базовые плееры по основным двум причинам:
- Они разработаны самими производителями мобильных платформ. Поэтому меньше вероятность того, что при обновлении ОС плеер упадёт на спину и скажет: «У меня лапки, ошибка “146%_callibration_ololo_dudulka”, и вообще не трогайте меня».
- Скорость разработки. Так как разбираться в том, как работает кастомный плеер на С/С++ с использованием GStreamer под капотом и сооружением HW-ускоренного пайплайна, без лишней необходимости не было ни желания, ни возможности.
Примечание: вставлять код стандартных плееров я, конечно же, не буду, так как его легко найти в интернетах (для особо ленивых: iOS, Android).
Проанализировав макеты и решения других компаний и сопоставив дедлайны на реализацию минимальной, но прилично выглядящей функциональности, мы составили требования к видеоплеерам в ленте. Вот основные:
- Возможность использования аппаратного ускорения.
- Работа более чем одного плеера одновременно.
- Быстрый старт.
Рассмотрим их поближе.
1. Возможность аппаратного ускорения
Так как рендеринг видео — очень энерго- и ресурсозатратная вещь, то этот пункт особенно важен. Если декодировать и рендерить видео на CPU, то это скажется на улетающей в ноль батарее и (особенно на старых устройствах) тормозах при пользовании устройства. Чтобы разгрузить CPU для осуществления более нужных вычислений, необходимо использовать плееры с аппаратным ускорением декодирования.
iOS: AVPlayer автоматически использует аппаратное декодирование для H.264 из коробки.
Android: внутри ExoPlayer также существует поддержка аппаратного декодирования для H.264.
2. Работа более чем одного плеера одновременно
Законом не запрещено нагенерировать сразу кучу плееров и использовать их когда и как вздумается. Но нужно понимать, что ресурс мобильного устройства не бесконечен, и при запуске 100500 плееров одновременно заставить их работать с аппаратным ускорением, увы, не получится. А я напомню: видео весьма затратно декодировать по ресурсам. Поэтому нужно научиться правильно переиспользовать плееры, чтобы не убивать драгоценное время на переинициализацию и прочее.
Видеолента в Ozon Моментах спроектирована так, что одновременно пользователь не может видеть больше чем три плеера:
- предыдущий,
- текущий,
- следующий.
Эти три плеера идут «паровозиком». Как только происходит перелистывание видео вперёд и скрывается последний плеер, он становится вперёд. Таким же образом работает свайп на предыдущий видеоплеер.
Что самое приятное: можно запустить три плеера одновременно с аппаратным ускорением даже на достаточно старом Android-устройстве, что положительно скажется на автономности батареи и работоспособности устройства в целом.
3. Быстрый старт
Медленный старт видео — это комплексная проблема. Замедляет время старта огромное количество факторов:
- криво собранный плеер (плеер инициализируется только при поступлении в него атома с метаинформацией);
- тяжёлый контент (завышенные параметры качества для UGC);
- проблемы сети (потери на мобильной сети + большое RTT = медленный старт).
Примечание: UGC (user generated content) — контент, созданный пользователями, например селфи-танцы с подругой или видео с пёсиком, который смешно чихает.
Так как в этой части статьи мы говорим про клиент, то очевидно, что нужно лезть в плеер.
В первой итерации мы просто поставили плееры как есть, но производительность нас не устроила. Так как сердце видеоленты — плеер, перво-наперво идём смотреть его настройки. Основная жалоба заключалась в том, что видеоплеер очень медленно стартует, что указывало на проблему начальной буферизации.
При изменении настроек буферизации тоже нужно найти золотую середину:
- если сильно раздуть буфер плеера, то можно очень долго не начинать проигрывать контент и время старта просядет;
- если сделать буфер минимальным, то время старта будет крайне мало, но пользователь будет постоянно отправляться в буферизацию (видеть тот самый бесящий кружок лоадера) и качество пользовательского опыта значительно просядет.
Буфер обычно указывается во времени.
iOS: В AVPlayer на устройствах Apple за это отвечает метод preferredForwardBufferDuration класса AVPlayerItem . Параметр задаётся в секундах. Apple в документации пишут, что все за вас сами сделают, если задать параметр 0 (или оставить нетронутым).
let url = URL(string: “https://example/path/to/video/sample.mp4") let asset = AVAsset(url: url) let playerItem = AVPlayerItem(asset: asset) playerItem.preferredForwardBufferDuration = newBufferDurationValue let player = AVPlayer(playerItem: playerItem)
Android: В плеере на устройствах с операционкой от Google за это отвечает метод setBufferDurationsMs класса DefaultLoadControl . Параметр задаётся в миллисекундах. Он обладает параметрами:
- minBufferMs — минимальный буфер (default: 50000);
- maxBufferMs — максимальный буфер (default: 50000);
- bufferForPlaybackMs — буфер для старта плейбэка (default: 2500);
- bufferForPlaybackAfterRebufferMs — буфер для выхода из буферизации (default: 5000).
DefaultLoadControl loadControl = new DefaultLoadControl .Builder() .setBufferDurationsMs(minBufferMs, maxBufferMs, bufferForPlaybackMs, bufferForPlaybackAfterRebufferMs) .createDefaultLoadControl();
Покрутив эти параметры, старт плееров на обеих платформах стал гораздо бодрее, но этого всё ещё было недостаточно, так как при быстром пролистывании видеотайтлов были заметны тормоза и лаги. Полезли, как говорится, глубже…
Чтобы отсутствие видеопотока при быстром пролистывании не бросалось в глаза, мы делаем следующее:
- на стороне бэкенда забираем из видеоролика первый фрейм, упаковываем его в JPEG и отправляем в хранилище (это достаточно быстрая операция, учитывая, что первый фрейм находится в самом начале и весь файл декодировать не нужно);
- на стороне микросервиса, который занимается выдачей списка видео для мобильных клиентов, появляется дополнительное поле, в котором указана ссылка до этого JPEG-файла;
- клиент при запросе выдачи ленты получает список видео с этими ссылками и заранее скачивает их, сохраняя у себя локально (они весят всего ничего, поэтому скачивание происходит достаточно быстро);
- та часть экрана, в которой находится видеоплеер, перекрывается картинкой с первым кадром и уже готова для отображения контента пользователю, даже если видео вообще ещё даже не начинало скачиваться. По готовности плеера (он инициализирован и набрал буфер) картинка скрывается — и видео начинает проигрываться.
Это дало более приятный и бесшовный переход между элементами в ленте видео, но и этого оказалось недостаточно. Мы заметили неприятный эффект: даже при наличии первого кадра заглушкой контент мог долго лететь до клиента, что создавало «неловкие мгновения ожидания» проигрывания видео.
Для решения этой проблемы решили сделать prefetch-схему для заблаговременной загрузки контента. Идея проста: в момент загрузки N-ного ролика в фоне идёт загрузка N+1,2,3… — причём только первых нескольких секунд, а не видео целиком. Когда приходит очередь проигрывать следующий ролик, мы смотрим его сразу же, так как начало ролика уже загружено, а оставшийся контент докачивается по необходимости. Такой подход решил проблему ступора при проигрывании следующего видео в тех случаях, когда клиент не успел загрузить видео.
Как оно вышло в итоге
В итоге мы получили ленту коротких видео, состоящих из разнообразного контента: видеообзоров, развлекательных видео и live-трансляций. Местами — вполне себе залипательно.
Естественно, есть ещё вещи, которые нужно допиливать и тюнить, но это уже совсем другая история.
Исправить ошибку видео «Moov Atom Not Found»
Вы получаете сообщение об ошибке «Moov Atom Not Found»?
Не удается воспроизвести видео на проигрывателе VLC Media? Знаете ли вы, как исправить ошибку видео «Moov Atom Not Found» ? Многим пользователям, использующим свой телефон Android для записи и создания видео, трудно воспроизводить одно и то же видео при передаче его на свой компьютер. Когда они пытаются воспроизвести видео на своем проигрывателе VLC, они могут столкнуться с ошибкой «Moov Atom Not Found». В конце концов эта ошибка прерывает воспроизведение видео, а в некоторых случаях даже видео не может быть доступно вообще.
Фактически атом Moov содержит информацию метаданных, относящуюся к шкале времени, продолжительности, субатомам воспроизводимой видеодорожки. Когда видео воспроизводится на проигрывателе по умолчанию или VLC, эти метаданные не извлекаются проигрывателем, и, следовательно, пользователям приходится сталкиваться с сообщением об ошибке, которое читается как «Ошибка Moov Atom Not Found» из-за отсутствия метаданных видеофайлов. Так что это признак того, что метаданные повреждены, отсутствуют или не были правильно загружены во время совместного использования, передачи файлов, записи или копирования.
Как исправить ошибку «Moov Atom Not Found»
Если вы, к сожалению, получаете именно эту ошибку, рекомендуется
- попробуйте еще раз загрузить видео из исходного источника, такого как Интернет, DVD, Android или любые другие устройства. Также убедитесь, что нет прерывания при передаче / загрузке видеофайла.
- Если вы все еще сталкиваетесь с ошибкой «Moov Atom Not Found», вы также можете попытаться исправить эту ошибку с помощью платформы Ffmpeg. Вам необходимо использовать команду «faststart» в окне CMD на ПК. Это поможет в перемещении или смещении фактического положения атома moov с начала видео. Попробуйте открыть и просмотреть видео, чтобы проверить, исправлена ли ошибка или нет.
- Вы можете использовать стороннее программное обеспечение для восстановления видео, чтобы исправить ошибку «Moov Atom Not Found». Это профессиональный инструмент для восстановления видео, способный исправить и восстановить обрезанные, поврежденные видеофайлы, приводящие к такой ошибке.
Краткий обзор на Video ‘Moov Atom Not Found’ Error
Глядя на решения из Video ‘Moov Atom Not Found’ Error? Это один из основных вопросов, которые почти каждый пользователи могли бы встретить в любом случае их жизни. Цифровые фото и видео можно получить случайно удаленные или может получить поврежден из-за какой-либо конкретной ошибки. В такой ситуации, ранее сохраненные файлы не могут быть доступны в дальнейшем. На данном этапе возникает необходимость фото восстановления программного обеспечения. Это один из самых опытных утилита, которая была разработана для достижения Video ‘Moov Atom Not Found’ Error выпуск удобно. Это лучший инструмент для восстановления поврежденных, удаленных без вести, отформатированных и недоступных изображения и видео с цифровой камеры или любые другие устройства хранения. Это был предназначен исключительно профессионалами, чтобы спасти фотографии, а также видео и преодолеть проблемы коррупции карта памяти независимо от его причины.
Video ‘Moov Atom Not Found’ Error: почему фото становится недоступный
Фотографии становятся недоступными и пользователь может потерять свои ценные картины из запоминающего устройства, по следующим причинам: –
- Когда сохраненные изображения удаляются случайно то Video ‘Moov Atom Not Found’ Error может столкнуться.
- Если вы отформатировали диск.
- В связи с тяжелой вируса атаки.
- Неправильная обработка из Устройство.
- из-за файловой системы коррупция.
- из-за физически поврежденные медиа.
- Файл с коррупцией Заголовок.
Помимо упомянутых выше причин, не может быть также некоторые другие возможности, благодаря которым, необходимые для Video ‘Moov Atom Not Found’ Error решения возникает для пользователей. К сожалению, если вы столкнулись с потерей фотографий по любой из вышеупомянутых причин и не иметь действительный резервного копирования, то лучше сделать выбор в пользу фото восстановление Программное обеспечение к решать Video ‘Moov Atom Not Found’ Error выпуск в то же время.
Избежание типичных ошибок, чтобы предотвратить Video ‘Moov Atom Not Found’ Error вопросов для будущего
Один глупые ошибки или небольшое беспечность достаточно, чтобы стереть все памятные и захватывающие моменты своего прошлого. Недаром сказано, “Профилактика всегда лучше лечения”. В то время как большинство проблем, связанных с Video ‘Moov Atom Not Found’ Error есть решение, но было бы лучше, чтобы не противостоять ему, принимая некоторые меры. Таким образом, пользователям рекомендуется позаботиться о следующих пунктах, указанных ниже, если они не хотят быть в ужасном положении Video ‘Moov Atom Not Found’ Error, который может быть довольно грязным время от времени.
- Никогда не вынимайте карту памяти, когда она находится в использовании.
- Всегда безопасно извлечь карту памяти перед ее извлечением из гнезда.
- Не нажимайте фотографии и записывать видео, когда батарея разряжена, чтобы избежать Video ‘Moov Atom Not Found’ Error.
- Всегда будьте осторожны при удалив ненужные файлы
- избегать использования “Удалить все” кнопки из цифровой камеры
- Не плохо обращаться цифровой камеры или карты памяти.
Примечание: Не используйте карты памяти, если вы удалили все фотографии и видеосюжеты с это. Это не позволит возможности перезаписи и замены данных на карте памяти. После перезаписи, вариант для спасательных данных в случае Video ‘Moov Atom Not Found’ Error будет почти невозможно.
Лучшее решение для Video ‘Moov Atom Not Found’ Error
фото восстановление Программное обеспечение является одним из надежных и продвинутый инструмент, который обладает способностью, чтобы спасти потерянные или удаленные фотографии. Она была разработана на работающих специалистов, которые имеют большой опыт в этой области. Программное обеспечение имеет сильную технику сканирования и все новейшие функции, которые могут легко разрешить Video ‘Moov Atom Not Found’ Error и восстановления фотографий и видео. Она сканирует устройство хранения глубоко и обнаружить все недостающие файлы. После этого он предоставляет возможность увидеть превью извлекаемых элементов и восстановить их куда вы хотите для быстрого доступа. Сегодня она имеет множество довольных пользователей во всем мире, которые пытались его для того, чтобы исправить Video ‘Moov Atom Not Found’ Error выпуск. Мало того, что у него есть также некоторые удивительные особенности, что делает его популярным в сегменте из фото восстановления. Однако можно сказать, что это единственный безопасный способ, которые обеспечивают полное и мгновенное решение для Video ‘Moov Atom Not Found’ Error в очень меньше времени, не теряя ни одной фотографии во время восстановления. Поэтому можно рассчитывать на программное обеспечение, чтобы получить удовлетворение и впечатляющие результаты.
Преимущества использования фото восстановление Программное обеспечение для Video ‘Moov Atom Not Found’ Error
- это способен решать Video ‘Moov Atom Not Found’ Error и восстановить потерянные, удаленные и поврежденные фотографии, видео с карты памяти.
- Имеет потенциал, чтобы восстановить даже сильно поврежденные файлы, а также отформатированную карту памяти.
- Совместим с ОС Windows и Mac OS.
- Легко восстановить JPEG, PNG, TIFF, MOS, PSP, РСТ, JPG, GIF, BMP и т.д. файлы и исправить Video ‘Moov Atom Not Found’ Error.
- Также восстановить удаленные или поврежденные аудио, видео и другие мультимедийные файлы в удобном виде.
- Обеспечить механизм, чтобы добавить заголовки файлов в списке фото, аудио, видео товары по Просто перетащите метод.
- Генерация превью восстанавливаемых файлов перед его сохранением.
- Удобный графический интерфейс для удобной навигации.
- Наличие различных опций сканирования, как, Advance, быстрый, Полная проверка.
- Совместимость со всеми Mac OS X, а также Windows операционная система.
- Поддерживает различные Mac или Windows, версии, как Mac OS X Tiger, Lion Leopard, Panther и Windows Vista, 7, 8 и т.д. соответственно.
- Поддержка различных файловой системы, такие как HFSX, HFS, HFS +, NTFS, FAT и т.д.
- Возможность восстановить изображения с карты памяти, чтобы преодолеть Video ‘Moov Atom Not Found’ Error на устройствах хранения, таких как микро-SD, CF, XD карты, SDHC и т.д.
- Поддерживает все цифровые камеры, мобильные телефоны, планшеты и т.д.
- Восстановление фотографий с системного жесткого диска, опустели корзины или перестанет загружаться объема.
- Обеспечить полное решение для Video ‘Moov Atom Not Found’ Error, даже не имея технических навыков.
- Доступен как бесплатную пробную версию и лицензионной версии.
Эти несколько характерные особенности фото восстановление Программное обеспечение лучших в этом классе. Если вы хотите, чтобы преодолеть Video ‘Moov Atom Not Found’ Error вопрос, то без каких-либо задержек попробовать этот удивительный инструмент и получить желаемый результат.
Ограничения реализации фото восстановление Программное обеспечение преодолеть Video ‘Moov Atom Not Found’ Error выпуск
Хотя программное обеспечение фото восстановление Программное обеспечение одним из безопасный способ, чтобы удовлетворить потребность в Video ‘Moov Atom Not Found’ Error раствора в очень меньше времени. Тем не менее, пользователи должны знать о своих ограничений, которые рассматриваются ниже: –
- Демо-версия предоставляет с превью удаленных и поврежденных фотографий и видео.
- Пользователи должны воспользоваться лицензионной версии для того, чтобы восстановить удаленные или потерянные фотографии и преодолеть Video ‘Moov Atom Not Found’ Error.
Системные требования для фото восстановление Программное обеспечение
Для Windows
- Процессор: – Pentium класса.
- Операционная система: – Windows Vista, Windows7, 8 и т.д.
- Память: – Оперативная память 1 ГБ.
- Жесткий диск: – 100 Мб свободного места на.
Для Mac
- Процессор: – Intel (G5 или его более поздняя версия)
- Память: – Оперативная память должна быть не менее 1 Гб.
- Жесткий диск: – Свободное место должно быть 100 Мб.
- Операционная система: – 10. 4 Tiger, 10.5 Leopard, 10.6 Snow Leopard, 10.7 Lion, 10.8 Mountain Lion, 10.9 Маверицкс или любой другой последнее Mac OS X.
Руководство пользователя к решить Video ‘Moov Atom Not Found’ Error: Следуйте Пошаговый мастер для запуска программного обеспечения
Шаг: 1 Загрузите и установите фото восстановление Программное обеспечение для достижения Video ‘Moov Atom Not Found’ Error вопрос
Шаг: 2 После установки, запустите программу, дважды щелкнув по иконке настоящее время на рабочем столе.
Шаг: 3 Подключите устройство хранения, которые должны быть отсканированы с ПК.
Шаг: 4 После подключения, программа автоматически определит устройство хранения, которое было подключено.
Шаг: 5 Нажмите на кнопку Scan, чтобы начать процесс сканирования. Не забудьте выбрать точный тип файла из списка для быстрого поиска.
Шаг: 6 После того, как проверка завершится, вы получите предварительный просмотр файлов, который был удален, поврежден. Выберите файл для восстановлены и сохранены на нужное место на компьютере. Тем не менее, вы должны иметь лицензионную версию программного обеспечения для реализации Video ‘Moov Atom Not Found’ Error задачу.
Шаг 7: Наконец, появится индикатор хода выполнения, который показывает продолжающийся процесс хранения фотографий и видео в нужное место, чтобы преодолеть Video ‘Moov Atom Not Found’ Error проблеме