servidor qué protocolo ejemplos video ffmpeg video-streaming rtsp mplayer

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:

  1. Utilice el área de juegos de Oauth 2.0 para interactuar directamente con la api de youtube: se encarga de las fuentes
  2. Obtenga el ID del video de Youtube, usándolo en la solicitud de feed de gdata (v = cpST8yz4w1w)
  3. Analice la salida para la URL rtsp que desea: el formato 1 tiene un ancho de banda bajo, el formato 6 = ALTO
  4. CLI - use openrtsp para solicitar
  5. descarga (s) openrtsp produce un archivo separado para cada pista
  6. ofile1 = "video-H263-2000-1"
  7. 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/

  1. Elija "Youtube" en la parte inferior de la lista, haga clic en el botón "Autorizar"
  2. Haga clic en "Permitir acceso"
  3. Haga clic en "Cambiar código de autorización para tokens"
  4. Obtendrá el cuadro de texto para "Solicitar URI"
  5. Solicite lo siguiente:

    https://gdata.youtube.com/feeds/api/videos/cpST8yz4w1w?fields=media%3Agroup%2Fmedia%3Acontent%5B%40yt%3Aformat%3D%221%22%5D&v=2&alt=json

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:

  1. Archivo de salida creado: "video-H263-2000-1"
  2. 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