То, что я хочу, это
1. Get video packet from stream source
2. Decode it
3. And write that decoded data as video file(avi, mpeg etc)
Я могу получать пакеты видео из файла (как AVPacket), а также декодировать и сохранять как изображение. (Raw) (учебники FFmpeg показывают, как это сделать).Это). Но я не могу (не знаю) записать эти видеоданные в файл (другой), который может воспроизводиться медиаплеерами (такими как VLC).
С наилучшими пожеланиями
Ps: реальные примеры кода будут хороши, если это возможно ...
Теперь я делаю тест с av_interleaved_write , но я получил странную ошибку "немонотонные временные метки" (у меня нет контроля над pts-значениями медиа источника)
Некоторая дополнительная информация
В FFmpeg мне нужно
- Чтение медиа-пакетов изисточник мультимедиа (это может быть реальный файл (.avi, mov) или даже сервер rtsp).
- Затем запишите эти пакеты мультимедиа в реальный файл (физический файл .avi, .mov и т. д.)
Мне нужен читатель и писатель.Я могу прочитать исходный файл мультимедиа (даже кодировать пакеты в соответствии с заданным форматом).Но я не могу записать в файл ... (который может проигрывать любой плеер)
И какой-нибудь псевдокод
File myFile("MyTestFile.avi");
while ( source ->hasVideoPackets)
{
packet = source->GetNextVideoPacket();
Frame decodedFrame = Decode(packet);
VideoPacket encodedPacket = Encode( decodedFrame);
myFile.WriteFile(encodedPacket);
}
Или просто записать оригинальный файл без кодирования, декодировать
File myFile("MyTestFile.avi");
while ( source ->hasVideoPackets)
{
packet = source->GetNextVideoPacket();
myFile.WriteFile(packet);
}
Тогда
I can able to open MyTest.avi file with a player.