Video mit ffmpeg zu Icecast streamen?

Video mit ffmpeg zu Icecast streamen?

Gibt es eine einfache Möglichkeit, Videos mit ffmpeg in icesast zu streamen? Das Quellvideo liegt im video/x-matroskaFormat vor. Die Streams selbst liegen in verschiedenen Formaten vor (mpeg, vorbis, aac usw.). Ich möchte, dass ffmpeg die Quelle selbst errät und sie dann „on the fly“ in alles umwandelt, was von Browsern abgespielt werden kann, wobei die Quellauflösung und das Seitenverhältnis beibehalten werden. Das video/webmwird reichen. Ich habe Folgendes versucht (einschließlich des Spielens mit Ausgabeformaten):

ffmpeg -i source.mkv -vcodec libvpx -cpu-used -5 -deadline realtime -content_type video/webm\
    icecast://source:hackme@localhost:8000/vstream.webm

Der Stream ist jedoch nicht abspielbar und die Verbindungen führen dazu, dass ffmpeg mit folgendem Fehler beendet wird:

av_interleaved_write_frame(): Connection reset by peer
Error writing trailer of icecast://source:hackme@localhost:8000/vstream.webm: Connection reset by peer

Es ist kein Problem, alles andere als ffmpeg einzubinden, ich möchte nur, dass es funktioniert.

Antwort1

Es stellt sich heraus, dass dies entweder schwer zu erreichen ist oder überhaupt nicht möglich ist. Dennoch ist es möglich, etwas Ähnliches mit einer Kombination aus nginx(mit rtmpModul) und zu erreichen ffmpeg. In nginxder Konfiguration (wahrscheinlich unter /etc/nginx/nginx.conf) sollte der folgende Abschnitt angehängt werden, damit es als rtmpServer funktioniert (Mit vollem öffentlichem Zugriff. Seien Sie vorsichtig, der Stream ist nicht verschlüsselt und jeder, der Ihr Netzwerk erreichen kann, kann ihn ansehen):

rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live {
            live on;
            record off;
            allow play all;
        }
    }
}

Das Streamen von Videodateien geht dann ganz einfach über den ffmpegfolgenden Aufruf:

ffmpeg -re -i video_file.mkv -c:v libx264 -f flv rtmp://host:1935/live

Wer den Stream ansehen möchte, muss sich abschließend mit seinem bevorzugten Player mit derselben Adresse verbinden:

rtmp://host:1935/live

Hinweis: hostHier ist der Hostname des Servers, auf dem nginxes gestartet wird.

Antwort2

Kurze Antwort: Das ist nicht möglich, da Icecast ein Audio-Streaming-System und kein Video-Streaming-Server ist.

Antwort3

Mit obs funktioniert es einwandfrei, mit ffmpeg habe ich es allerdings noch nicht probiert. Und obs hat den Vorteil, dass man mit den Player-Steuerelementen hin- und herspringen kann. Ich bin dieser Anleitung gefolgt und es ist ganz einfach:

https://www.braillealphabetsoup.com/icecast-video-streaming-with-obs.html

verwandte Informationen