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

0

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 wie es an einem zweiten Stream hängt und keine Bewegung. SOS Bitte helfen Sie. Ich habe 4 Stream-URLs. Ich möchte, dass sie gleichzeitig 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 gerade erhalte, 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
user3146313
quelle
Haben Sie versucht, ffmpeg 4 nur zu verschiedenen Zeiten auszuführen?
Lawrence
Aus irgendeinem Grund haben nur 2 mit der Aufnahme begonnen. Aber getrennt funktionieren alle Streams und die Aufnahme funktioniert einwandfrei. Aber ich starte Aufzeichnungen in Java mit: p = Runtime.getRuntime (). Exec (recordCommand);
user3146313

Antworten:

0

WhooHooo, ich habe das Problem verstanden! Das ist also die Lösung. In meinem Fall hing FFMPEG an einem der problematischen Streams und wollte daher keine weiteren Streams in der Liste aufzeichnen. Grundsätzlich muss bei FFMPEG der Befehl für jeden Stream in einem separaten Thread ausgeführt werden. 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 wird die Aufzeichnung der restlichen Streams nicht unterbrochen, wenn ffmpeg keine Verbindung zu einem dieser Streams herstellen kann und hängt.

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

user3146313
quelle