2016-07-19 5 views
0

Je construis un programme (je veux utiliser libavformat pas ffmpeg exécutable) pour diffuser de la vidéo en direct sur le serveur Icecast et il semble que FFmpeg devrait être capable de le faire. Je peux écrire la vidéo en direct dans un fichier (ce qui n'est pas vraiment simple pour commencer :)) mais je ne trouve pas de code/exemple simple pour utiliser avformat/avio pour écrire sur un point de montage Icecast (réseau). Des pointeurs vers un exemple de code seraient appréciés.Comment écrire au point de montage Icecast avec avformat (ffmpeg)?

+0

Un peu daté, mais voyez ceci: http://stackoverflow.com/a/9985297/362536 Ces jours-ci, c'est encore plus simple ... vous pouvez utiliser une requête HTTP PUT au lieu d'une requête SOURCE. – Brad

Répondre

0

En fait, c'était facile. Vous venez d'ouvrir l'URL de sortie comme celui-ci où « xxx: yyy » est l'utilisateur et le mot de passe pour la montagne:

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

Vous pourriez avoir besoin de définir le type de contenu:

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

Alors vous venez ouvrir l'URL:

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

Il a été testé et fonctionne.

0

Lorsque vous utilisez FFmpeg, vous spécifiez la sortie comme Icecast: // URL:

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

On ne sait pas si vous utilisez directement ffmpeg ou libavformat; S'il existe un moyen de spécifier une URL pour la sortie dans ce dernier cas, il suffit de la précéder d'icecast: // je suppose.

Une autre option consiste à utiliser libshout à la place; c'est une bibliothèque conçue pour envoyer des flux à un serveur Icecast au taux approprié.

+0

C'est pourquoi j'ai dit que je construis un programme (n'utilisant pas l'exécutable ffmpeg). Et libshout est un désordre à compiler sous Windows. Je ne veux même pas entrer dans ça :) –