[SimplePlayer] 4. 从视频文件中提取音频
提取音频,具体点来说就是提取音频帧。提取方法与从视频文件中提取图像的方法基本一样,这里仅列出其中的不同点:
1. 由于目的提取音频,因此在demux的时候需要指定的是提取audio stream
1 | AudioStream = av_find_best_stream(pFormatCtx, AVMEDIA_TYPE_AUDIO, -1, -1, NULL, 0); |
2. 在decode时,解码音频与解码视频分别采用的是不同的API
1 | avcodec_decode_audio4(pCodecCtx, pFrame, &frameFinished, &packet); |
3. 由于本播放器的音频输出实现是基于SDL,而SDL支持输出为S16的音频样本格式(也许是系统原因?),因此我们这里在保存文件时,如果解码出来的音频样本格式不是S16,那么就需要对其进行格式转换,以方便后续读取文件进行播放。下面以最常见的FLTP格式为例,把该格式的音频转换为S16格式的音频。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | sample_count = pFrame->nb_samples; channel0 = (float *)pFrame->extended_data[0]; channel1 = (float *)pFrame->extended_data[1]; //normal PCM is mixed(interleave) track, but fltp "p" means planar if (pFrame->format == AV_SAMPLE_FMT_FLTP) { for (i=0; i<sample_count; i++){ //stereo sample0 = (short)(channel0[i]*32767.0f); sample1 = (short)(channel1[i]*32767.0f); fwrite(&sample0, 2, 1, pFile); fwrite(&sample1, 2, 1, pFile); } } |
分类:
FFmpeg
, SimplePlayer
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2012-11-03 poll机制分析
2012-11-03 linux字符设备驱动驱动流程
2012-11-03 Linux按键驱动,中断实现流程
2012-11-03 编写Linux中断驱动时,由于头文件缺失引起的编译错误