流光从麦克风和 .ogg 文件流式传输时的样本大小不同

问题描述

我想将音频数据从麦克风和一些 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 (将#修改为@)