我有一个用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
使用将编码数据发送到Icecast
shout_send_raw
来自libshout的函数。
shout\u send\u原始
返回发送的实际字节数,因此我假设它正常工作,没有发生错误。
问题是Icecast服务器没有流式传输我发送的数据。我在日志中看到以下内容:
[2018-02-15 15:31:47] DBUG stats/modify_node_event update "/radio" total_bytes_read (20735897)
[2018-02-15 15:31:47] DBUG stats/modify_node_event update "/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" );
任何帮助都将不胜感激。