gpt4 book ai didi

c - 使用 libshout 将 OGG Flac 流式传输到 Icecast

转载 作者:太空宇宙 更新时间:2023-11-03 23:39:49 24 4
gpt4 key购买 nike

我有一个用 C++ 开发的简单流媒体,使用 LibFlac 和 LibShout 流式传输到 Icecast 服务器。flac 编码器是通过以下方式创建的:

  m_encoder = FLAC__stream_encoder_new();
FLAC__stream_encoder_set_channels(m_encoder, 2);
FLAC__stream_encoder_set_ogg_serial_number(m_encoder, rand());
FLAC__stream_encoder_set_bits_per_sample(m_encoder, 16);
FLAC__stream_encoder_set_sample_rate(m_encoder, in_samplerate);
FLAC__stream_encoder_init_ogg_stream(m_encoder, NULL, writeByteArray, NULL, NULL, NULL, this);

writeByteArray 函数使用 libshout 中的 shout_send_raw 函数将编码数据发送到 Icecast。shout_send_raw 返回实际发送的字节数,因此我假设它正常工作,没有发生错误。问题是 Icecast 服务器不流式传输我发送的数据。我在日志中看到以下内容:
[2018-02-15 15:31:47] DBUG stats/modify_node_event 更新“/radio” total_bytes_read (20735897)
[2018-02-15 15:31:47] DBUG stats/modify_node_event 更新“/radio” total_bytes_sent (0)
我看到 Icecast 接收到数据,但它没有将其发送到连接的客户端。挂载点是 radio,当我尝试使用任何媒体播放器连接到该挂载点时 - 它什么都不做,没有播放。所以我的问题是 Icecast 接收数据但不将其发送给连接的客户端怎么可能?也许需要一些额外的 libshout 配置,下面是我的配置方式:
shout_set_format( m_ShoutData, SHOUT_FORMAT_OGG_AUDIO);
shout_set_mime( m_ShoutData, "application/ogg");
任何帮助将不胜感激。

最佳答案

根据评论总结解决方案:

FLAC 的比特率明显高于任何其他常用的音频编解码器。因此,默认设置将 起作用。队列大小必须显着增加,以便完整的数据帧适合它,否则,Icecast 将不会在流上同步并拒绝向客户端输出数据。

显然这同样适用于流媒体视频。必须针对适当的挂载点或全局调整队列大小。

关于c - 使用 libshout 将 OGG Flac 流式传输到 Icecast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48849975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com