从ffmpeg中提取mp3播放器
来源:互联网 发布:手机商城html源码下载 编辑:程序博客网 时间:2024/04/28 06:21
mp3 和 mp2 的核心实现在 mpegaudiodec.c 里。
如果不需要其它解码只要mpeg声音的解码的话,其接口相当简单。一个是初始化函数 decode_init,另一个是真正的帧解码函数 decode_frame.
int decode_init(AVCodecContext * avctx)
int decode_frame(AVCodecContext * avctx,void *data, int *data_size,uint8_t * buf, int buf_size)
可以看得出来,用户只要定义一个 AVCodecContext 的变量,然后将指针传给这两个函数就可以了。另外特别值得注意的是 decode_init中第一行代码是
MPADecodeContext *s = avctx->priv_data;
由于AVCodecContext结构体的priv_data是一个数据空间的指针,如果没有分配空间那它是指向NULL的,所以你可以选择malloc一个空间,也可以定义一个全局变量MPADecodeContext MPDctx,然后将指针赋值给avctx->priv_data.我选择后者,对于管理内存,太麻烦,也不是俺的强项。
decode_frame 的功能就是解码完一帧就返回,返回值表明使用了缓冲区中多少数据。当然如果传入的数据不够解码一帧也会返回,但是data_size为0。这里介绍一下decode_frame的后面几个参数,buf和buf_size是指传入的mpeg声音压缩码流的缓冲区地址和缓冲区大小,而data和是指解码出来的pcm数据要存放的地址,*data_size是解码出的pcm数据大小,一般为0或者1152x4. 除了data_size,decode_frame的另外四个参数都为输入型参数.
据此,我们可以写一个main.c来实现一个播放器了。
AVCodecContext t_avcc;
MPADecodeContext t_mpadc;
int main(int argc,char *argv[]){
t_avcc.priv_data=&t_mpadc;
decode_init(&t_avcc);
此处加入打开mp3文件的指针file_mp3;
while(!feof(file_mp3)){
int len;
unsigned char buf[4096],*buf_ptr;
int buf_size;
unsigned char data[1152*8];
int data_size;
/* 这个read函数不保证正确,凭感觉写的:(*/
buf_size=read(buf,file_mp3,4096);
while(buf_size>0){
buf_ptr=buf;
len=decode_frame(&t_avcc,data,&data_size,buf_ptr,buf_size);
if(len<0)
break;
此处加入对data的处理代码,写入文件或者写到声卡,随便
buf_optr+=len;
buf_size-=len;
}
}
}
//-------------------------------------------------------------------------------
- 从ffmpeg中提取mp3播放器
- 从ffmpeg中提取mp3播放器
- 从ffmpeg中提取mp3播放器
- [转]从ffmpeg中提取mp3播放器
- 从flw中提取mp3
- [FFMPEG-1]最想实现的第一个功能-从mp3中提取pcm数据
- 采用FFmpeg从视频中提取音频(声音)保存为mp3文件
- 采用FFmpeg从视频中提取音频(声音)保存为mp3文件
- 从MP3中提取歌曲信息
- 从MP3中提取歌曲信息
- 从MP3中提取歌曲信息
- 从MP3中提取歌曲信息(C#)
- 从MP3中提取歌曲信息(C#)
- .net从MP3中提取歌曲信息
- 从MP3中提取歌曲信息
- 从MP3中提取歌曲信息
- 从MP3中提取歌曲信息(C#)
- 从MP3中提取歌曲信息(C#)
- 状态对象:数据库的替代者
- (图解)PowerDesigner与SQL Server相连
- 获取excel表名。
- asp.net 2.0中gridview里嵌套dropdownlist
- Struts+Spring+JDBC 简单配置
- 从ffmpeg中提取mp3播放器
- Java/J2EE中文问题终极解决之道
- 今天用Visual C#为客户做一个数据下载分析系统,碰到一个问题 未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。
- 在.net中轻松掌握Windows窗体间的数据交互
- PCB图画了一半了
- 提高IIS网站服务器的效率的八种方法
- asp.net2.0的几种自动生成脚本的原理以及应用
- Struts秘籍之第1段:第2.1式:用插件来进行应用初始化
- 从今天开始写技术博客