FFMPEG - Как записать несколько потоков RTMP в несколько файлов

3293
user3146313

Я попробовал следующее, но это не работает.

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 

Похоже, он висит на втором потоке и без движения. SOS Пожалуйста, помогите. У меня есть 4 потока URL. Я хочу, чтобы они записывались вместе одновременно.

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  

Журнал, который я получаю прямо сейчас:

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
Вы пробовали просто запустить ffmpeg 4 раза? Lawrence 9 лет назад 0
Я сделал, по какой-то причине только 2 начали бы запись. Но отдельно все стримы работают и запись нормально. Но я начинаю записи из Java, используя: p = Runtime.getRuntime (). Exec (recordCommand); user3146313 9 лет назад 0

1 ответ на вопрос

0
user3146313

Уууууу, я понял проблему! Так что это исправление. В моем случае FFMPEG зависал на одном из проблемных потоков и поэтому не собирался начинать запись остальных потоков в списке. В основном с FFMPEG вы должны выполнить команду для каждого потока в отдельном потоке. В основном настройте метод main в вашем фляге, чтобы запустить отдельные потоки, которые затем начнут запись для каждого потока отдельно. Таким образом, если ffmpeg не может подключиться к одному из них и зависает, это не прервет запись остальных потоков.

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

Похожие вопросы