video - qué - captura de flujo rtsp
streaming de video (6)
Estoy buscando una forma universal para volcar el flujo rtsp. Quiero descubrir que algunos rtsp stream están funcionando bien y que el servidor está enviando un video que se puede ver.
openRTSP
Al principio, google me openRTSP herramienta openRTSP .
openRTSP -4 ${stream_link} > ${output_file}
Pero el archivo de video de salida descargado por esa herramienta no es realmente correcto. El decodificador de video (ffdec) devuelve muchos errores, como "Falló la decodificación del paquete de video" y "[h264] no frame!", Que no me conviene.
ffmpeg
Luego he intentado volcar el flujo rtsp con la herramienta ffmpeg.
ffmpeg -loglevel debug -i "${stream_link}" -s 640x480 -vcodec copy -acodec copy -y ${output_file}
Pero el proceso de transmisión se interrumpió a menudo por error:
Application provided invalid, non monotonically increasing dts to muxer in stream 0: 730672 >= 730672
av_interleaved_write_frame(): Invalid argument
Estoy tratando de usar --fflags igndts
pero ffmpeg no ignora estos errores. No tiene ningún sentido, porque ese error en realidad significa que las transmisiones de audio y video se envían de forma asíncrona. Lo peor es que el archivo volcado, resultado de ese volcado interrumpido, tampoco es correcto. Ffdec devuelve algún error:
ERROR [mov,mp4,m4a,3gp,3g2,mj2] moov atom not found
ERROR [ffdec] av_open_input_file: Operation not permitted
Después de una buena taza de googlear, he descubierto que es un bicho muxer muy viejo de ffmpeg .
mplayer
Que he intentado usar mplayer con LIVE_555 lib.
mplayer -noframedrop -dumpfile ${output_file} -dumpstream ${stream_link}
Pero también tengo algunos errores.
Stream not seekable!
Core dumped ;)
Pregunta
Creo que estoy haciendo algo mal. Suena realmente ridículo, que no hay manera de guardar el flujo de rtsp en un archivo de video correcto y reproducible.
Tal vez hay algunas otras herramientas que pueden ayudar con esa tarea? En realidad, estaré agradecido por cualquier consejo para todo tipo de librerías e idiomas. Pero ese proceso debe ser automático y tener cli.
Refinamientos
Algo sobre el 50% de los experimentos que he hecho en el localhost con vlc-streamer que emula a rtsp-broadcaster. Aquí hay un manual que trato de seguir.
Tengo ffmpeg realmente nuevo y más reciente con soporte para x264, que he instalado con that útil hilo.
ffmpeg + wallclock_as_timestamps funciona
ffmpeg es la forma más fácil de lograr su objetivo, pero aquí hay algunas notas importantes:
Primero, le aconsejo que obtenga la última versión (2.4.x en lugar de la 1.2.x que se incluye con Ubuntu). Puede obtenerlo en https://www.ffmpeg.org/download.html
Todavía obtendrá el
Application provided invalid, non monotonically increasing dts to muxer in stream 0: 730672 >= 730672
av_interleaved_write_frame(): Invalid argument error
error pero puedes deshacerte de él. Esto se debe principalmente a que los FPS (cuadros por segundo) cambian constantemente en las cámaras IP en función de la calidad de la conexión. Aquí hay 2 soluciones que funcionaron para mí:
Solución 1 = use la opción use_wallclock_as_timestamps para que su comando se vea como
ffmpeg -use_wallclock_as_timestamps 1 -i rtsp://myip:554/mpeg4 -c copy myrecord.avi
PROS = bajo uso de CPU + grabaciones de buena calidad porque no se transcodifica nada / CONS = archivos ligeramente grandes (~ 6Mb / minuto)
Solution2 = eliminando las opciones de "copia -acodec -vcodec copy" en su comando. El comando simple
ffmpeg -i rtsp://myip:554/mpeg4 myrecord.avi
Hará el truco. PROS = archivos pequeños (~ 1.2Mb / minuto) / CONS = uso de CPU alto (6% en mi computadora), porque creo que se está transcodificando a los códecs predeterminados + grabaciones de mala calidad
¡Espero eso ayude!
¿Intentaste vlc para guardar rtsp stream? Funcionó para mí. Intenté con la interfaz gráfica. Pero también debería funcionar desde la línea de comandos.
¿Qué hay de usar libpcap para crear una herramienta tcpdump / Wireshark-like? Al eliminar los encabezados generados por las capas debajo de la capa de aplicación (es decir, TCP / UDP / IP / ...), tendrá acceso a la secuencia RTSP. La secuencia puede luego volcarse a un archivo en el disco. Debo admitir que no estoy tan familiarizado con RTP / RTSP, así que quizás también tenga que eliminar esos encabezados y simplemente escribir la carga útil en un archivo (para que lo reproduzca un reproductor de medios).
Dmitry, deberías probar el servidor ErlyVideo . Puede capturar el tráfico RTSP y almacenarlo en archivos multimedia que pueden reproducirse con reproductores multimedia.
VLC es lo primero que viene a la mente. Normalmente voy a este sitio antiguo www.vcdhelp.com y, en el panel " Cómo " del lado izquierdo, haga clic en " Toda la guía ", escriba su parámetro de búsqueda en " Búsqueda de texto ".
Para su solución, visite: http://www.videohelp.com/tools/StreamTransport (freeware)
Volcar secuencias de cualquier video de Youtube a un dispositivo local usando OPENRTSP
Como ejemplo, usaré el feed rtsp disponible para cualquier video de YouTube.
Pasos:
- Utilice el área de juegos de Oauth 2.0 para interactuar directamente con la api de youtube: se encarga de las fuentes
- Obtenga el ID del video de Youtube, usándolo en la solicitud de feed de gdata (v = cpST8yz4w1w)
- Analice la salida para la URL rtsp que desea: el formato 1 tiene un ancho de banda bajo, el formato 6 = ALTO
- CLI - use openrtsp para solicitar
- descarga (s) openrtsp produce un archivo separado para cada pista
- ofile1 = "video-H263-2000-1"
- ofile2 = "audio-AMR-2"
Detalles sobre el proceso manual para descargar el flujo:
Oauth 2 playground es una buena herramienta https://code.google.com/oauthplayground/
- Elija "Youtube" en la parte inferior de la lista, haga clic en el botón "Autorizar"
- Haga clic en "Permitir acceso"
- Haga clic en "Cambiar código de autorización para tokens"
- Obtendrá el cuadro de texto para "Solicitar URI"
Solicite lo siguiente:
campos de texto sin formato spec = media: group / media: content [@yt: format = "1"]
La respuesta es json stream. Copie eso desde el formulario oauth y péguelo en: http://json.parser.online.fr/ y tendrá algo como:
"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
}
]
Tome el atributo url RTSP de eso y llame a openrtsp para hacer el volcado del archivo. Tendrá que ESPERAR porque openrtsp transmitirá el contenido multimedia (no se descargará). Si solicita un volcado de un .mp4 de 10 minutos, tendrá que esperar 10 minutos.
NOTA: El SDP detrás del URI rtsp mantiene fuentes separadas para cada pista. Entonces, junto con el volcado, obtiene archivos separados para cada pista en el archivo multimedia original.
$ ./openRTSP rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp
Dumpfile, las salidas serán:
- Archivo de salida creado: "video-H263-2000-1"
- Archivo de salida creado: "audio-AMR-2"
Los detalles de la partida incluyen el protocolo completo de la sesión 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