FFMPEG - So zeichnen Sie mehrere RTMP-Streams in mehreren Dateien auf

3327
user3146313

Ich habe folgendes versucht, aber es funktioniert nicht.

ffmpeg -i rtmp://83.229.210.89/RAZTV/BTVraztv1 -map 0 -b:v 900k -vcodec libx264 -acodec aac -b:a 256k -strict -2 -t 3600 /media/TV_1T_3T_6/ffmpegtest/ort.mp4 -i rtmp://mirtv.cdnvideo.ru/mirtv-live/mirtv600.sdp -map 1 -b:v 900k -vcodec libx4 -acodec aac -b:a 256k -strict -2 -t 3600 /media/TV_1T_3T_6/ffmpegtest/mir.mp4 -i rtmp://chanson.cdnvideo.ru/chanson-live/shansontv.sdp -map 2 -b:v 900k -vcodec libx264 -acodec aac -b:a 256k -strict -2 -t 3600 /media/TV_1T_3T_6/ffmpegtest/shansontv.mp4 -i rtmp://83.229.210.89:1935/TROTV/BTVtro0 -map 3 -b:v 900k -vcodec libx264 -acodec aac -b:a 256k -strict -2 -t 3600 /media/TV_1T_3T_6/ffmpegtest/tro.mp4 

Sieht aus, als hänge es an einem zweiten Strom und keiner Bewegung. SOS Bitte helfen. Ich habe 4 Stream-URLs. Ich möchte, dass sie gleichzeitig zusammen aufnehmen.

With one ffmpeg command: I want: rtmp://83.229.210.89/RAZTV/BTVraztv1 to record into file: /media/TV_1T_3T_6/ffmpegtest/ort.mp4  I want: rtmp://mirtv.cdnvideo.ru/mirtv-live/mirtv600.sdp to record into file: /media/TV_1T_3T_6/ffmpegtest/mir.mp4   I want: rtmp://chanson.cdnvideo.ru/chanson-live/shansontv.sdp to record into file: /media/TV_1T_3T_6/ffmpegtest/shansontv.mp4  I want: rtmp://83.229.210.89:1935/TROTV/BTVtro0 to record into file: /media/TV_1T_3T_6/ffmpegtest/tro.mp4  

Das Protokoll, das ich jetzt bekomme, ist:

ffmpeg version 2.2.4 Copyright (c) 2000-2014 the FFmpeg developers built on Jul 6 2014 21:42:17 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5) configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-x11grab --enable-libvpx --enable-libmp3lame libavutil 52. 66.100 / 52. 66.100 libavcodec 55. 52.102 / 55. 52.102 libavformat 55. 33.100 / 55. 33.100 libavdevice 55. 10.100 / 55. 10.100 libavfilter 4. 2.100 / 4. 2.100 libswscale 2. 5.102 / 2. 5.102 libswresample 0. 18.100 / 0. 18.100 libpostproc 52. 3.100 / 52. 3.100 [flv @ 0x24981c0] Stream discovered after head already parsed Input #0, flv, from 'rtmp://83.229.210.89/RAZTV/BTVraztv1': Metadata: Server : NGINX RTMP (github.com/arut/nginx-rtmp-module) displayWidth : 720 displayHeight : 576 fps : 25 profile :  level :  Duration: 00:00:00.00, start: 1826.816000, bitrate: N/A Stream #0:0: Video: h264 (High), yuv420p, 720x576 [SAR 64:45 DAR 16:9], 699 kb/s, 25 fps, 25 tbr, 1k tbn, 50 tbc Stream #0:1: Audio: aac, 48000 Hz, stereo, fltp, 128 kb/s Stream #0:2: Data: none [flv @ 0x261c7e0] Stream discovered after head already parsed [flv @ 0x261c7e0] negative cts, previous timestamps might be wrong Last message repeated 8 times Input #1, flv, from 'rtmp://mirtv.cdnvideo.ru/mirtv-live/mirtv600.sdp': Metadata: author :  copyright :  description :  keywords :  rating :  title :  presetname : Custom creationdate : Fri Jul 11 03:34:37 2014 :  videodevice : AVerMedia Hybrid TV Video Capture avclevel : 30 avcprofile : 66 videokeyframe_frequency: 5 audiodevice : ?8=. 2E>4 (#AB@>9AB2> A ?>445@6 audiochannels : 1 audioinputvolume: 100 Duration: N/A, start: 0.000000, bitrate: 1038 kb/s Stream #1:0: Video: h264 (Baseline), yuv420p(tv), 720x576 [SAR 1:1 DAR 5:4], 972 kb/s, 25 fps, 25 tbr, 1k tbn, 50 tbc Stream #1:1: Audio: mp3, 44100 Hz, mono, s16p, 65 kb/s Stream #1:2: Data: none 
0
Haben Sie gerade 4 verschiedene Male ffmpeg ausgeführt? Lawrence vor 9 Jahren 0
Ich tat es, aus irgendeinem Grund würden nur zwei mit der Aufnahme beginnen. Aber separat arbeiten alle Streams und Aufnahmen sind in Ordnung. Aber ich starte Aufnahmen aus Java heraus mit: p = Runtime.getRuntime (). Exec (recordCommand); user3146313 vor 9 Jahren 0

1 Antwort auf die Frage

0
user3146313

Aber ich verstehe das Problem! Das ist also das Update. In meinem Fall hing FFMPEG an einem der problematischen Streams und begann daher nicht mit der Aufnahme der restlichen Streams in der Liste. Grundsätzlich müssen Sie bei FFMPEG den Befehl für jeden Stream in einem separaten Thread ausführen. Grundsätzlich richten Sie die Hauptmethode in Ihrem Jar ein, um separate Threads zu starten, die dann die Aufzeichnung für jeden Stream separat starten. Auf diese Weise kann ffmpeg die Verbindung der übrigen Streams nicht unterbrechen, wenn keine Verbindung zu ihnen hergestellt werden kann.

package igor.recorder.ffmpeg;  import java.io.IOException; import java.io.InputStream;  public class RecordRazTV extends Thread {  String streamUrl="rtmp://83.229.210.89/RAZTV/BTVraztv1"; String recordingPath="/media/TV_580_3T_9/raztv"; String recordCommand = ""; String streamAliasFileName="";  public void run() { System.out.println("Igors Log >> Inside the thread!"); streamAliasFileName = recordingPath.substring(recordingPath.lastIndexOf("/") + 1); recordCommand = "ffmpeg -i " + streamUrl + " -b:v 900k -vcodec libx264 -acodec aac -b:a 256k -strict -2 -t 3600 /media/TV_1T_3T_6/ffmpegtest/raztv.mp4"; Process p; try { System.out.println("Igors Log >> Executing Runtime for FFMPEG: " + recordCommand); p = Runtime.getRuntime().exec(recordCommand); System.out.println("Igors Log >> Done executing Runtime for FFMPEG"); InputStream in = p.getErrorStream(); int c; while ((c = in.read()) != -1) { System.out.print((char)c); } in.close(); interrupt(); } catch (IOException e) { e.printStackTrace(); }  }  } 

http://www.russiangoogletv.com