Сохранить прямой поток видео в локальном хранилище - PullRequest
0 голосов
/ 03 июня 2011

Проблема:

I have to save live video streams data which come as an RTP packets from RTSP Server.
The data come in two formats : MPEG4 and h264. 
I do not want to encode/decode input stream.
Just write to a file which is playable with proper codecs. 

Любой совет?

С наилучшими пожеланиями

История

Мои решения и их проблемы:

Попытка Firt: FFmpeg

I use FFmpeg libary to get audio and video rtp packets. 
But in order to write packets i have to use av_write_frame : 
which seems that decode /encode takes place.
Also, when i give output format as mp4 ( av_guess_format("mp4", NULL, NULL)
the output file is unplayable. 
[ any way ffmpeg has bad doc. hard to find what is wrong]

Вторая попытка : DirectShow

Then i decide to use DirectShow. I found a RTSP Source Filter. 
Then a Mux and File Writer.
Cretae Single graph:

RTSP Source --> MPEG MUX ---> File Writer

It worked but the problem is that  the output file is not playable
if graph is not stoped. If something happens, graph crashed for example
the output file is not playable
Also i can able to write H264 data, but the video is completely unplayable.

1 Ответ

2 голосов
/ 03 июня 2011

Формат файла MP4 имеет индекс, необходимый для правильного воспроизведения, и этот индекс можно создать только после завершения записи. Таким образом, любое решение с использованием контейнерных файлов MP4 (и других проиндексированных файлов) будет страдать от той же проблемы. Вам необходимо остановить запись, чтобы завершить файл, иначе он не будет воспроизводиться.

Одним из решений, которое может помочь, является разбиение графика на две части, чтобы вы могли продолжать запись в новый файл, одновременно останавливая текущий. Вот пример этого на www.gdcl.co.uk/gmfbridge.

Если вы используете мультиплексор GDCL MP4 и у вас возникают проблемы с потоками H264, см. Соответствующий вопрос Проблема мультиплексора GDCL Mpeg-4

...