我正在尝试使用Qt 5.6.2在C ++(现代GNU / Linux上的gcc g ++ 5.4.0)中使用QtAV来将线性PCM数据编码为FLAC。
我的输入数据包括线性PCM样本,带符号的16位小端,48 kHz采样率以及1或2个通道。我将输入数据存储在QByteArray
。
我的输出数据需要是一个FLAC格式文件(不是Ogg / FLAC),采样率为16 kHz, 1通道(即使输入为2个通道) ,并签署了16位小端样本格式。需要将输出写入QByteArray
以供程序稍后使用。我决不想与文件系统进行交互,因为应用程序正在使用数据。
我一直在查看非常差的文档和源代码(标题和.cpp文件)here(和here,以及AVPlayer的其他标题和实现)这就是我所拥有的到目前为止:
QByteArray convert::convertRawToFlac(QByteArray data)
{
QBuffer buf(data);
QByteArray retval;
QBuffer retbuf(&retval);
AVTranscoder avt;
AVPlayer player;
QVariantHash muxopt, avfopt;
player.setIODevice(buf);
player.audio()->setBackends(QStringList() << QString::fromLatin1("null"));
avt.setMediaSource(&player);
avt.setOutputMedia(&retbuf);
//Now need to set options (?) to specify the output codec and
//the input and output sample formats
}
我不清楚如何从这里开始。我的主要观点是理解如何告诉QtAV(1)我的输入格式是什么; (2)不做与视频有关的任何事情(这纯粹是音频); (3)我想要的输出格式是什么(使用FLAC编码器)和所需的采样格式(s16le,单声道,16 kHz)。
在将PCM数据传递给FLAC编码器之前,我可能需要将PCM数据转换为所需的样本格式?我甚至都不确定。