Я создаю программу (я хочу использовать libavformat, а не исполняемый файл ffmpeg) для потоковой передачи живого видео на сервер Icecast, и похоже, что FFmpeg сможет это сделать. Я могу записать живое видео в файл (что не очень просто для начала :) ), но я не могу найти простой код / пример того, как использовать avformat/avio для записи в точку монтирования Icecast (сеть). Любые указатели на пример кода будут оценены.
Как написать в точку монтирования Icecast с помощью avformat (ffmpeg)?
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
Вот почему я сказал, что создаю программу (не используя исполняемый файл 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