Как сбрасывать поток RTSP в файл?
Можно ли выгрузить необработанный поток RTSP в файл, а затем позже декодировать файл на что-нибудь воспроизводимое?
В настоящее время я использую FFmpeg для приема и декодирования потока, сохраняя его в файле mp4. Это отлично работает, но интенсивно работает в ЦП и сильно ограничивает количество потоков RTSP, которые я могу получать одновременно на моем сервере.
Я хотел бы сохранить поток в файл без его декодирования и задержать часть декодирования, когда файл нужно открыть.
Возможно ли это?
Я пробовал VLC, который даже больше интенсивнее процессора, чем FFmpeg. Я также рассмотрел этот вопрос, где ответ говорит, что загрузка RTSP в файл не полезна, и этот вопрос, где в комментарии ниже вопроса говорится, что "Raw RTSP-контент не очень подходит для сохранения и воспроизведения...", что, как представляется, указывает на то, что есть способ.
Спасибо заранее!
ИЗМЕНИТЬ
Вот команда, которую я использую для FFmpeg:
ffmpeg -i rtsp://@192.168.241.1:62159 -r 15 C:/DB_Videos/2013-04-30 17_18_34.703.mp4
Ответы
Ответ 1
Если вы перекодируете в свою командную строку ffmpeg, это может быть причиной того, что это интенсивность процессора. Вам нужно просто скопировать потоки в один контейнер. Поскольку у меня нет вашей командной строки, я не могу предложить здесь конкретного улучшения. Ваши acodec и vcodec должны быть скопированы, это все, что я могу сказать.
РЕДАКТИРОВАТЬ: При просмотре вашей командной строки и при условии, что вы уже пробовали это, это полезно для других, которые сталкиваются с одним и тем же вопросом. Команда:
ffmpeg -i rtsp://@192.168.241.1:62156 -acodec copy -vcodec copy c:/abc.mp4
не будет транскодировать и выгрузить файл для вас в mp4. Конечно, предполагается, что потоковое содержимое совместимо с mp4 (что, по всей вероятности, есть).
Ответ 2
С помощью этой команды у меня было плохое качество изображения
ffmpeg -i rtsp://192.168.XXX.XXX:554/live.sdp -vcodec copy -acodec copy -f mp4 -y MyVideoFFmpeg.mp4
С этим, почти без задержки, я получил хорошее качество изображения.
ffmpeg -i rtsp://192.168.XXX.XXX:554/live.sdp -b 900k -vcodec copy -r 60 -y MyVdeoFFmpeg.avi
Ответ 3
Вы можете использовать mplayer.
mencoder -nocache -rtsp-stream-over-tcp rtsp://192.168.XXX.XXX/test.sdp -oac copy -ovc copy -o test.avi
Копик "копия" - это просто тупая копия потока. Mencoder добавляет заголовок и прочее, которое вы, вероятно, захотите.
В исходном файле mplayer "stream/stream_rtsp.c" задано значение prebuffer_size, равное 640k, и никакой опции для изменения другого размера, а затем перекомпиляции. В результате запись потока всегда задерживается, что может раздражать такие вещи, как камеры, но помимо этого вы получаете выходной файл и можете воспроизводить его в большинстве мест без проблем.