去MC实习我收获了什么_盗版月光、星光零零星星星星点点_百度空间

被老板派去MC断断续续实习了两个月,那么我收获了什么?

解决问题的方法,毫无疑问!

公司给我的任务是:目前开发板上能通过摄像头录下视频和音频,它们的格式分别是mpeg4和g711,而且它们是分开存放的。要形成最终产品,公司希望这块板能够将音频和视频合成avi文件,并能够解码播放。

这个问题不大,可是它是一个很完整,很明确的问题。我{zd0}的困难是:我没搞过嵌入式开发,也没搞过多媒体开发。嵌入式开发包括linux环境、开发平台等问题,这些都是我没怎么接触的;多媒体涉及到音视频处理方面的知识,这方面我{jd1}算是入门级。

花了三天时间搭建linux平台,装的是redhat linux,感觉:这样下去linux是不可能作为个人pc的操作系统的。

怎样下手呢?

好吧,先看看这个问题在windows下是怎样解决的。查了一下,看来在windows下相当简单,用directshow开发工具,只需要调用库函数直接搞定。呵呵,仿照windows,那么linux下会不会有类似的开发工具呢?太好了,结论是肯定的,Gstreamer,相当于windows下的directShow!看来找到解决方法了,我们用的板出了也有几年了,应该很多人用了,看看大家是怎么解决的吧。去到板子的生产商“达芬奇”的bbs,果然有很多人问这个问题,最终得到一个很失望的结果:我们这块板不支持Gstreamer,555555555555……

怎么来做呢?有个同事曾经手动将g711音频转为wav,看了他的代码,我收到启发:自己去手动实现。手动实现就是将视频和音频一帧帧一段段地以二进制写进avi文件。这该是一个多么艰苦的过程啊?——我对mpeg4编码方式、对9711格式、对avi一无所知啊。这个没难倒我,分别找到这几个格式的说明文档——都是全英的,又上网找了一个分析mpeg4编码的软件(它能够将整个文件分成一帧一帧);受它的启发,我又根据说明文档写了一个分析avi格式的程序。这是一个很艰苦的过程,为了搞明白avi格式头每个字节的含义,我用uedit一个字节一个字节地分析。就这样小米假步枪地搞了一个星期,总算将这几种格式有了大致的理解。其实mpeg4是很简答的一个码流格式,除了一段十几字节的文件头,接下来的每一帧都是以00 00 01 b6开头的;g711更简单,xx就是音频的数据,没附加任何信息;avi则是一种封装格式,一段很长的avi头(真的好长,我用的一个星期基本都是研究它),还好,它的视频帧直接在mpeg4的视频帧前加一个帧头,音频则是按一定的频率插进去,当然,还有个索引用于快进退……反正就根据这些分析,我又用了一个星期在windows下合成avi文件的程序——avi文件确实能播放,这个成功了还是很兴奋的。

就在这时,我突然想到linux下面的软件一般是开源的,而且linux软件也是很开放的,可以根据自己的需要添加模块,那么能不能找个开源的软件移植到板上呢?果然让我找到一个开源的软件,ffmpeg,它可以合成多种格式的音视频、可以编码解码,快进快退,反正一班多媒体软件需要的功能它都有了——听说暴风影音就抄了ffmpeg的代码。说干就干,用了{yt}将ffmpeg软件装到板上。按照我的分析,ffmpeg包含了太多的功能,这样必然占有嵌入式板本来不多的资源。事实证明结果并没我想象的严重,一段45s的音视频用了60s合成,这个速度当然是不可接受的,可是起码已经能够做一个demo出来了。

是继续改进手动合成的还是精简ffmpeg呢?手动合成的那个程序,说实话,我也没什么把握,毕竟avi实在是有点复杂。ffmpeg确实是经得起考验的开源代码,不过最终做出的结果在效率上能不能符合要求呢?我{zh1}决定先尝试ffmpeg。我分析了ffmpeg的代码。最终抽取了一个c文件,就是这个文件合成avi的,它的输入是一帧帧的视频和一段段的音频数据,输出是avi文件流——太符合我们的要求了。用了一个星期,将这段代码xx跟我们板上的编码程序对上口,边录边合成,成功了,xx不会卡!!!!!

{zh1},手动合成的就停留在windows下用C语言合成,产品上用的是ffmpeg。

我是不是走了弯路?是的,花了两个星期去搞手动合成。

回顾一下我几次关键决定:

1)查阅资料,用跟directshow对应的Gstreamer;后来发现板不支持,放弃;

2)受同事启发,手动合成avi,已经在windows下有初级成果;

3)考虑到linux的开源性,找到ffmpeg移植到板上,不过效率不满足要求;

4)继续用手动还是精简ffmpeg呢?{zh1}精简ffmpeg成功,最初的产品xx满足要求。

看看以上过程,每一步都会有一个契机,{dy}次是从相似开发中找灵感;第二次是从同事那得到启发;第三次是考虑环境特性找到了开源的ffmpeg。{zh1}的成功最关键的{jd1}是从找到ffmpeg开始,我开始为什么没想到呢?原因在于我自己一开始想得不够多,我发现上面的每一步决定都有点碰巧成分。磨刀不误砍柴工啊!

收获:多思多想,多点交流,要敢于跳出圈子!



郑重声明:资讯 【去MC实习我收获了什么_盗版月光、星光零零星星星星点点_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——