Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Программно конвертнуть MP4 в FLV
Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011
Помог: 7 раз(а)
Задача написать конвертер из MP4 в FLV. Собственно, нашел подробное описание FLV, а MP4 не могу найти (уже день ковыряюсь). Кто-нибудь что-нибудь знает абетам? Может сталкивался с разборкой MP4?
Сразу скажу, что в итоге надо для флэшки, т.к. она умеет закидывать в поток побайтно тока FLV. А надо закинуть MP4 и именно этим способом, поэтому просто переконвертировать файл не пойдет. Просто переконвертировать - это простая задача.
LIME
Отправлено: 23 Июня, 2014 - 18:14:47
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
ffmpeg смотрел?
MAXUS
Отправлено: 23 Июня, 2014 - 19:57:35
Посетитель
Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011
Помог: 7 раз(а)
LIME пишет:
ffmpeg смотрел?
Смотрел, в принципе. Неделю экспериментировал. Конвертить он конвертит. В принципе и поток создать, насколько я понял, может. Но мне всего лишь контейнер поменять надо. Тупо подставить оболочку другую, но налету.
LIME
Отправлено: 23 Июня, 2014 - 21:34:39
Активный участник
Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010
Помог: 322 раз(а)
под контейнером mp4 насколько знаю скрывается целая батарея форматов
ты уверен что знаешь о чем говоришь?
я нет(про себя)
MAXUS
Отправлено: 23 Июня, 2014 - 21:38:58
Посетитель
Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011
Помог: 7 раз(а)
LIME пишет:
под контейнером mp4 насколько знаю скрывается целая батарея форматов
ты уверен что знаешь о чем говоришь?
я нет(про себя)
Да, как раз нужен контейнер. Flash поддерживает FLV и MP4 контейнеры с кодеком H.264, но читать побайтово в поток позволяет только из FLV контейнера. Вернее понимает только, когда в поток передаются данные в этом формате.
caballero
Отправлено: 23 Июня, 2014 - 22:17:39
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
так при конвертации ffmpeg и указывается какой будет контейнер какой видео формат какой аудио формат и т.д
Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011
Помог: 7 раз(а)
Viper пишет:
читать поток из контейнера в поток?! Это вообще как?
У флэшки есть плеер, которому можно закинуть урл и он сам разберется, что с ним делать. Воспринимает FLV, F4V и MP4 (это все контейнеры). Но при таком подходе поиск (т.е. переход на определенную точку видео) возможен только после того момента, как загрузка дойдет до требуемого кадра. Т.е. для воспроизведения какого-либо фрагмента в конце файла нужно дождаться практически полной загрузки видео в кэш. Это особенности progressive download.
Но есть способ интереснее. Есть два класса. Один умеет открывать урл как поток и читать его. Второй умеет получать байты и передавать их в плеер (по сути еще один поток). Т.е. берем первый класс, тащим в него урл и полученные байты транслируем во входящий поток плеера. При помощи некоторых манипуляций с бубном можно заставить плеер переходить на любой кадр без предварительной загрузки всего файла, т.е. очень быстро. Но беда в том, что класс, который организует передачу входящего потока в плеер, воспринимает информацию адекватно только если файл упакован в FLV контейнер. Вот такой казус. Просто так MP4 играет, а через поток бреет.
Идея в том, чтобы читать MP4 потоком, подсовывать во входящий поток плеера обертку от FLV, а потом передавать уже сами кадры из MP4, т.к. по сути внутри контейнера разницы уже нет, потому что кодек один и тот же. По идее должно работать, но не хватает знаний об организации MP4. И ищется с трудом.
А конвертировать в FLV - это не вариант, т.к. FLV формат не универсальный и, например, HTML5 плеер его не понимает. Т.е. в основном на видеохостингах используют MP4 H.264 или WEBM H.264.
ЗЫ Кстати HTML5 плеер умеет переходить на любую точку видео без предзагрузки файла по умолчанию. Это вообще нехитрая операция. Просто seek(time) и все. И почему Adobe так не сделал до сих пор для меня загадка.
ЗЫЫ Еще кстати... Такой прогноз... Если adobe сделают в плеере поддержку WEBM, то MP4 контейнер, возможно, достаточно быстро умрет, т.к. WEBM заголовки короче и читаются гораздо быстрее. Например, youtube уже по возможности отдает WEBM, а Opera HTML5 вообще не поддерживает MP4...
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
класс, который организует передачу входящего потока в плеер, воспринимает информацию адекватно только если файл упакован в FLV контейнер. Вот такой казус.
это не казус - FLV адобовский формат именно для флеша потому оно и умеет с ним работать
Цитата:
А конвертировать в FLV - это не вариант, т.к. FLV формат не универсальный и, например, HTML5 плеер его не понимает.
ни один формат не универсальный потому как о стандартах производители браузеров так и не договорились.
посему чтобы везде играло кладут файл в нескольких форматах FLV, MP4,AVI ,WEBM и т.д.
а в плеере уже указывают нужный (или список как в HTML5) а он подхватывает тот который понимает.
естественно в зависимости от типа браузера или платформы (IPhone например)
нужно подставить нужный параметр или тег
сам так делал когда-то - чтобы играло в HTML5, IE8 и IPAD конвертил видео после аплоада в 4 формата с помощью ffmpeg
Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011
Помог: 7 раз(а)
caballero пишет:
это не казус - FLV адобовский формат именно для флеша потому оно и умеет с ним работать
Это понятно. Не понятно, почему в этом режиме не сделать еще и поддержку MP4? Сначала было не понятно. Потом пришел к выводу, что они не предполагали, что таким образом будут проигрывать видео, а просто сделали, чтобы на этот режим можно было замкнуть камеру (а в этом случае по большому счету одного любого формата достаточно).
caballero пишет:
посему чтобы везде играло кладут файл в нескольких форматах FLV, MP4,AVI ,WEBM и т.д.
Теоретически MP4 должен запускаться везде либо через HTML5, либо через flash. Т.е. один из этих вариантов как правило проканывает. А держать дубли не каждый может себе позволить. В моем случае один ролик в среднем 600 мегабайт. На 4 формата - это 2,4 гига. Место в 4 раза быстрее кончится, поэтому этот вариант не рассматривается (Добавление)
Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011
Помог: 7 раз(а)
Viper пишет:
MAXUS пишет:
ЗЫ Кстати HTML5 плеер умеет переходить на любую точку видео без предзагрузки файла по умолчанию
с чего вы это взяли?
С того, что умеет. Если moov атом расположен в начале файла и вся информация о ключевых кадрах, соответственно, доступна при его загрузке, то переходить можно сразу на любую точку видео. Буферизация бьется на ranges, а потом по мере загрузки объединяется в один range.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.