capture de flux rtsp
je cherche un moyen universel de larguer rtsp stream. Je veux comprendre, qu'un flux rtsp fonctionne bien et que le serveur envoie une vidéo observable.
openRTSP
au début, google me recommande openRTSP outil.
openRTSP -4 ${stream_link} > ${output_file}
mais le fichier vidéo de sortie largué par cet outil n'est pas vraiment correct. Video decoder (ffdec) retourne de nombreuses erreurs comme "Failed to decode video packet" et "[h264] no frame!", qui ne me convient pas.
puis j'ai essayé de larguer RTSP stream avec ffmpeg tool.
ffmpeg -loglevel debug -i "${stream_link}" -s 640x480 -vcodec copy -acodec copy -y ${output_file}
mais le processus de diffusion en continu était souvent interrompu par une erreur:
Application provided invalid, non monotonically increasing dts to muxer in stream 0: 730672 >= 730672
av_interleaved_write_frame(): Invalid argument
je suis en train d'utiliser --fflags igndts
mais ffmpeg n'ignore pas ces erreurs. Cela n'a aucun sens, car cette erreur signifie en fait que les flux audio et vidéo sont envoyés de manière asynchrone. Le pire, c'est que le fichier jeté, à la suite de ce dump interrompu, est pas correct aussi. Ffdec revenir à l'erreur:
ERROR [mov,mp4,m4a,3gp,3g2,mj2] moov atom not found
ERROR [ffdec] av_open_input_file: Operation not permitted
Après une bonne tasse de recherche sur google, j'ai trouvé, qu'il est vraiment vieux ffmpeg multiplexeur bug.
que j'ai essayé d'utiliser mplayer avec LIVE_555 lib.
mplayer -noframedrop -dumpfile ${output_file} -dumpstream ${stream_link}
mais j'ai aussi quelques erreurs.
Stream not seekable!
Core dumped ;)
Question
je pense que je fais quelque chose de mal. Il a l'air vraiment ridicule, qu'il n'y a aucun moyen de enregistrez le flux rtsp dans le fichier vidéo correct et jouable.
peut-être y a-t-il d'autres outils qui peuvent vous aider dans cette tâche? En fait, je serai reconnaissant pour tout conseil pour toutes sortes de libs et de langues. Mais ce processus devrait être automatique et avoir cli.
Raffinements
quelque chose à propos de 50% des expériences que j'ai faites sur le localhost avec vlc-streamer qui émule rtsp-broadcaster. Voici un manuel ce que j'essaie de suivre.
j'ai vraiment frais et dernier ffmpeg avec le support x264, que j'ai installé par utile thread.
6 réponses
Avez-vous essayé vlc pour enregistrer les flux rtsp? Il a travaillé pour moi.J'ai essayé avec une interface graphique. Mais cela devrait aussi fonctionner à partir de la ligne de commande.
ffmpeg + wallclock_as_timestamps fonctionne
ffmpeg est la façon la plus facile d'atteindre votre objectif, mais voici quelques notes importantes:
tout d'Abord, je vous conseille d'avoir la dernière version (2.4.x au lieu du 1.2.x expédié avec Ubuntu). Vous pouvez l'obtenir à partir d' https://www.ffmpeg.org/download.html
Vous obtiendrez toujours le
Application provided invalid, non monotonically increasing dts to muxer in stream 0: 730672 >= 730672
av_interleaved_write_frame(): Invalid argument error
erreur, mais vous pouvez obtenir débarrasser de lui. Ceci est principalement dû au fait que les FPS (trames par seconde) sont changement constant sur les caméras IP en fonction de la qualité de la connexion. Voici 2 solutions qui ont fonctionné pour moi:
Solution 1 =use_wallclock_as_timestamps option de sorte que votre commande se présente comme
ffmpeg -use_wallclock_as_timestamps 1 -i rtsp://myip:554/mpeg4 -c copy myrecord.avi
PROS = faible utilisation de CPU + enregistrements de bonne qualité parce que rien n'est transcodé / CONS = fichiers légèrement gros (~6Mb / minute)
Solution2 = suppression de la copie " - acodec copy-vcodec copy" options dans votre commande. La commande simple
ffmpeg -i rtsp://myip:554/mpeg4 myrecord.avi
fera l'affaire. PROS = petits fichiers (~1.2 Mo / minute) / CONS = utilisation élevée de l'UC (6% sur mon ordinateur), parce que je pense que c'est du transcodage pour les codecs par défaut + mauvaise qualité des enregistrements
j'Espère que ça aide!
Dmitry, vous devriez essayer ErlyVideo server. Il peut capturer le trafic RTSP et le stocker dans des fichiers multimédia qui peuvent être lus avec des médiaplayers.
Dump stream(s) à partir d'une Vidéo Youtube à la locale de l'appareil à l'aide de OPENRTSP
à titre d'exemple, j'utiliserai le flux rtsp disponible pour toute vidéo youtube.
Mesures:
- Utiliser Oauth 2.0 aire de jeux pour interagir directement avec l'api youtube -obtient le flux
- Obtenir l'ID de la vidéo Youtube, en l'utilisant dans la gdata demande de chargement (v=cpST8yz4w1w)
- Parse la sortie pour l'url rtsp que vous voulez - format 1 est faible bande passante, format 6= haute
- CLI - utilisation openrtsp à la demande
- téléchargement(s) openrtsp sorties fichier distinct pour chaque piste
- ofile1= "video-H263-2000 - 1"
- ofile2= "audio-AMR-2"
Détails sur le processus manuel pour l'immersion du flux:
Oauth 2 aire de jeux est un bon outil https://code.google.com/oauthplayground/
- choisissez "Youtube" à partir de en bas de la liste , cliquez sur "Autoriser" bouton
- Cliquez sur "Autoriser l'Accès"
- cliquez sur "Échanger le code D'autorisation pour les tokens"
- vous obtiendrez la zone de texte pour "Request URI"
Demande le code suivant:
champs en clair spec=médias:groupe/media:content[@yt:format="1"]
La réponse est flux json. Copie de l'oauth formulaire et le coller dans : http://json.parser.online.fr/ et vous aurez quelque chose comme:
"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
}
]
Prendre RTSP attribut d'url à partir de cela et d'appeler openrtsp pour faire le dump de fichier. Vous aurez à WAIT car openrtsp diffusera les médias (pas les télécharger ). Si vous demandez une décharge de 10 minutes .mp4, vous devrez attendre 10 minutes.
NOTE: le SDP derrière L'URI rtsp maintient des sources distinctes pour chaque piste. Alors, avec le dump, vous obtenez des fichiers séparés pour chaque piste du support d'origine du fichier.
$ ./openRTSP rtsp://v8.cache8.c.youtube.com/CiILENy73wIaGQlcw_gs85OUchMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp
Dumpfile, les résultats seront les suivants:
- Créé le fichier de sortie: "vidéo-H263-2000-1"
- Créé le fichier de sortie: "audio-AMR-2"
les détails de Stdout comprennent le protocole complet de la session 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
VLC est le premier qui vient à l'esprit. J'ai l'habitude d'aller à ce vieux site www.vcdhelp.com et en vertu de l' " Comment" panneau sur le côté gauche, cliquez sur " Tous Les Guides", Tapez votre paramètre de recherche dans"Recherche Textuelle".
Pour votre solution, découvrez: http://www.videohelp.com/tools/StreamTransport (freeware)
Que Diriez-vous d'utiliser libpcap pour créer un outil de type tcpdump/Wireshark? En enlevant les en-têtes générés par les couches sous la couche application (c.-à-d. TCP/UDP/IP/...), vous aurez accès au flux RTSP. Le flux peut alors être jeté dans un fichier sur disque. Je dois admettre que je ne suis pas très familiarisé avec le RTP/RTSP, donc peut-être que vous devez supprimer ces en-têtes aussi bien et simplement écrire la charge utile au fichier (pour un lecteur multimédia pour le lire en arrière).