2016-07-19 22 views
0

Ich baue ein Programm (ich möchte libavformat nicht ffmpeg ausführbare Datei verwenden), um Live-Video zu Icecast-Server streamen und es sieht aus wie FFmpeg sollte es tun können. Ich kann das Live-Video in eine Datei schreiben (was nicht wirklich einfach ist :)), aber ich kann keinen einfachen Code/Beispiel finden, wie man mit avformat/avio in den Mount-Punkt von Icecast (Netzwerk) schreiben kann. Alle Hinweise auf Beispielcode würden geschätzt.Wie schreibe ich auf den Mountpoint von Icecast mit avformat (ffmpeg)?

+0

Ein bisschen veraltet, aber sehen Sie dies: http://StackOverflow.com/a/9985297/362536 Heutzutage ist es noch einfacher ... Sie können eine HTTP PUT Anfrage anstelle einer SOURCE Anfrage verwenden. – Brad

Antwort

0

Eigentlich war es einfach. Sie öffnen einfach die Ausgabe URL wie diese „xxx: yyy“ der Benutzer und das Passwort für den Berg:

const char *outputfile = "icecast://xxx:[email protected]:8000/xyz.mkv"; 
out_format = av_guess_format(NULL, outputfile, NULL); 

Sie können den Inhaltstyp festlegen müssen:

av_dict_set(&out_options, "content_type", "video/x-matroska", 0); 

Sie dann einfach Öffnen Sie die URL:

avio_open2(&out_fctx->pb, outputfile, AVIO_FLAG_WRITE, NULL, &out_options) < 0); 

Es wurde getestet und funktioniert.

0

Wenn FFmpeg verwenden, können Sie die Ausgabe als icecast angeben: // URL:

ffmpeg -i input.mkv -content-type video/webm icecast://user:[email protected]/mountpoint 

Es ist unklar, ob Sie ffmpeg oder libavformat direkt verwenden; Wenn es im letzteren Fall eine Möglichkeit gibt, eine URL für die Ausgabe anzugeben, dann reicht es mit icecast: // voraus.

Eine andere Option ist stattdessen libshout zu verwenden; Es ist eine Bibliothek, die für das Senden von Streams an einen Icecast-Server mit der entsprechenden Rate entwickelt wurde.

+0

Deshalb habe ich gesagt, dass ich ein Programm (nicht mit ffmpeg ausführbare Datei) bauen. Und libshout ist ein Chaos, um unter Windows zu kompilieren. Ich will nicht einmal in das hinein :) –