Cpper
C/C++高级工程师 Android高级软件工程师 IT集成工程师 音频工程师 熟悉c,c++,java,c#,py,js,asp等多种语言 程序猿
这几天一直在做引擎的视频播放问题
1.3版本的引擎采用的是vlc视频处理库
使用vlc库其实还可以 就是外挂的插件太多了对我这样的懒人来说又不大愿意动手去编译本来
引擎的视频本来是打算采用,ffmpeg
最后考虑引擎当前是基于opengl的那就采用ffmpeg吧(最少这个也可以跨平台达到引擎设计的一贯要求)

视频播放我感觉还是有点难度的
这涉及图形,音频多线程问题
所加的线程无非就是音频线程解码线程系统处理线程

需要说明的就是
手头有3个ffmpeg版本(比较╮(╯_╰)╭)
a.包含了老版本的image_convert,avcodec_decode_audio
b.有 avcodec_decode_audio2,avcodec_decode_audio3,
c.是最新的sdk;FFmpeg-full-SDK-3.2

简单描述下:
image_convert 大致上相当于:sws_scale
而avcodec_decode_audio2基本等于avcodec_decode_audio(注意是基本而不是绝对等于)
不过还有一个比较新的avcodec_decode_audio3

如果采用的是ffplay那种方式的话不会涉及到多线程渲染
对于盖莫引擎来说 当前基于opengl,那么在这里使用opengl多线程是十分必要的
因为要在主线程渲染,在视频解码线程build图片

另外对于avpicture_get_size,avpicture_fill这些函数需要选择合适的PIX_FMT_RGB
要不然会出现图形错乱

此外视频和音频同步也是很重要的,引擎这里采用的是同步到视频的方法

至于音频的处理问题当然是盖莫音频引擎了现成的啊.

最后说下涉及到得ffmpeg版本问题
关于avcodec_decode_audio2
如果旧的视频代码采用的是avcodec_decode_audio工作正常的话
如果替换为较新版本的avcodec_decode_audio2话 这里可能会出现内存错误的问题
我的解决方案就是使用最新的ffmpeg解决它



posted on 2010-03-25 21:31 ccsdu2009 阅读(2803) 评论(2)  编辑 收藏 引用 所属分类: Game引擎
Comments
  • # re: 盖莫引擎2.1.1-基于ffmpeg播放视频
    loki
    Posted @ 2011-03-29 20:26
    int len=avcodec_decode_audio2(aCodecCtx,(short *)inbuf,&data_size,packet.data,packet.size);

    len和data_size所返回的都是正确的,只有inbuf返回的是全0,无论解多少帧都是,初接触ffmpeg,不知道是什么原因,不知到您是否碰到过这种问题,谢谢了  回复  更多评论   
  • # re: 盖莫引擎2.1.1-基于ffmpeg播放视频
    fanneee
    Posted @ 2011-11-24 16:35
    aac加头后保存文件可以播放。
    AvPkt.data = pbInput;
    AvPkt.size = cbInput+7;
    outsize = AVCODEC_MAX_AUDIO_FRAME_SIZE*8; //cbOutput - ret;
    len = avcodec_decode_audio3(m_pCodecContext,(short *)(pbOutput), &outsize, &AvPkt);
    老报段错误,不知什么原因,望高手指点。  回复  更多评论   

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理