2009年7月28日
为了学习也是因为兴趣.我这个是一个社区游戏。。因为公司迟迟没有美工没做到位。。所以图片资源来自网络。代码自己所写。暂时只能让大家看看截图。。 
 
 




 
posted @ 2009-07-28 08:49 Educk 阅读(195) 评论(1) 编辑
  2009年6月21日

 下面是我写下的 完全是凭空想象的。是我想的一点子逗一下群里90后的美女们。

开篇:

我没酒,连说话都没精神
女朋友不许我喝酒,有一次我发脾气给了她一耳光
主要是因为她说了一句"你在这样我就去找别的汉子"
我喝了口酒,憋了一下,然后朝她脸上就是一记耳光,可能是下手狠了点,她嘴角边有点血丝,当时我心里也震啦一下,完了我下手太重老,我想她这一辈子都不会原谅我了,第二天她会他娘家啦。我打电话她也不接,我没择了,只好亲自去她娘家,当面承认错误!
说那话让我气的~! 也太丢人了,当时心里就想我丢不起这个脸
不加思想的就手一挥
过了两天我去他家的时候,,到她娘家门口的时候,她爸妈一脸黑,随后他大哥和二弟出来那眼睛,很不友善的盯着我,我当时正准备去跟她爸妈讲明道歉,这时我低着头要走过去,突然他二弟拿个砖头朝我头顶砸过来,我及时挡住,砖头碎了,段一边仍然砸到我的头上,流出血了。后来我什么也没说回家了。。
在家里我打电话给她仍然不接,心里想,这女人不在说我老婆老,也没安慰过我,这口气真的咽不下去了,但还是没那么激动,过了天,我听说他老爸吗正在给她介绍同村的对象。她家二弟在别人面前说我被他吓唬的连声都不敢出了。当天晚上我越了个朋友在路边夜宵摊上喝闷酒,朋友听了一个劲的说把他们叫上把那小子废了(她二弟),我没有这样做了,  想了想,第二天决定在去她家讲明白,刚在他家门口不远处 ,她二弟就飞舞着砖头朝我砸来,我躲开了,随后他大哥拿着铁棍朝我奔来。我赶紧往回走,掏出手机打给了朋友个短信,不一会有两辆面包车过来了,出来是我朋友叫来的人,还没听我说,直接往他家门口奔去,把她大哥和二弟按在地上狠狠的给几脚。这时也不管那么多了,反正老婆没啦,走过去给他二弟狠狠的几二光,当时我看见嘴角出血了,我才看她出来了,对我说我跟你回去还不行吗,我只说了一句“算啦现在没那个必要了“。你过你的独木桥我走我的阳关道。转身招呼朋友走,随后去一火锅店喝酒、吹水......

以上我边聊天边想写下来的。。。。。 HOHO 也当是工作烦了发泄一下。。。

posted @ 2009-06-21 00:40 Educk 阅读(142) 评论(1) 编辑
  2009年6月9日

  这个是我去年初的个小型程序,那是我看见35kf很火。这个带表情,还有.net版本的我不知道放到哪了,.net版本的带输入感知。顺手写下了这个。我们公司网站不用了这个了。拿出来给大家一起参考,交流很乐意大家一起拍砖 js聊天程序

发现blog我老上传不成功,今天特意把他放到网盘给大家共享

posted @ 2009-06-09 06:44 Educk 阅读(274) 评论(0) 编辑

我人比较瘦,大概是因为自己比较瘦所以对周围的事物都比较敏感和在意,前两天和以前的朋友以前聊天,我自认为是我比较好的朋友,曾今给我带来很多想法和帮助,我和他以前在一个小电脑学校工作过,最近我和他聊天的时候却给我一个决然不同的感觉,好像是爱理不理的样子。为有点纳闷了。我朋友本来就比较少,眼看这样下去,我的一原来要好的朋友没了。我该怎么办呢?

posted @ 2009-06-09 06:30 Educk 阅读(50) 评论(1) 编辑
  2009年5月7日

前段时间在园子提问关于45度 没有找到好的解决方法 

下面是自己写的A*,基于as3 3.0实现的 代码如有不妥和bug之处 大家请指正

贡献源代码这个是在我之前做一个flash的虚拟城市用到的

mapDataInfo 是地图的数据信息

没有经过优化    这两天有点浮躁天气热 了

/*
=================================================================================================
 E_the code
2009/02/28 A* Astar Road 斜视45度
=================================================================================================
*/
package gamesrc.com{
 import gamesrc.Model.mapDataInfo;
 
 //import flash.utils.ByteArray;
 //import flash.utils.getTimer;
 public class SearchRoad {
  private var endx:uint;
  private var endy:uint;
  private var openA:Array;
  private var closeA:Array;
  private var isfindpath:Boolean=false;
  private var findA:Array;
  //横或竖向移动一格的路径评分
  private const COST_STRAIGHT : int = 10;
  //斜向移动一格的路径评分
  private const COST_DIAGONAL : int = 14;
  private static var _getInstance:SearchRoad;
  private var maxStep:int=1000;
  private var mstep:int=0;
  private var isuseOpenlist:Boolean;
  //起点
  //private var startX:uint;
  //private var startY:uint;
  public function SearchRoad()
  {
  
  }
  public function searchRoads(sx:uint,sy:uint,endx:uint,endy:uint):Array
  {
   isfindpath=false;
   var empArray:Array=null;
   isuseOpenlist=false;
   openA=new Array();
   closeA=new Array();
   mstep=0;
   findA=mapDataInfo.mapArray;
   this.endx=endx;
   this.endy=endy;
   //this.startX=sx;
   //this.startY=sy;
   openA.push([sx,sy,sx,sy,0,0]);//[sx,sy,px,py,g,f]
   seachRoad();
   if(isfindpath){
    return getpath();
   }
   //trace(findA[endy][endx])
   openlistHF();
   iscloseHF();
   return empArray;
  }
  private function iscloseHF():void
  {
   for each(var sA:Array in closeA)
   {
    findA[sA[1]][sA[0]]=0;
   }
  }
  private function getpath():Array
  {
   var py:int=0;
   var px:int=0;
   var len:int=this.closeA.length-1;
   var pathArray:Array=new Array();
   //trace(this.closeA.length)
   for(var pt:int=len;pt>=0;pt--)
   {
    //trace(this.closeA[pt])
    if(pt==len)
    {
     px=this.closeA[pt][2];
     py=this.closeA[pt][3];
     pathArray.push([closeA[pt][0],closeA[pt][1]]);
    }
    else if(closeA[pt][1]==py&&closeA[pt][0]==px)
    {
     px=this.closeA[pt][2];
     py=this.closeA[pt][3];
     pathArray.push([closeA[pt][0],closeA[pt][1]]);
    }
    findA[closeA[pt][1]][closeA[pt][0]]=0;
   }
   openlistHF();
   return pathArray.reverse();
  }
  //恢复开启列表的元素
  private function openlistHF():void
  {
  
   for each(var sA:Array in openA)
   {
    findA[sA[1]][sA[0]]=0;
   }
  }
  public function seachRoad():void
  {
   var tempOA:Array;
   while(openA.length>0&& !isfindpath)
   {
    if(++mstep>=maxStep)break;
    tempOA=openA[0]//.splice(getminFopenlist(),1)[0];
    //trace(tempOA);
    //trace(tempOA.length);
    putInclose(tempOA[0],tempOA[1],tempOA[2],tempOA[3]);
    if(tempOA[0]==endx&&tempOA[1]==endy)
    {
     isfindpath=true;
     break;
    }
    //this.getground(tempOA[0],tempOA[1],tempOA[4]);
    get45ground(tempOA[0],tempOA[1],tempOA[4]);
   }
  }
  //寻找f最小的
  private function getminFopenlist():int
  {
   var min:uint=0;
   for(var isf:int=0;isf<this.openA.length;isf++)
   {
    if(this.getScore(min+1)>this.getScore(isf+1))
     min=isf;
   }
   return min;
  }
  //加入到关闭列表
  private function putInclose(nx:int,ny:int,px:int,py:int):void
  {
   closeA.push([nx,ny,px,py])
   findA[ny][nx]=1;
   //trace("查看openA列表是否被删除:"+openA)
   if(openA.length<2)
   {
    if(isuseOpenlist)openlistHF()
    openA=[];
    return;
   }
   openA[0]=openA.pop();
   shortBackoutNode();
  }
  //加入到开启列表
  private function putInopenlist(nx:int,ny:int,px:int,py:int,g:int,f:int):void
  {
   isuseOpenlist=true;
   openA.push([nx,ny,px,py,g,f]);
   shortopenlist(openA.length);
  }
  //获取四周的节点
  private function getground(sx:uint,sy:uint,g:uint):void
  {
   //var d:int=this.openA.length;
  
   var Canup:Boolean=isNodeCango(sx,sy-1,sx,sy,g+COST_STRAIGHT);
   if(isfindpath)return;
   var Canright:Boolean=isNodeCango(sx+1,sy,sx,sy,g+COST_STRAIGHT);
   if(isfindpath)return;
   var Canlefth:Boolean=isNodeCango(sx-1,sy,sx,sy,g+COST_STRAIGHT);
   if(isfindpath)return;
   var Candown:Boolean=isNodeCango(sx,sy+1,sx,sy,g+COST_STRAIGHT);
   if(isfindpath)return;
   //trace("Canup:"+Canup+",Canright:"+Canright+",Canlefth:"+Canlefth+",Candown:"+Candown)
   //右上
   if(Canup&&Canright&&!isfindpath)isNodeCango(sx+1,sy-1,sx,sy,g+COST_DIAGONAL);
   //右下
   if(Canright&&Candown&&!isfindpath)isNodeCango(sx+1,sy+1,sx,sy,g+COST_DIAGONAL);
   //左上
   if(Canup&&Canlefth&&!isfindpath)isNodeCango(sx-1,sy-1,sx,sy,g+COST_DIAGONAL);
   //左下
   if(Candown&&Canlefth&&!isfindpath)isNodeCango(sx-1,sy+1,sx,sy,g+COST_DIAGONAL);
  
   /*if(d==this.openA.length)
   {
    trace("没有增加一个元素nx:"+sx+"ny:"+sy);
    isNodeCango2(sx,sy-1,sx,sy,g+COST_STRAIGHT);
    isNodeCango2(sx+1,sy,sx,sy,g+COST_STRAIGHT)
    isNodeCango2(sx-1,sy,sx,sy,g+COST_STRAIGHT)
    isNodeCango2(sx,sy+1,sx,sy,g+COST_STRAIGHT)
    isNodeCango2(sx+1,sy-1,sx,sy,g+COST_DIAGONAL);
   //右下
   if(Canright&&Candown&&!isfindpath)
    isNodeCango2(sx+1,sy+1,sx,sy,g+COST_DIAGONAL);
   //左上
   if(Canup&&Canlefth&&!isfindpath)
    isNodeCango2(sx-1,sy-1,sx,sy,g+COST_DIAGONAL)
   //左下
   if(Candown&&Canlefth&&!isfindpath)
    isNodeCango2(sx-1,sy+1,sx,sy,g+COST_DIAGONAL)
   }*/
  }
  private function isNodeCango2(nx:uint,ny:uint,px:uint,py:uint,g:uint):void
 
  {
  
   var tempOpenIndex:uint=0;
   var hvag:uint=0;
   if(nx<0||nx>=mapDataInfo.MAP_X||ny<0||ny>=mapDataInfo.MAP_Y)
   {
    trace("超过数组大小了:nx="+nx+",ny="+ny)
   }
   else
    trace("是否为障碍物:"+findA[ny][nx]);
  
  }
  private function isNodeCango(nx:uint,ny:uint,px:uint,py:uint,g:uint):Boolean
  {
  
   var tempOpenIndex:uint=0;
   var hvag:uint=0;
   if(nx<0||nx>=mapDataInfo.MAP_X||ny<0||ny>=mapDataInfo.MAP_Y)
   {
    //trace("超过数组大小了:nx="+nx+",ny="+ny)
    return false;
   }
   if(findA[ny][nx]==1)return false;
   if(nx==endx&&ny==endy)
   {
    closeA.push([nx,ny,px,py]);
    isfindpath=true;
    return false;
   }
   if(findA[ny][nx]>1)
   {
    if(findA[ny][nx]>g)
    {
     tempOpenIndex=getopenindex(nx,ny);
     hvag=setH(nx,ny);
     findA[ny][nx]=g;
     openA[tempOpenIndex]=[nx,ny,px,py,g,g+hvag];
     shortopenlist(tempOpenIndex);
    }
    return true;
   }
   hvag=setH(nx,ny);
   findA[ny][nx]=g;
   putInopenlist(nx,ny,px,py,g,g+hvag);
   return true;
  }
  //获取最小的f开启列表路径
  private function getopenindex(x:uint,y:uint):uint
  {
   for(var sj:uint=0;sj<openA.length;sj++)
   {
    if(x==openA[sj][0]&&y==openA[sj][1])return sj;
   }
   return undefined;
  }
  //开启列表排序
  private function shortopenlist(indexs:int):void
  {
   var father:int;
   while(indexs>1)
   {
    father=Math.floor(indexs/2);
    //如果该节点的F值小于父节点的F值则和父节点交换
    if(this.getScore(indexs)<this.getScore(father))
     indexs=Swap(father,indexs);
    else
     break
   }
  }
  //开启列表取出后进行排序
  private function shortBackoutNode():void
  {
   var checkIndex:int=1;
   var temp:int;
   while(true)
   {
    temp=checkIndex
    if(checkIndex*2<=openA.length)
    {
     if(getScore(checkIndex)>getScore(2*temp))
      checkIndex=2*temp;
     if(temp*2+1<=openA.length)
     {
      if(getScore(checkIndex)>this.getScore(temp*2+1))
      {
       checkIndex=2*temp+1;
      }
     }
    }
    if(temp==checkIndex)
     break;
    else
    {
     Swap(checkIndex,temp);
    }
   }
  }
  //获取openlist f值
  private function getScore(p_index:int):int
  {
   //trace(this.openA[0]);
   return openA[p_index-1][5];
  }
  //交换节点
  private function Swap(a:uint,b:uint):uint
  {
   var last:Array=openA[a-1];
   openA[a-1]=openA[b-1];
   openA[b-1]=last;
   return a;
  }
  //路径估算评分
  private function setH(nx:uint,ny:uint):uint
  {
   return this.set45H(nx,ny);
   //return 10 * (Math.abs(endx - nx) + Math.abs(endy - ny))
  }
  public static function getInstance():SearchRoad
  {
   if(!_getInstance)
   {
    _getInstance=new SearchRoad();
   }
   return _getInstance;
  }
  //45度的ground
  private function get45ground(sx:uint,sy:uint,g:uint):void
  {
   var temT:Boolean=Boolean(sy&1);
   var Canup:Boolean=temT?isNodeCango(sx+1,sy-1,sx,sy,g+COST_STRAIGHT):isNodeCango(sx,sy-1,sx,sy,g+COST_STRAIGHT);
   if(isfindpath)return;
   var Canright:Boolean=temT?isNodeCango(sx+1,sy+1,sx,sy,g+COST_STRAIGHT):isNodeCango(sx,sy+1,sx,sy,g+COST_STRAIGHT);
   if(isfindpath)return;
   var Canlefth:Boolean=temT?isNodeCango(sx,sy-1,sx,sy,g+COST_STRAIGHT):isNodeCango(sx-1,sy-1,sx,sy,g+COST_STRAIGHT);
   if(isfindpath)return;
   var Candown:Boolean=temT?isNodeCango(sx,sy+1,sx,sy,g+COST_STRAIGHT):isNodeCango(sx-1,sy+1,sx,sy,g+COST_STRAIGHT);
   if(isfindpath)return;
   //trace("Canup:"+Canup+",Canright:"+Canright+",Canlefth:"+Canlefth+",Candown:"+Candown)
   //右上
   if(Canup&&Canright&&!isfindpath)isNodeCango(sx+1,sy,sx,sy,g+COST_DIAGONAL);
   //右下
   if(Canright&&Candown&&!isfindpath)isNodeCango(sx,sy+2,sx,sy,g+COST_DIAGONAL);
   //左上
   if(Canup&&Canlefth&&!isfindpath)isNodeCango(sx,sy-2,sx,sy,g+COST_DIAGONAL);
   //左下
   if(Candown&&Canlefth&&!isfindpath)isNodeCango(sx-1,sy,sx,sy,g+COST_DIAGONAL);
  }
  //45度估算评分
  private function set45H(nx:uint,ny:uint):uint
  {
   //return (Math.abs(mapDataInfo.MapArrayElement[endy][endx][0]-mapDataInfo.MapArrayElement[ny][nx][0])+Math.abs(mapDataInfo.MapArrayElement[endy][endx][1]-mapDataInfo.MapArrayElement[ny][nx][1]))*10
   //var Bol:Boolean=Boolean(ny&1);
   //var w:uint=2;
   //w=2;
   //True y=int(y/2)+w-x;x=int(y/2)+x;
   //false y=w-1+int(y/2)-x;x=int(y/2)+x;
   //var Bigy:int=Bol?int(ny/2)+w-nx:w-1+int(ny/2)-nx;
   //var Bigx:int=int(ny/2)+nx
   /* var _loc_4:uint;
            var _loc_5:uint;
            var _loc_6:uint;
            var _loc_7:uint;
            var _loc_8:uint;
            _loc_4 = Math.abs(endx - nx) + Math.abs(endy - ny);
            _loc_5 = Math.abs(startX - nx);
            _loc_6 = Math.abs(startY - ny);
            _loc_7 = Math.min(_loc_5, _loc_6);
            _loc_8 = Math.abs(_loc_5 - _loc_6) * 10 + _loc_7 * 14;
            return _loc_4 * 10 + _loc_8;*/
   return (Math.abs(setbigX(endx,endy)-setbigX(nx,ny))+Math.abs(setbigY(endx,endy)-setbigY(nx,ny)))*10
  }
  //45度y
  private function setbigY(nx:uint,ny:uint):uint
  {
   return mapDataInfo.EleArray[ny][nx][1];
   //var Bol:Boolean=Boolean(ny&1);
   //return (Bol?Math.floor(ny/2)+mapDataInfo.MAP_X-nx:mapDataInfo.MAP_X-1+int(ny/2)-nx);
  }
  private function setbigX(nx:uint,ny:uint):uint
  {
   return mapDataInfo.EleArray[ny][nx][0];
   //return Math.floor(ny/2)+nx;
  }
 }
}

posted @ 2009-05-07 09:15 Educk 阅读(1205) 评论(3) 编辑
  2009年3月17日

 

MPlayer下载
http://www.mplayerhq.hu/design7/dload.html
目前版本MPlayer v1.0rc2

MPlayer编译
tar -xjvf MPlayer-1.0rc2.tar.bz2
cd MPlayer-1.0rc2
./configure
make
make install

如果出现以下错误
cabac.h: In function `get_cabac_noinline’:
cabac.h:525: error: can’t find a register in class `GENERAL_REGS’ while reloading `asm’
make[1]: *** [h264.o] 错误 1
在make前加入
export CFLAGS=-fomit-frame-pointer
make clean

ffmpeg的编译大全

1. 首先获取ffmpeg

很多人找不到怎么下载,其实之前ffmpeg可以通过cvs下载,不过最近他已经换成了更加强大的svn

如何使用SVN我这里不再介绍,网上还有大量的安装和使用的文章可以借鉴,这里简单罗列几个SVN辅助的软件:

SubVersion,从 http://subversion.tigris.org/ 下载,支持linux,我们这里就装这个

TortoiseSVN,从 http://tortoisesvn.tigris.org/ 下载,是很不错的SVN客户端程序,为windows外壳程序集成到windows资源管理器和文件管理系统的Subversion客户端,用起来很方便,commit动作变得就像Winrar右键压缩一样方便。

ok,那我们先装subversion,记住最好之前装过apr和apr-util,在apache.org网站能下到

wget http://subversion.tigris.org/downloads/subversion-1.3.2.tar.gz
tar zvxf subversion-1.3.2.tar.gz
cd subversion-1.3.2
./configure –with-apr=/usr/local/apr-httpd –with-apr-util=/usr/local/apr-util-httpd/
make
make install

到此,我们就可以通过svn命令获取最新的ffmpeg了

svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg

你会发现在你所在的目录,自动出现一个ffmpeg的目录,就是你下载的源代码。

官网:http://ffmpeg.mplayerhq.hu/download.html

我们还不能这么快编译ffmpeg,应该如果要让ffmpeg支持更多格式的转换,还需做一些前期工作

2. 支持mp3,linux当然是lame,下载解压
http://sourceforge.net/projects/lame

lame-3.97.tar.gz Mirror

cd lame-3.97
./configure –enable-shared –prefix=/usr
./make
./make install
这里推荐尽量装在/usr下,默认是装在/usr/local下。这样ffmpeg编译都能顺利的找到库文件

3.支持Ogg Vorbis:
as4自带相应的rpm包,你可以安装一下如下rpm包
libvorbis, libvorbis-devel,libogg, libogg-devel

FC3和FC4應該是預設安裝了有關的library的,實際上要安裝的套件有4個:libvorbis、libvorbis-devel、libogg和libogg-devel。您可以用以下指令檢查一下有沒有。
#rpm -qa | grep libogg
#rpm -qa | grep libvorbis
如果沒有的話,用yum安裝就可以了。
4.支持xvid x264,现在最流行的两种高质量的压缩格式
xvid的编译安装
Get the latest version on http://www.xvid.org/, and uncompress it on
your disk. Let’s name the resulting source directory ${xvidcore}.
wget http://downloads.xvid.org/downloads/xvidcore-1.1.3.tar.gz

The next step allows you to configure the xvid sources.
# cd ${xvidcore}/build/generic
# ./configure

Some building options can be tuned thanks to the ./configure tool. You
can use your own CC and CFLAGS variables in order to override xvid’s
default ones. To have a list of known options:
# ./configure –help

Now xvidcore is configured according to your specific platform. You
can still handwrite the platform.inc file in order to add/remove
specific flags that ./configure may have set them wrong.

It is time to build xvidcore:
# make

That creates a =build directory where all object files go, and where
the build targets are linked. If no error was reported by the build
process, then you can install it on your system:
# make install

This copies the shared and static libraries to the prefix location
passed to the ./configure tool (/usr/local by default). The xvid.h
include file is also copied during the “make install” run.

Voila, xvidcore is installed on your system, make sure your runtime
linker knows about the xvidcore prefix lib dir where it is
installed. And make also sure that it generates a symlink to its
SONAME. In case it would do not take care of the symlink itself:
# cd ${prefix}/lib
# ls libxvidcore.so.*
    ls should list at least one libxvidcore.so.MAJOR.MINOR file
# ln -s libxvidcore.so.MAJOR.MINOR libxvidcore.so.MAJOR

You may also add a .so link to .so.MAJOR, so that applications linked
against .so are in fact linked to .so.MAJOR and thus ensures better
binary compatibility as we take care not changing the MAJOR number
until there is an incompatible ABI change.
# ln -s libxvidcore.so.MAJOR libxvidcore.so

#tar zvxf xvidcore-1.1.2.tar.gz
#cd xvidcore-1.1.2/build/generic/
#./configure –prefix=/usr
#make
#make install
H264/AVC 支援:x264

要壓HQ1080、iPod和PSP的影片,x264是少不了的。不過要安裝x264,就需要用yasm來編譯。那就先裝個yasm吧。
yasm下載網址:http://www.tortall.net/projects/yasm/releases/yasm-0.6.0.tar.gz
最新的 下载:     Source .tar.gz 0.6.2

#tar xzvf yasm-0.6.0.tar.gz
#cd yasm-0.6.0
#./configure –prefix=/usr/local/yasm
#make
#make install
#export PATH=”$PATH:/usr/local/yasm/bin”
#vi /etc/profile
–[在最後,插入]–
export PATH=”$PATH:/usr/local/yasm/bin”
–[存檔並關閉]–

跟ffmpeg一樣,x264的官網也是鼓勵大家 checkout SVN來取得最新版本。但據SupeSite在2007年5月16日的說明指出官網的x264最新版有Bug,無法正常在一些Intel的CPU上編譯安 裝(甚麼雙至強、四至強CPU嘛,是指雙核和四核嗎?)。不過起碼米奇在公司的P4 2.8GHz CPU安裝沒有問題啦,所以…管它。如果您遇上問題的話,就去下載SupeSite的開發公司Comsenz的版本吧,不過先旨聲明,那個改版的授權還是 不是原來的GPL就不知道了。如果您在意於授權的話,那就用SVN checkout吧,我想那問題可能在您安裝時已經修正好了。

x264的获取同样是采用svn方式,看来svn取代cvs不远了
svn co svn://svn.videolan.org/x264/trunk x264
cd x264
./configure –prefix=/usr –enable-shared
make
make install

5.AC3和dts编码的支持
as4系统似乎已经支持ac3编码,编译的时候只要加–enable-a52 –enable-gpl参数就行
現在的ffmpeg又沒附有liba52了,所以,還是自己動手裝吧…
下載網站:http://liba52.sourceforge.net/

# tar zxvf a52dec-0.7.4.tar.gz
# cd a52dec-0.7.4
# ./configure –enable-shared –prefix=/usr
# make
# make install

6.mpg4 aac格式支持,由于服务器还针对手机用户服务,所以,类似aac,mpg4铃声格式的支持,我们也得做。这里我们安装faad2和faac就行
faac是用來壓製AAC音軌的,而faad2就是AAC音軌的解碼器。手機鈴聲和MP4影片都是使用AAC作聲音編碼的,所以要裝這個。
另外,faac和faad2都可以配合libmp4v2來安裝,有些網站說需要先安裝libmp4v2,( http://mpeg4ip.net/)不過米奇就發覺只要編譯faac和faad2時加入適當參數,就可以連同libmp4v2一同安裝了。
下载请到http://www.audiocoding.com/downloads.html

FAAD2的编译
cd faad2
autoreconf -vif
./configure –prefix=/usr –with-mp4v2 –enable-shared
make
make install

faac的编译
cd faac
chmod +x bootstrap
./bootstrap
./configure –prefix=/usr –with-mp4v2 –enable-shared
make
make install
Comsenz版下載網址:http://download.discuz.net/env/video/faac-1.25-Comsenz.tar.bz2

#tar xjvf faac-1.25-Comsenz.tar.bz2
#cd faac-Comsenz
#autoreconf -vif
#./configure –prefix=/usr –with-mp4v2 –enable-shared
#make
#make install

要知道安裝了faac和faad2之後有沒有安裝好libmp4v的話,只要找一找/usr/lib目錄裡有沒有libmp4v2.so等一系列檔案就可以了。找不到的話,就到這裡去下載,安裝好之後再重頭安裝faac和faad2了。

7.支持3gp格式,这也是现在好多手机支持的格式,因为手机用户是我们的主要用户,所以也得支持编译

编译的时候加上–enable-amr_nb –enable-amr_wb参数就行,根据编译系统的提示,所以我们得下载一

些编译3gp所需得文件。

wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-510.zip
解压以后把里面的文件都拷贝到libavcodec/amrwb_float

wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-510.zip
解压以后把里面的文件都拷贝到libavcodec/amr_float

3GPP AMR Floating point 和 AMR-Wideband支援:libamrnb、libamrwb
3GP影片的影像是h263編碼,而聲音就用AMR-NB或AMR-WB編碼,所以要轉換手機影片,就要安裝AMR程式庫。最初坊間的 安裝方式都是到3GPP官網去下載那些連名字也搞不懂的檔案來,放在ffmpeg裡的指定目錄去跟ffmpeg一同編譯的,但現在已經有人抽取了出來而成 為獨立的程式庫,安裝起來就簡單得多了。
下載網址:http://www.penguin.cz/~utx/amr

libamrnb
#tar xjvf amrnb-7.0.0.0.tar.tar
#cd amrnb-7.0.0.0
#./configure –prefix=/usr –enable-shared
#make
#make install

libamrwb
#tar xjvf amrwb-7.0.0.2.tar.tar
#cd amrwb-7.0.0.2
#./configure –prefix=/usr –enable-shared
#make
#make install

8. DTS 支援:libdca
ffmpeg已經內含了用來解碼DTS的libdca,所以不用安裝,也沒有要入加的參數。

9. 安裝ffmpeg
安裝完成必要的程式庫之後,終於可以動手安裝ffmpeg本體了。如果您先前曾經安裝過ffmpeg的話,就先把ffmpeg的源碼目錄刪掉,再次checkout個新版本回來安裝吧。

#svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk /usr/local/src/ffmpeg
#cd /usr/local/src/ffmpeg
#./configure –prefix=/usr –enable-gpl –enable-shared –enable-libmp3lame –enable-libvorbis –enable-libamr-nb –enable-libamr-wb –enable-libxvid –enable-libx264 –enable-liba52 –enable-liba52bin –enable-libfaac –enable-libfaad –enable-libfaadbin –enable-pp –enable-pthreads –disable-ffserver –disable-ffplay
#make clean && make
#make install

經過可以去看一節動畫的時間編譯之後,你應該可以在/usr/bin目錄裡找到ffmpeg程式。輸入ffmpeg便會列出用了甚麼參數來編譯這個 ffmpeg和它的版本。米奇試過用以這程序來安裝的ffmpeg來編製和解壓3GP、Xvid、mov、wmv9、msmpeg4、MPEG2+AC3 音源、h264+aac音源的mkv、PSP用的MP4和FLV影片,都沒有問題,只有wmv7的影片無法解碼,相信已經對應得到大部份現時流行的影音格 式了。

可以用 ffmpeg -threads [thread_count] -deinterlace -i [input_file] -ac 2 -ab [audio_bitrate] -acodec libfaac -vcodec libx264 -b [video_bitrate] [output_file] 來產生 H.264+AAC 的 mp4 檔案了。

posted @ 2009-03-17 14:19 Educk 阅读(2021) 评论(0) 编辑
  2009年3月2日
posted @ 2009-03-02 22:24 Educk 阅读(133) 评论(0) 编辑
  2009年2月21日
posted @ 2009-02-21 00:05 Educk 阅读(475) 评论(6) 编辑
  2008年11月4日
posted @ 2008-11-04 06:39 Educk 阅读(1358) 评论(35) 编辑
  2008年10月27日
posted @ 2008-10-27 15:52 Educk 阅读(751) 评论(0) 编辑