2013-04-28 19 views
25

È possibile eseguire il dump di un flusso RTSP non elaborato su file e quindi decodificare il file in modo che sia riproducibile?Come scaricare file RTSP raw su file?

Attualmente sto usando FFmpeg per ricevere e decodificare il flusso, salvandolo in un file mp4. Funziona perfettamente, ma richiede molta CPU e limita severamente il numero di stream RTSP che posso ricevere simultaneamente sul mio server.

Vorrei salvare il flusso su file senza decodificarlo e ritardare la parte di decodifica a quando il file deve essere aperto.

È possibile?

Ho provato VLC, che è ancora più intenso della CPU rispetto a FFmpeg. Ho anche guardato a this question dove la risposta dice che scaricare RTSP su file non è utile, e this question, dove il commento sotto la domanda dice "Il contenuto Raw RTSP non è adatto per salvare e riprodurre ...", che sembra indicare che c'è modo.

Grazie in anticipo!


EDIT Ecco il comando che sto utilizzando per FFmpeg:

ffmpeg -i rtsp://@192.168.241.1:62159 -r 15 C:/DB_Videos/2013-04-30 17_18_34.703.mp4

risposta

34

Se si ricodifica nella riga di comando ffmpeg, che può essere la ragione per cui è CPU intensiva. Devi semplicemente copiare gli stream sul singolo contenitore. Dato che non ho la tua linea di comando, non posso suggerire un miglioramento specifico qui. Il tuo acodec e vcodec dovrebbero essere impostati per copiare è tutto ciò che posso dire.

EDIT: Nel vedere la tua riga di comando e dato che l'hai già provato, questo è per il beneficio di altri che incontrano la stessa domanda. Il comando:

ffmpeg -i rtsp://@192.168.241.1:62156 -acodec copy -vcodec copy c:/abc.mp4 

non eseguirà la transcodifica e eseguirà il dump del file in un mp4. Ovviamente questo presuppone che i contenuti in streaming siano compatibili con un mp4 (che con ogni probabilità lo sono).

+0

Vedo, quindi l'aggiunta di copia dovrebbe ridurre l'utilizzo della CPU? Darò questo andare. (Aggiunto il mio comando FFmpeg alla domanda). Aggiungerò anche il disclaimer che sono un principiante di FFmpeg completo :) – Felix

+0

Wow, è folle! L'utilizzo della mia CPU è passato dal 7% allo 0,1% !!! Grazie mille av501! – Felix

+0

Prego. Suppongo che tu abbia aggiunto -acodec copy -vcodec copy e che dovrebbe darti il ​​tuo originale contenuto ricevuto. – av501

9

Con questo comando ho avuto scarsa qualità delle immagini

ffmpeg -i rtsp://192.168.XXX.XXX:554/live.sdp -vcodec copy -acodec copy -f mp4 -y MyVideoFFmpeg.mp4 

Con questo, quasi immediatamente, ho avuto una buona qualità dell'immagine.

ffmpeg -i rtsp://192.168.XXX.XXX:554/live.sdp -b 900k -vcodec copy -r 60 -y MyVdeoFFmpeg.avi 
4

È possibile utilizzare mplayer.

mencoder -nocache -rtsp-stream-over-tcp rtsp://192.168.XXX.XXX/test.sdp -oac copy -ovc copy -o test.avi 

Il codec "copia" è solo una copia stupida del flusso. Mencoder aggiunge un'intestazione e cose che probabilmente vorresti.

Nel file di origine mplayer "stream/stream_rtsp.c" è un'impostazione di prebuffer_size di 640k e nessuna opzione per modificare la dimensione di altri, quindi ricompilare. Il risultato è che la scrittura del flusso è sempre ritardata, il che può essere fastidioso per cose come le telecamere, ma oltre a questo, si ottiene un file di output e si può riprodurlo quasi senza problemi.