我正在构建一个程序(我想使用libavformat而不是ffmpeg可执行文件)将实时视频流式传输到Icecast服务器,看起来FFmpeg应该可以做到。我可以将实时视频写入文件(开头并不是很简单:))但是我找不到简单的代码/示例来说明如何使用avformat / avio写入Icecast(网络)挂载点。 任何指向示例代码的指针都会受到赞赏。
答案 0 :(得分:0)
使用FFmpeg时,您将输出指定为icecast:// URL:
ffmpeg -i input.mkv -content-type video/webm icecast://user:password@hostname.tld/mountpoint
目前还不清楚你是否直接使用ffmpeg或libavformat;但是,如果有一种方法可以在后一种情况下为输出指定一个URL,那么只需用icecast开头://我会假设。
另一种选择是改用libshout;它是一个用于以适当的速率将流发送到Icecast服务器的库。
答案 1 :(得分:0)
实际上很容易。您只需打开输出URL,其中“xxx:yyy”是用户和mount的密码:
const char *outputfile = "icecast://xxx:yyy@10.0.0.1:8000/xyz.mkv";
out_format = av_guess_format(NULL, outputfile, NULL);
您可能需要设置内容类型:
av_dict_set(&out_options, "content_type", "video/x-matroska", 0);
然后你只需打开网址:
avio_open2(&out_fctx->pb, outputfile, AVIO_FLAG_WRITE, NULL, &out_options) < 0);
经过测试和运作。