使用MP4V2开源库将AAC打包到MP4文件中

这几天一直在搞Darwin Streaming Server的点播功能,对MP4文件的点播是没有问题的,但是对音频(比如aac音频文件)该如何点播呢?

想到了一种转发思路:就是将aac文件打包到MP4文件中,然后在进行MP4文件的点播;

直接上代码:

int main(int argc, char *argv[])
{

FILE *fpAudio = NULL;
int len;
MP4TrackId  audio = MP4_INVALID_TRACK_ID;
uint8_t  buf[2] = {0x15, 0x88};
//创建 mp4 文件

file = MP4Create("test.mp4", 0);
if (file == MP4_INVALID_FILE_HANDLE)
{
printf("Open file failed!\n");
return 1;
}
// 设置时间片
MP4SetTimeScale(file, AUDIO_TIME_SCALE); 

// 添加 AAC track
audio = MP4AddAudioTrack(file,8000, 1930, MP4_MPEG4_AUDIO_TYPE);
if (audio == MP4_INVALID_TRACK_ID)
{
printf("Add audio track failed!\n");
return 1;
}
// 设置音频属性
MP4SetAudioProfileLevel(file, 0x02);
MP4SetTrackESConfiguration(file, audio, buf, 2);
fpAudio = fopen("input.aac", "rb");
if (fpAudio == NULL)
{
printf("File could not open!\n");
return 1;
}
buffer = (unsigned char *)malloc(4097);
memset(buffer,0,4097);

while((len = fread(buffer,1,4096,fpAudio)) > 0)
{

MP4WriteSample(file,audio,buffer,len,MP4_INVALID_DURATION,0,0,1);
}
fclose(fpAudio);
free(buffer);
MP4Close(file, 0);
}

这样就可以将aac文件打包到MP4文件中;

使用 MP4v2 AAC 编码音频写 M4A 文件可以通过以下步骤完成: 首先,需要准备好要写入的音频数据,并使用 AAC 编码格式进行编码。AAC 是一种广泛使用的音频编码格式,可以提供高质量的音频压缩。可以使用 MP4v2 的编码器功能将音频数据转换为 AAC 格式。 接下来,在使用 MP4v2 之前,需要确保已经正确安装和配置了该。根据操作系统的不同,可以在官方网站上找到相关的安装和配置指南。 一旦确认的安装和配置完毕,就可以开始编写代码了。首先,需要导入 MP4v2 ,并创建一个 MP4 文件对象。然后,通过调用 MP4SetAudioProfileLevel 函数设置音频的编码参数,例如比特率、声道数等。 接下来,需要将编码后的 AAC 音频数据写入 M4A 文件。可以使用 MP4WriteSample 函数来实现这一步骤。需要注意的是,写入音频数据时需要指定音频帧的时间戳,以确保音频数据的顺序正确。 最后,需要调用 MP4Close 函数来关闭文件,保存并释放资源。 使用 MP4v2 AAC 编码音频写 M4A 文件的示例代码如下: ```cpp #include <mp4v2/mp4v2.h> void writeM4AFile(const char* audioFileName, const char* outputFile) { MP4FileHandle fileHandle = MP4Create(outputFile); // 设置音频编码参数 MP4SetAudioProfileLevel(fileHandle, 0x2); // AAC-LC MP4SetAudioChannels(fileHandle, 2); // 声道数 MP4SetAudioDuration(fileHandle, 0); // 设置音频时长(可选) MP4SetAudioProfileLevel(fileHandle, 0x15); // 采样率 // 打开音频文件 FILE* audioFile = fopen(audioFileName, "rb"); if (audioFile != NULL) { // 读取音频数据并写入 M4A 文件 while (!feof(audioFile)) { unsigned char buffer[1024]; size_t bytesRead = fread(buffer, 1, sizeof(buffer), audioFile); MP4WriteSample(fileHandle, 1, buffer, bytesRead, MP4_INVALID_DURATION, 0, 1); } fclose(audioFile); } // 关闭文件,保存并释放资源 MP4Close(fileHandle, MP4_CLOSE_DO_NOT_COMPUTE); } int main() { const char* audioFileName = "audio.pcm"; const char* outputFile = "output.m4a"; writeM4AFile(audioFileName, outputFile); return 0; } ``` 上述代码是一个简单的示例,需要根据具体的需求进行适当的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值