问题描述
我想将音频数据从麦克风和一些 ogg 音频文件传输到我的应用程序。 有管道:
来自麦克风:
directsoundsrc device=\"{1b70206d-3bb5-4246-a4b3-6aeddb8f1264}\"
! audioconvert
! audio/x-raw,format=(string)F32LE,rate=(int)48000,channels=(int)2,layout=(string)interleaved
! appsink sync=true
来自文件:
filesrc location=sound_file.ogg ! oggdemux ! vorbisdec
! audioconvert ! audio/x-raw,layout=(string)interleaved
! audioresample ! audio/x-raw,layout(string)interleaved
! appsink sync=true
这就是我从流中读取缓冲区的方式:
GstSample* gs = gst_app_sink_pull_sample(GST_APP_SINK( m_appsink));
if (gs)
{
GstBuffer* gb = gst_sample_get_buffer(gs);
GstMapInfo gm;
if (!gb)
{
return false;
}
if (!gst_buffer_map(gb,&gm,GST_MAP_READ))
{
return false;
}
else
{
std::cout << "buffer size " << gm.size;
}
}
当我从麦克风流读取缓冲区时,一切都按预期工作,我得到大小为 3840 (3840 / 2 / 4 = 48000 kHz) 的缓冲区,但是当我从 .ogg 文件读取时,我有奇怪的缓冲区大小,通常为 2048 和有时少... 为什么会这样?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)