利用ffmpeg来进行视频解码的完整示例代码
来源:互联网 发布:软件fmea 编辑:程序博客网 时间:2024/04/29 23:52
(转)利用ffmpeg来进行视频解码的完整示例代码(H.264)
- Decode()
- {
- FILE * inpf;
- int nWrite;
- int i,p;
- int nalLen;
- unsigned char* Buf;
- int got_picture, consumed_bytes;
- unsigned char *DisplayBuf;
- DisplayBuf=(unsigned char *)malloc(60000);
- char outfile[] = "test.pgm";
- //1.打开输入文件
- inpf = fopen("test.264", "rb");
- //outf = fopen("out.yuv", "wb");
- if(!inpf)
- {
- goto Decodereturn;
- }
- nalLen = 0;
- Buf = (unsigned char*)calloc ( 1000000, sizeof(char)); //准备解码文件缓冲
- //2.注册解码器,并且找到H264解码器
- avcodec_init();
- avcodec_register_all();
- codec = avcodec_find_decoder(CODEC_ID_H264);
- if (!codec) {
- return 0;
- }
- //allocate codec context
- //分配解码器内存
- c = avcodec_alloc_context();
- if(!c){
- return 0;
- }
- //open codec
- //3.打开解码器
- if (avcodec_open(c, codec) < 0) {
- return 0;
- }
- //allocate frame buffer
- //分配解码器用的帧缓冲
- picture = avcodec_alloc_frame();
- if(!picture){
- return 0;
- }
- rgbdatanew = (unsigned char *)malloc(sizeof(unsigned char)*(3 * width * height));
- while(!feof(inpf))
- {
- //4.获取下一个NAL的长度,并且将NAL放入Buf
- nalLen = getNextNal(inpf, Buf);
- //5.对改NAL解码,解码的YUV数据存在picture中
- consumed_bytes= avcodec_decode_video(c, picture, &got_picture, Buf, nalLen);
- if(consumed_bytes > 0)
- {
- //6.将picture中的YUV数据显示或者保存到文件
- p=0;
- for(i=0; i<c->height; i++)
- {
- memcpy(DisplayBuf+p,picture->data[0] + i * picture->linesize[0], c->width);
- p+=c->width;
- }
- for(i=0; i<c->height/2; i++)
- {
- memcpy(DisplayBuf+p,picture->data[1] + i * picture->linesize[1], c->width/2);
- p+=c->width/2;
- }
- for(i=0; i<c->height/2; i++)
- {
- memcpy(DisplayBuf+p,picture->data[2] + i * picture->linesize[2], c->width/2);
- p+=c->width/2;
- }
- //显示画面
- DisplayVideo(DisplayBuf);
- }
- }
- //7.关闭输入文件
- if(inpf)
- fclose(inpf);
- Decodereturn:
- //8.关闭解码器,释放解码器内存
- if(c) {
- avcodec_close(c);
- av_free(c);
- c = NULL;
- }
- //9.释放解码画面内存
- if(picture) {
- av_free(picture);
- picture = NULL;
- }
- //10.释放解码文件缓冲
- if(Buf)
- {
- free(Buf);
- Buf = NULL;
- }
- free(DisplayBuf);
- }
- 利用ffmpeg来进行视频解码的完整示例代码
- 利用ffmpeg来进行视频解码的完整示例代码(H.264)
- (转)利用ffmpeg来进行视频解码的完整示例代码(H.264)
- 利用ffmpeg来进行视频解码的完整示例代码(H.264)
- 利用ffmpeg来进行视频解码的完整示例代码(H.264)
- 利用ffmpeg来进行视频解码的完整示例代码(H.264)
- 利用ffmpeg来进行视频解码的完整示例代码(H.264)
- 利用ffmpeg来进行视频解码(H.264)
- 利用ffmpeg和opencv进行视频的解码播放
- 利用ffmpeg和opencv进行视频的解码播放
- 利用ffmpeg和opencv进行视频的解码播放
- 利用ffmpeg和opencv进行视频的解码播放
- 利用ffmpeg和opencv进行视频的解码播放
- 一段ffmpeg视频解码为YUV420P的示例代码
- 利用ffmpeg做视频解码的顺序
- 利用ffmpeg做视频解码的顺序
- 利用ffmpeg做视频解码的顺序
- 利用ffmpeg做视频解码的顺序
- 浅谈.NET中单引号、双引号区别
- Windows Movie Maker XP不能保存视频问题完全解决!
- 认识JVM--第一篇-对象分配&回收算法
- oracle之触发器学习笔记
- Image Process -- emboss, threshold/BlackWhite [Android]
- 利用ffmpeg来进行视频解码的完整示例代码
- java.lang.OutOfMemoryError: PermGen spac 异常
- C++ fstream文件流读写文件操作详解
- ffmpeg常用参数一览表
- 异常流控制
- Android http get/post传递参数
- 如何让一些安装软件等的disabled的按钮启用,
- 玩儿转ffmeg的7个技巧
- 是否将信息存储在云?