#audio #gstreamer #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, format=(string)F32LE, channels=(int)2, layout=(string)interleaved
! audioresample ! audio/x-raw, format=(string)F32LE, rate=(int)48000, channels=(int)2, 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, amp;gm, GST_MAP_READ))
{
return false;
}
else
{
std::cout << "buffer size " << gm.size;
}
}
Когда я читаю буфер из потока микрофона, все работает так, как ожидалось, и я получаю буферы размером 3840 (3840 / 2 / 4 = 48000 кГц),но когда я читаю из файла .ogg, у меня странный размер буфера, который обычно составляет 2048, а иногда и меньше…
Почему это так работает?