g711音频封装wav文件头格式
之前的客户需求,平台音频不支持g711格式,只支持wav/mp3,wav格式封装比较简单,只需要在原始音频数据上封装一层wav头就可以,在此记录一下该模块接口。参考开源项目ffmpeg 其中音视频编解码模块的wavenc.c文件。github的ffmpeg路径:https://github.com/FFmpeg/FFmpeg
参考如下:
const uint8_t ff_w64_guid_riff[16] = {
'r', 'i', 'f', 'f',
0x2E, 0x91, 0xCF, 0x11, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
};
const uint8_t ff_w64_guid_wave[16] = {
'w', 'a', 'v', 'e',
0xF3, 0xAC, 0xD3, 0x11, 0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A
};
const uint8_t ff_w64_guid_fmt [16] = {
'f', 'm', 't', ' ',
0xF3, 0xAC, 0xD3, 0x11, 0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A
};
const uint8_t ff_w64_guid_fact[16] = { 'f', 'a', 'c', 't',
0xF3, 0xAC, 0xD3, 0x11, 0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A
};
const uint8_t ff_w64_guid_data[16] = {
'd', 'a', 't', 'a',
0xF3, 0xAC, 0xD3, 0x11, 0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A
};
const uint8_t ff_w64_guid_summarylist[16] = {
0xBC, 0x94, 0x5F, 0x92,
0x5A, 0x52, 0xD2, 0x11, 0x86, 0xDC, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A
};
static int w64_write_header(AVFormatContext *s)
{
WAVMuxContext *wav = s->priv_data;
AVIOContext *pb = s->pb;
int64_t start;
int ret;
avio_write(pb, ff_w64_guid_riff, sizeof(ff_w64_guid_riff));
avio_wl64(pb, -1);
avio_write(pb, ff_w64_guid_wave, sizeof(ff_w64_guid_wave));
start_guid(pb, ff_w64_guid_fmt, &start);
if ((ret = ff_put_wav_header(s, pb, s->streams[0]->codecpar, 0)) < 0) {
AVCodec *codec = avcodec_find_decoder(s->streams[0]->codecpar->codec_id);
av_log(s, AV_LOG_ERROR, "%s codec not supported\n",
codec ? codec->name : "NONE");
return ret;
}
end_guid(pb, start);
if (s->streams[0]->codecpar->co