Подтвердить что ты не робот

Захват потока rtsp

Я ищу универсальный способ сброса потока rtsp. Я хочу понять, что некоторый поток rtsp хорошо работает, и сервер отправляет некоторое видео с возможностью просмотра.

openRTSP

Сначала google рекомендует мне инструмент openRTSP.

 openRTSP -4 ${stream_link} > ${output_file}

Но выходной видеофайл, сбрасываемый этим инструментом, не совсем прав. Видеодекодер (ffdec) возвращает много ошибок, таких как "Не удалось декодировать видеопакет" и "[h264] без рамки!", Что меня не устраивает.

FFmpeg

Затем я попытался сбросить поток rtsp с помощью инструмента ffmpeg.

ffmpeg -loglevel debug -i "${stream_link}" -s 640x480 -vcodec copy -acodec copy -y ${output_file}

Но процесс потоковой передачи часто прерывался ошибкой:

Application provided invalid, non monotonically increasing dts to muxer in stream 0: 730672 >= 730672
av_interleaved_write_frame(): Invalid argument

Я пытаюсь использовать --fflags igndts, но ffmpeg не игнорирует эти ошибки. Это не имеет никакого смысла, поскольку эта ошибка на самом деле означает, что аудио- и видеопотоки отправляются асинхронно. Хуже всего то, что сбрасываемый файл, вызванный этим прерывистым дампом, тоже неверен. Ffdec возвращает некоторую ошибку:

ERROR [mov,mp4,m4a,3gp,3g2,mj2] moov atom not found
ERROR [ffdec] av_open_input_file: Operation not permitted

После приятной чашки googling я обнаружил, что это действительно старая ошибка ffmpeg muxer.

MPlayer

Чем я пытался использовать mplayer с LIVE_555 lib.

mplayer -noframedrop -dumpfile ${output_file} -dumpstream ${stream_link}

Но у меня тоже есть ошибки.

Stream not seekable!
Core dumped ;)

Вопрос

Я думаю, что я делаю что-то неправильно. Это звучит очень смешно, что нет никакого способа сохранить поток rtsp в правильном и воспроизводимом видео файле.

Возможно, есть еще один инструмент, который может помочь с этой задачей? На самом деле, я буду благодарен за любые советы для всех типов библиотек и языков. Но этот процесс должен быть автоматическим и иметь cli.

Уточнения

Что-то около 50% экспериментов, которые я сделал на localhost с vlc-streamer, который эмулирует rtsp-broadcastcaster. Вот руководство, которое я пытаюсь выполнить.

У меня действительно свежий и последний ffmpeg с поддержкой x264, который я установил который полезный поток.

4b9b3361

Ответ 1

Вы пытались vlc сохранить поток rtsp? Это сработало для меня. Я пытался использовать графический интерфейс. Но он также должен работать из командной строки.

Ответ 2

Дмитрий, вы должны попробовать ErlyVideo server. Он может захватывать RTSP-трафик и хранить его в мультимедийных файлах, которые можно воспроизводить с помощью медиапланеров.

Ответ 3

ffmpeg + wallclock_as_timestamps works

ffmpeg - это самый простой способ достижения вашей цели, но вот несколько важных замечаний:

Сначала я советую вам получить последнюю версию (2.4.x вместо 1.2.x, поставляемую с Ubuntu). Вы можете получить его из https://www.ffmpeg.org/download.html

Вы все равно получите

Application provided invalid, non monotonically increasing dts to muxer in stream 0: 730672 >= 730672
av_interleaved_write_frame(): Invalid argument error

но вы можете избавиться от него. Это происходит главным образом потому, что FPS (Frames Per Second) постоянно меняются на IP-камерах в зависимости от качества соединения. Вот два решения, которые работали для меня:

Решение 1= используйте параметр use_wallclock_as_timestamps, чтобы ваша команда выглядела как

ffmpeg -use_wallclock_as_timestamps 1 -i rtsp://myip:554/mpeg4 -c copy myrecord.avi

PROS = низкое использование ЦП + записи хорошего качества, потому что ничего не транскодировано /CONS = немного большие файлы (~ 6 Мбит/мин)

Solution2= удаление в командной строке опций "-acodec copy -vcodec copy". Простая команда

ffmpeg -i rtsp://myip:554/mpeg4 myrecord.avi

сделает трюк. PROS = маленькие файлы (~ 1.2Mb/minute)/CONS = высокая загрузка процессора (6% на моем компьютере), потому что я думаю, что это перекодировка по умолчанию кодекам + записи плохого качества

Надеюсь, что это поможет!

Ответ 4

Сброс потока (ов) с любого видео Youtube на локальное устройство с использованием OPENRTSP

В качестве примера я буду использовать канал rtsp, доступный для любого видео с youtube.

Шаги:

  • Использование игровой площадки Oauth 2.0 для непосредственного взаимодействия с youtube api -gets в каналах
  • Получить идентификатор видео Youtube, используя его в запросе на подачу gdata (v = cpST8yz4w1w)
  • Разбор вывода для URL-адреса rtsp, который вы хотите - формат 1 - низкая пропускная способность, формат 6 = HIGH
  • CLI - используйте openrtsp для запроса
  • скачать openrtsp выводит отдельный файл для каждой дорожки
  • ofile1 = "video-H263-2000-1"
  • ofile2 = "аудио-ШП-2"

Сведения о ручном процессе для сброса потока:

Oauth 2 игровая площадка - хороший инструмент https://code.google.com/oauthplayground/

поля открытого текста spec = media: group/media: content [@yt: format = "1" ]

Ответ - поток json. Скопируйте это из формы oauth и вставьте его в: http://json.parser.online.fr/, и у вас будет что-то вроде:

"entry":{
"xmlns":"http://www.w3.org/2005/Atom",
"xmlns$media":"http://search.yahoo.com/mrss/",
"xmlns$yt":"http://gdata.youtube.com/schemas/2007",
"media$group":{
"media$content":[
{
"url":"rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp",
"type":"video/3gpp",
"medium":"video",
"expression":"full",
"duration":64,
"yt$format":1
}
]

Возьмите атрибут url RTSP из этого и вызовите openrtsp для создания дампа файла. Вы должны будете ПОДТВЕРЖДИТЬ, потому что openrtsp будет передавать медиа (не загружать). Если вы попросите сбросить 10 минут .mp4, вам придется подождать 10 минут.

ПРИМЕЧАНИЕ. SDP за rtsp URI поддерживает отдельные источники для каждой дорожки. Таким образом, наряду с дампом вы получаете отдельные файлы для каждого трека в исходном медиа файле.

$ ./openRTSP rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp

Dumpfile, выходы будут:

  • Созданный выходной файл: "video-H263-2000-1"
  • Созданный выходной файл: "audio-AMR-2"

Подробности Stdout включают полный протокол сеанса RTSP:

$ ./openRTSP rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp
Opening connection to 74.125.213.247, port 554...
...remote connection opened
Sending request: OPTIONS rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp RTSP/1.0
CSeq: 2
User-Agent: ./openRTSP (LIVE555 Streaming Media v2011.07.08)


Received 140 new bytes of response data.
Received a complete OPTIONS response:
RTSP/1.0 200 OK
Public: DESCRIBE, GET_PARAMETER, OPTIONS, PAUSE, PLAY, SETUP, SET_PARAMETER, TEARDOWN
CSeq: 2
Server: Google RTSP 1.0


Sending request: DESCRIBE rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp RTSP/1.0
CSeq: 3
User-Agent: ./openRTSP (LIVE555 Streaming Media v2011.07.08)
Accept: application/sdp


Received 776 new bytes of response data.
Received a complete DESCRIBE response:
RTSP/1.0 200 OK
Content-Type: application/sdp
Cache-Control: must-revalidate
Date: Fri, 30 Mar 2012 15:27:43 GMT
Expires: Fri, 30 Mar 2012 15:27:43 GMT
Last-Modified: Fri, 30 Mar 2012 15:27:43 GMT
Content-Base: rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp/
CSeq: 3
Server: Google RTSP 1.0
Content-Length: 404

v=0
o=GoogleStreamer 943086435 202448811 IN IP4 74.125.213.247
s=Video
c=IN IP4 0.0.0.0
b=AS:51
t=0 0
a=control:*
a=range:npt=0-63.800000
m=video 0 RTP/AVP 98
b=AS:39
a=rtpmap:98 H263-2000/90000
a=control:trackID=0
a=cliprect:0,0,144,176
a=framesize:98 176-144
a=fmtp:98 profile=0;level=10
m=audio 0 RTP/AVP 99
b=AS:12
a=rtpmap:99 AMR/8000/1
a=control:trackID=1
a=fmtp:99 octet-align

Opened URL "rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp", returning a SDP description:
v=0
o=GoogleStreamer 943086435 202448811 IN IP4 74.125.213.247
s=Video
c=IN IP4 0.0.0.0
b=AS:51
t=0 0
a=control:*
a=range:npt=0-63.800000
m=video 0 RTP/AVP 98
b=AS:39
a=rtpmap:98 H263-2000/90000
a=control:trackID=0
a=cliprect:0,0,144,176
a=framesize:98 176-144
a=fmtp:98 profile=0;level=10
m=audio 0 RTP/AVP 99
b=AS:12
a=rtpmap:99 AMR/8000/1
a=control:trackID=1
a=fmtp:99 octet-align

Created receiver for "video/H263-2000" subsession (client ports 52320-52321)
Created receiver for "audio/AMR" subsession (client ports 52322-52323)
Sending request: SETUP rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp/trackID=0 RTSP/1.0
CSeq: 4
User-Agent: ./openRTSP (LIVE555 Streaming Media v2011.07.08)
Transport: RTP/AVP;unicast;client_port=52320-52321


Received 360 new bytes of response data.
Received a complete SETUP response:
RTSP/1.0 200 OK
Session: 4d04d0e9;timeout=90
Transport: RTP/AVP;unicast;mode=play;client_port=52320-52321;server_port=10580-10581;source=74.125.213.247;ssrc=7B551CAA
Cache-Control: must-revalidate
Date: Fri, 30 Mar 2012 15:27:43 GMT
Expires: Fri, 30 Mar 2012 15:27:43 GMT
Last-Modified: Fri, 30 Mar 2012 15:27:43 GMT
CSeq: 4
Server: Google RTSP 1.0


setup response srvAddr port rtpchnl   74.125.213.247 10580 255
Setup "video/H263-2000" subsession (client ports 52320-52321)
Sending request: SETUP rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp/trackID=1 RTSP/1.0
CSeq: 5
User-Agent: ./openRTSP (LIVE555 Streaming Media v2011.07.08)
Transport: RTP/AVP;unicast;client_port=52322-52323
Session: 4d04d0e9


Received 360 new bytes of response data.
Received a complete SETUP response:
RTSP/1.0 200 OK
Session: 4d04d0e9;timeout=90
Transport: RTP/AVP;unicast;mode=play;client_port=52322-52323;server_port=10580-10581;source=74.125.213.247;ssrc=10CD5DCE
Cache-Control: must-revalidate
Date: Fri, 30 Mar 2012 15:27:43 GMT
Expires: Fri, 30 Mar 2012 15:27:43 GMT
Last-Modified: Fri, 30 Mar 2012 15:27:43 GMT
CSeq: 5
Server: Google RTSP 1.0


setup response srvAddr port rtpchnl   74.125.213.247 10580 255
Setup "audio/AMR" subsession (client ports 52322-52323)
Created output file: "video-H263-2000-1"
Created output file: "audio-AMR-2"
Sending request: PLAY rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp/ RTSP/1.0
CSeq: 6
User-Agent: ./openRTSP (LIVE555 Streaming Media v2011.07.08)
Session: 4d04d0e9
Range: npt=0.000-63.800


Received 394 new bytes of response data.
Received a complete PLAY response:
RTSP/1.0 200 OK
Session: 4d04d0e9;timeout=90
Range: npt=0.000-63.800
RTP-Info: url=rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp/trackID=0;seq=48690;rtptime=668323490,url=rtsp://v
8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp/trackID=1;seq=61565;rtptime=99689199
CSeq: 6
Server: Google RTSP 1.0


Started playing session
Receiving streamed data (for up to 68.800000 seconds)...
Sending request: TEARDOWN rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp/ RTSP/1.0
CSeq: 7
User-Agent: ./openRTSP (LIVE555 Streaming Media v2011.07.08)
Session: 4d04d0e9


Received 72 new bytes of response data.
Received a complete TEARDOWN response:
RTSP/1.0 200 OK
CSeq: 7
Session: 4d04d0e9
Server: Google RTSP 1.0

Ответ 5

VLC - это первое, что приходит на ум. Обычно я перехожу на этот старый сайт www.vcdhelp.com и под панелью " Как" с левой стороны, Все руководство "введите свой параметр поиска в" Текстовый поиск ".

Для вашего решения проверьте: http://www.videohelp.com/tools/StreamTransport (бесплатное ПО)

Ответ 6

Как насчет использования libpcap для создания инструмента tcpdump/Wireshark? Удаляя заголовки, генерируемые слоями под уровнем приложения (т.е. TCP/UDP/IP/...), у вас будет доступ к потоку RTSP. Затем поток можно сбрасывать в файл на диске. Я должен признать, что я не знаком с RTP/RTSP, поэтому, возможно, вам нужно также удалить эти заголовки и просто написать полезную нагрузку в файл (для воспроизведения медиа-проигрывателя).