【ffmpeg for wince】音视频编解码多平台移植(for window/wince)

from: http://www.cnblogs.com/windwithlife/archive/2009/05/31/1492728.html

终于完成了了第二个Client side原型(for Wince),其中花掉我最多时间的就是ffmpeg的对WINCE的移植。其中有大半时间是由于网上的一些不完整及不正确信息所误导,但是没有这些零星的信息,我可能花费更多的时间。现在我把自己的移植过程分享给大家,我尽量做到事无巨细,也好让大家少走弯路,省去我们程序员们的时间。那可是大把的银子与信心浪费。呵呵,书归正传。

     一,第一个想法,仍像从前移植平台代码一样,先找到这种跨平台代码的自己的特定平台的make文件或工程:

可惜没有发现ffmpeg 有for windows 及 for wince的make 及工程。再细读 ffmpeg的官方网站,让人仰天大笑,其中说到,由于VC/Visual studio 开发环境的编译器,对C99支持不好,而ffmpeg又是follow这些C语言规范写的,因此,不支持VC/VS的编译器。这比一些跨平台项目说windows OS is silly OS, not popular POSIX 从而不支持的说法更有趣。其实,从IT行业而言,这些理由都不是那么的合逻辑,也不够严谨。但代码是别人写的。我们又能如何呢?呵呵。

    二,曲径通幽,既然ffmpeg不支持windows的编译器,那我们还有一个曲折的办法,它不是支持POSIX嘛 ,也就是支持linux/unix嘛 ,那我们就有了我们的办法,我们的windows平台上的linux编译器(算一种交叉编译吧,呵呵)于是大家想到了Cyxwin及 Mingw+Msys,其它,Cyxwin中编译出windows的平台上可用的库,还是调用了Mingw的编译器,于是我们就直接研究Mingw +Msys吧,但是这个东东有一个致命的弱点,就是要安装,分别要更新一堆组件,更新到什么版本呢,天知道,都用最新的吧。去相关的网站去下载他们(http://)不过Mingw的 sourceforge 网站真不是人去的,里面乱放,而且目录没有一个明确的索引,网站又慢,我是花了一天时间才找齐,后来发现ffmpeg有一个说明网页,可以明确下载。请参看(http://ffmpeg.arrozcru.org/wiki/index.php?title=MSys_MinGW)其中下载地址我再列一下,以方便大家:

Mingw: http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=240780&release_id=595197

Mingw插件更新:

          http://prdownloads.sourceforge.net/mingw/binutils-2.18.50-20080109-2.tar.gz?download

          http://prdownloads.sourceforge.net/mingw/mingwrt-3.15.1-mingw32-dll.tar.gz?download

          http://prdownloads.sourceforge.net/mingw

          http://prdownloads.sourceforge.net/mingw/w32api-3.13-mingw32-dev.tar.gz?download

最稳定的gcc编译器for mingw插件:

         http://prdownloads.sourceforge.net/mingw/gcc-core-3.4.5-20060117-1.tar.gz?download

         http://prdownloads.sourceforge.net/mingw/gcc-g++-3.4.5-20060117-1.tar.gz?download

至于安装过程,网上搜一下,不会有问题can't miss it

       MSys:http://prdownloads.sourceforge.net/mingw/MSYS-1.0.11-2004.04.30-1.exe?download

相关插件更新:

       http://prdownloads.sourceforge.net/mingw/MSYS-1.0.11-20080821-dll.tar.gz?download

       http://prdownloads.sourceforge.net/mingw/bash-3.1-MSYS-1.0.11-snapshot.tar.bz2?download

       http://prdownloads.sourceforge.net/mingw/coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2?download

       http://prdownloads.sourceforge.net/mingw/make-3.81-MSYS-1.0.11-2.tar.bz2

       至一Msys的安装及与Mingw整合在一起,网上查一下,can't miss it,

三 , 开始for windows的ffmpeg编译。这个ffmpeg论坛上倒有相关的指导。请参照:

http://ffmpeg.arrozcru.org/wiki/index.php?title=Static

这里有一个静态库的编译。按向导完成编译成静态lib库,可以址接进行编译链接到 windows项目中(only for windows平台,not for wince),好放到一个新的window项目中,编译成功,链接,一堆的库找不到,哈哈,仰天大笑,用工具一查相关引用,原来这些找不到函数,还在mingw的库中,也就是说要在项目中用ffmpeg的静态库,你还要搭上一堆mingw的库,就像现在市场上的搭配销售。再笑,我先找个地方睡半天,缓解我的想扁人的冲动。

睡醒之后,换种用法,我编动态库,这下你不会不把我的所有函数给我加到我的DLL里吧,再换了一些ffmpeg的./configure参数。搞定。生成了动态库,及lib.用到项目里,编译通过。不过,这只是万里长征第一步,我还要最痛苦的for wince的库。

四,for wince 的ffmpeg:

      从linux的代码用mingw编成 for windows那是人家mingw的任务,我们也只绕了一道弯,for wince的mingw不存在呀,怎么办,忽然想到linux上的交叉编译,人家可以在linux用定制的gcc交叉编译器弄出for wince的库,那我们何不在Mingw上搞出for wince的库,一查,网上果然仅有的解决方案,也就是交叉编译成for wince 的ffmpeg,所用交叉编译器,大家可以看仔细了,

网上有绝大多数的相关贴子给的交叉编译器是不正确的(下载的地址不正确)真搞不懂网上一堆人转载别人的文章,也不去验证一下,转载干嘛?,我就是由于用了网上这些人转载地址去下载编不正确的编译器,浪费了3天的时间,无功而返。记住,下载的交叉编译器是 cegccmingw 下载地址是:()

进行编译。编译最新的库,会有一些汇编通不过。自己对汇编不熟悉,不过要是在linux上交叉编译应该没问题,有兴趣的话,可以自己试那个环境,那样的话,用的交叉编译器就应该是cegcc.

没办法,为了节省我的时间,我可是要在两周内完成三个平台的原型开发的。就拿了2007年的ffmpeg来编。其中也改了不少东西才编译能通过,首先,./configure 之后,在生成的config.mak中,要修改“SLIB_EXTRA_CMD=-lib /machine:i386 /def:$(@:.dll=.def)”为“SLIB_EXTRA_CMD=-lib /machine:arm /def:$(@:.dll=.def)”,及 “EXTRALIBS= -lm”改为“EXTRALIBS= -lm -lws2.lib”,其中编译过程中采取了perror禁用,有seek函数禁用与替换(由于没有用zlib,linux平台估计会没有问题).细节,可以有时间再写,有兴趣的话,可以加我MSN。

编译成功后。用在C++环境中。测试普通函数通过,不过在视频编换时,效率不高。

换了一下网上的别人编译的ffmpeg库,(网上有一个下载,不过此SDK在wince上用时,用在C++项目中有问题。头文件中有重复定义,解决办法是放在.c文件中,由Cpp文件来调用,这样可以规避这些问题,但这样就存在了一些全局变量.这样的头文件是不能用在Sybmian平台的。

另外一种思路就是不用ffmpeg.用Xvid解 mpeg4(测试下来效率好像要高于ffmpeg,毕竟是专门for mpeg4),用xh264解 H264,拿过他们的源代码一看,还是人家这跨平台,现成的for windows平台的工程make文件,这才是真正的跨平台。当然想要更多功能,ffmpeg地位还是无人能及。

如果有人对编解码做简单的跨平台移植有兴趣,可以加我MSN一起学习探计,相互学习,搞技术嘛,大家一起共享信息,会省掉多少人的多少个不眠之夜,我就是因为一些信息的不准确,害得我移了一周,每天可都工作到凌晨2点多。

好了,今天就写到这里,至于Symbian平台的移植,改天再写。

大家正在看
  • ASP.NET中如何实现FORM认证登录
  • Ext封装(二)
  • sqlplus登录命令
  • 谈谈UNIX如何管理磁盘
  • 志大才疏与工程性
  • 移动设备管理(MDM)与OMA(OTA)DM协议向导(三)——AAA服务器
  • JTree操作API
  • 生活定律
  • 【ffmpeg for wince】音视频编解码多...
  • junit4 单元测试
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455035.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python实现猴子爬山算法

猴子爬山一只顽猴在一座有N级台阶的小山上爬山跳跃。上山时需从山脚至山顶往上跳N级台阶&#xff0c;一步可跳1级&#xff0c;或跳3级&#xff0c;求上山有多少种不同的跳法&#xff1f; &#xff08;N<50&#xff09; 问题分析: 每一次都可以选择1,2,3有3种跳法 方法1 直…

指针版 单链表复习

#include <bits/stdc.h> #define P pair<int,int> using namespace std;typedef long long LL;typedef struct LNode{int data;struct LNode *nxt; }LNode,*LinkList;bool Linklist_init(LinkList &root){root new LNode; ///分配头结点&#xff0c;指针域为空…

手写springboot_Spring Boot 入门教程 | 图文讲解

目录一、Spring Boot 是什么二、为什么要使用 Spring Boot三、快速入门3.1 创建 Spring Boot 项目3.2 项目结构3.3 引入 Web 依赖3.4 编写第一个接口3.5 启动程序&#xff0c;验证效果四、总结五、GitHub 示例代码一、Spring Boot 是什么以下截图自 Spring Boot 官方文档&#…

lunix 安装python3

Linux下默认系统自带python2.6的版本&#xff0c;这个版本被系统很多程序所依赖&#xff0c;所以不建议删除&#xff0c;如果使用最新的Python3那么我们知道编译安装源码包和系统默认包之间是没有任何影响的&#xff0c;所以可以安装python3和python2共存 首先去python官网下载…

手机音视频应用开发(专注于Symbian、iPhone、Android等跨平台音视频应用开发方案)

一款好的手机应用&#xff0c; 能让用户在第一分钟就爱上他&#xff0c; 一款烂的手机应用&#xff0c; 能让用户在第一分钟就要卸载它。 好的应用必须的稳定、快速。市场日益激励&#xff0c;一个项目的周期是一个漫长的过程&#xff0c;投入的时间、精力、费用。一笔庞大的预…

Colemak布局的实现 Window+Linux+Android

Colemak布局的实现 WindowLinuxAndroid title: ‘Colemak布局的实现’ subtitle: ‘一个极客的键盘布局’ tags: entertainment solution 前言 大部分同学使用的键盘布局都是QWERTY布局 而科学研究表明,可能这个设计不是最高效率的布局,甚至的有意为了降低打字的效率而研究的…

机器学习之朴素贝叶斯法

转载请注明出处&#xff1a;http://www.cnblogs.com/Peyton-Li/ 朴素贝叶斯法是机器学习模型中一个比较简单的模型&#xff0c;实现简单&#xff0c;比较常用。 是定义在输入空间上的随机向量&#xff0c;是定义在输出空间上的随机变量。是和的联合概率分布。训练数据集由独立同…

如何让梯形变成平行四边形_开放的课堂 创新的天地——平行四边形的面积教学片段与反思...

一、 课题的确定学生在三年级学过长方形、正方形的面积计算&#xff0c;经历过从数方格的办法得出面积计算公式的过程。因此&#xff0c;学生对于面积计算公式的推导有一定的经验和知识基础。基于上述考虑&#xff0c;我想完全放手让学生去研究如何计算平行四边形的面积。这对学…

bzoj1670【Usaco2006 Oct】Building the Moat 护城河的挖掘

1670: [Usaco2006 Oct]Building the Moat护城河的挖掘 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 387 Solved: 288[Submit][Status][Discuss]Description 为了防止口渴的食蚁兽进入他的农场&#xff0c;Farmer John决定在他的农场周围挖一条护城河。农场里一共同拥有N(8…

音视频编解码的一些源代码

音视频编解码的一些源代码 &#xff08;转&#xff09;资料名称&#xff1a;音视频编解码的一些源代码 资料成文时间&#xff1a;不详 语言&#xff1a;英文 页数&#xff1a;很多 何人所著&#xff08;来源&#xff09;&#xff1a; 文件格式&#xff1a;原代码 开发工具:vc 说…

Vue之组件之间的数据传递

Vue的组件作用域都是孤立的&#xff0c;不允许在子组件的模板内直接引用父组件的数据&#xff0c;必须使用特定的方法才能实现组件之间的数据传递。 下列为在vue-cli创建项目中的操作 一父组件向子组件传递数据 在Vue中&#xff0c;用props向子组件传递数据。 子组件部分&#…

偶然发现一个大佬写的 React 脚手架,叫Moderate, 用起来很方便

发现一个大佬写的 React 脚手架&#xff0c;叫Moderate, 用起来很方便 Moderate&#xff0c;意思为适中的&#xff0c;适度的&#xff0c;用这个作为代号&#xff0c;主要取决于他的本名“中用”&#xff0c;其一以贯之的想法就是中庸&#xff0c;秉承着以人为本的态度&#xf…

案例 自动办公_1300张办公系列前台参考图,请您查收!

设计情报局室内设计师的灵感聚集地关注一个有格调的空间必定有一处高颜值的前台漂亮的前台很重要...是空间给人的第一印象一个独一无二的前台设计还可以提升整个空间的气质与逼格连个漂亮的前台都没有作为颜控界扛把子的设计师们还怎么混&#xff1f;SO今天小编给大家带来一份《…

iframe里面的元素触发父窗口元素事件的jquery代码 转

例如父窗口定义了一个事件。 top: $(dom1).bind(topEvent, function(){}); 那么iframe里面的元素怎样触发父窗口dom1的事件呢&#xff1f;这样吗&#xff1f; $(dom1, parent.document).trigger(topEvent); 看似正确&#xff0c;实则误导人。 因为父窗口的jquery对象与iframe里…

mplayer 所支持的音视频编解码

这里我把mplayer 所支持的音视频编解码都罗列出来&#xff0c;方便大家查阅&#xff1b;-----------------------------------------------------------------------------------------------Video codecs:Working video codecscodec namefourcccodecfileoutcommentsFFmpeg Zip…

使用ifconfig取出网卡eth0的ip地址

方法1&#xff1a;sed命令12[rootoldboyedu ~]# ifconfig eth0 |sed -n 2p |seds#^.*addr:##g|sed s# B.*$##g10.0.0.50方法2&#xff1a;cut12[rootoldboyedu ~]# ifconfig eth0|grep inetaddr|cut -d ":" -f2|cut -d " " -f110.0.0.50方法3&#xff1a;…

目标检测_目标检测 | Anchor free的目标检测进阶版本

今天说的是《Soft Anchor-Point Object Detection》&#xff0c;其也是最近关于anchor free的目标检测的论文&#xff0c;作者来自于CMU&#xff0c;一作同样也是FSAF(2019 CVPR)的作者。该论文的出发点还是在样本选择和FPN特征选择层面。背景Anchor free是目标检测领域的一个研…

Colly实现豆瓣电影Top250爬取

使用 Colly 实现 豆瓣电影Top250爬取 package mainimport ("encoding/csv""github.com/PuerkitoBio/goquery""github.com/gocolly/colly""log""os""strings""time" )type Movie struct {idx string…

homework1

一.什么是RUP?二.什么是XP?三.什么是敏捷过程&#xff1f; 一。什么是RUP?RUP是一种完整而且完美的软件过程 1。最佳实践 &#xff08;1&#xff09;迭代式开发 &#xff08;2&#xff09;管理需求 &#xff08;3&#xff09;使用基于构件软件的体系结构 &#xff08;4&…

编程:休息片刻的好处

原文作者 Axel Rauschmayer 是一位居住在德国慕尼黑的自由软件工程师。他在这篇博文列举了在编程期间休息片刻的一些好处。 你会更精明而不是更卖力地工作。我曾经为了一个功能的实现而卖力工作过。每天12小时&#xff0c;整整工作了两个星期。我付出了很多努力。那两个星期之…