有经验的先驱们, 给条路走吧。 发了好几个贴了。 分数都没给低,本想在这里的问题问会了:除了csdn上的分之外,还想秉怀感激之情,赠上别的实质的东西的。奈何有点凄凉的冷。
各位先驱们,你们是怎么学习掌握视频编码开发的。指条明路吧?有什么书之类的。目前只要编码生成可播放视频文件就行了。好心人给个例子。ffmpeg或xvid都行。
讲一下这两三周走的路: 首先是把这些库在windows 下编译生成dll库。 这些都不算难。搭个mingw或cygwin环境就行。
首先讲讲ffmpeg的:
1. 问如何编码,有些这里的朋友说ffmpeg里面有例子,是的,不同版本的有apiexample.c或output_example.c,但这里面只有简单的mpeg1的编码事例。 其他的编码如mpeg4的编码上下文,需要的编码参数没找到设置的。
2. 阅读ffmpeg.c的源码来了解编码。 里的编码上下文AVCodeContext的参数的根据输入文件的编码参数赋值得到,当然有些是默认值,至少没有具体的参数区间可以知道。
3.ffmpeg编码视频文件封装, 很想用mkv的。OExpress大哥说,ffmpeg里有mkv的。我看了源码,也在ffmpeg.org里的文档里看了file codec部分的,就是没有。 mp4凑合着用吧也行。 但我编码上下文AVCodeCOntext都不能打开成功。里面的哪些参数要赋值,我都糊糊的。
x264,问了一下 API的顺序调用步骤 x264_param_default、x264_encode_open、.....,不打算使用x264了,编码时CPU占率太高。 使用x264.exe测试的。也是还没编码成功。 x264.c的代码都看了。 先循环编码侦,再循环编码延迟帧。我第一个编码就出现了异常,无解。想把代码写完整一点,然后发贴问问。想模仿x264.c源码写那段文件输入的内容时,发现编译的dll并不带视频文件输出的接口。用PEiD查看了,就不存在那些接口。想把那些代码改到VC下,发现使用的一些结构好像是linux下物有的。因为太紧,就再找找有没有简单的。
xvid,编译了xvid的库。 生成dll之后,一样没有视频文件生成的部分。查了mkv的资源,我也找到了http://www.matroska.org。发贴问,mkv的生成,两个朋友直接把这个网址丢给了我。好吧。 我就再仔细的看看。找到了libmatroska。里面是有vc6和vc7的,但不能直接编译。依赖了libembl库。 我也下下来了。想关联上,坑爹的是里面还少了几个源码文件,真服了。再跟贴问,没有下文件。
其实我很少上bbs发贴问的,大部分都自己找资源解决。这次实在无解了。 书籍也少。网上较完整的库使用资源也见不着。 难得发几个贴子问,各路大神都跟一句话就没了。
www.videolan.org里关联的社区一个和我差不多问题,人家咋就能有这样详尽的解答,虽然也是没有解决关键的output源码文件夹下的函数导出的问题:
http://doom10.org/index.php?topic=1956.0 因此学好英文很重要。
------解决方案--------------------------------------------------------
先请楼主谅解下,在下在你帖子里回答时就扔了个网址,由于没有深入接触过MKV,实在仅能提供此信息。
CSDN多媒体/流媒体开发这个版块其实也算荒凉,问多答少。
个人认为,除非日常工作接触以及兴趣所致,多媒体方向的有些东西实在无暇顾及,涉及到的东西太广泛了。
我一般查找资料,是从问题入手,例如楼主所提到的问题涉及关键字MKV,我的第一反应就是文件容器格式,一般在官网上会有比较多的信息供参考,除了协议文档是必需品之外,开源的一些项目代码也是不错的学习用例。
此外,还需参考自己需求的应用场合,如果是上层应用,无需关心编码细节,那么学习如何使用编码器,设置编码参数即可。如果要深入研究编码细节(例如图像/音频编码算法、具体的性能等等),那么看一些开源编码器的代码是个很好的途径。
另外,在使用编码器的时候,由于方法多样,因此选择适合自己需求的比较重要,例如windows下,走DirectShow框架的话,那么查找MKV关联的Filter(.ax)。如果是自己公司封装的一些框架,直接对编码器进行调用,那么就需要了解所使用编码器的库方法及调用规则了。
总之,具体问题具体分析,这方面的积累也是循序渐进了,呵呵...
以上个人拙见,还望其他高手多多交流~