Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > MPEG 4 Библиотека


Автор: JekaZZ 11.3.2009, 15:09
Подскажите библиотеку C/C++ для работы с MP4 файлами. 

Мне нужно в программе из существующего MP4 (h264, AAC) файла вырезать часть его и передать плееру (xine лии mplayer). 
Как я понимаю, нужно взять заголовок и склеить его с той частью видео данных, что мне надо, причем вырезаемый кусок должен начинаться с keyframe-а. И еще дано смещение в секундах от начала файла, нужно определить смещение в байтах, откуда брать кусок.


Автор: nerezus 11.3.2009, 22:06
JekaZZ, а почему просто не откроешь mplayer'ом нужную часть? он это умеет.

Автор: JekaZZ 11.3.2009, 22:25
Потому что файла нет целиком. Файл закачивается из сети и одновременно воспроизводится. Причем, воспроизводится не сначала, а с определенной позиции. Поэтому нужно начинать качать файл сразу с нужной позиции.

Автор: JekaZZ 12.3.2009, 13:48
Нашел в инете похожий случай. Там предлагают использовать mencoder для того, чтобы дампить удаленный файл и одновременно воспроизводить дамп mplayer-ом. Я попробовал:
Код

#mencoder <url>/<filename>.mp4 -oac copy -ovc copy -ss 100 -o dump

Здесь mencoder тянет файл из сети с позиции 100 секунд и дампит его в локальный файл dump без перекодирования audio и video. Но такая команда создает avi файл, он не перематывается и не переключаются audio дорожки, а нужен MP4 или OGM с двумя дорожками. 
Хорошо бы было использовать
Код

#mplayer <url>/<filename>.mp4 -dumpstream -dumpfile dump -ss 100

Но опции -ss и -dumpstream несовместимы.

Вы спросите: почему  я не использую ссылку напрямую в mplayer?:
Код

#mplayer <url>/<filename>.mp4 -ss 100


Потому что mplayer в таком случает тормозит, хотя мощности компа и канала сети предостаточно. А про перемотку я вообще молчу. Поэтому выбран такой варинат - файл сначала дампится на диск, а из дампа воспроизводится, и хорошо перематывается. Но дамппиться он должен не с начала, а с заданной позиции в секундах. 
Сейчас в моей программе это реализованно так - программа сама качает файл: сначала заголовок, который парсит и по параметрам находит смещение в байтах, откуда начинается заданная в секундах позиция, потом качается с этого смещения и склеивается с заголовком. Mplayer воспризводит получившийся файл. Но там используется формат RealVideo. 
Нужно же перейти на MPEG-4. Есть какие-нибудь соображения?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)