Как написать в точку монтирования Icecast с помощью avformat (ffmpeg)?

Я создаю программу (я хочу использовать libavformat, а не исполняемый файл ffmpeg) для потоковой передачи живого видео на сервер Icecast, и похоже, что FFmpeg сможет это сделать. Я могу записать живое видео в файл (что не очень просто для начала :) ), но я не могу найти простой код / ​​пример того, как использовать avformat/avio для записи в точку монтирования Icecast (сеть). Любые указатели на пример кода будут оценены.


person Iasen Kostov    schedule 19.07.2016    source источник
comment
Немного устарело, но см. это: stackoverflow.com/a/9985297/362536 В наши дни это еще проще... может использовать запрос HTTP PUT вместо запроса SOURCE.   -  person Brad    schedule 20.07.2016


Ответы (2)


При использовании FFmpeg вы указываете вывод в виде URL-адреса icecast://:

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

Неясно, используете ли вы ffmpeg или libavformat напрямую; если есть способ указать URL-адрес для вывода в последнем случае, я бы предположил, что перед ним стоит icecast://.

Другой вариант — использовать вместо этого libshout; это библиотека, предназначенная для отправки потоков на сервер Icecast с соответствующей скоростью.

person Tangent 128    schedule 19.07.2016
comment
Вот почему я сказал, что создаю программу (не используя исполняемый файл ffmpeg). И libshout - это беспорядок для компиляции под Windows. Я даже не хочу вникать в это :) - person Iasen Kostov; 19.07.2016

На самом деле это было легко. Вы просто открываете выходной URL-адрес, где «xxx: yyy» — это пользователь и пароль для монтирования:

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

Возможно, вам потребуется установить тип содержимого:

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

Затем вы просто открываете URL:

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

Он протестирован и работает.

person Iasen Kostov    schedule 11.03.2017