x264惹得祸

作者: shone | 来源:发表于2016-09-11 12:51 被阅读1487次

最近研究读取安卓手机摄像头数据并利用ffmpeg实时编码为H.264编码格式的FLV文件~
到下面代码时,就打印找不到编码器~

pCodec = avcodec_find_encoder(AV_CODEC_ID_H264);
if (!pCodec){ 
     LOGE("Can not find encoder!\n");  
     return -1;
}

网上搜了一下,是

--enable-libx264         enable H.264 encoding via x264 [no]

要配置--enable-libx264使能这个选项,然后编译ffmpeg.

一步步来吧!

1.下载264库

http://download.videolan.org/x264/snapshots

2.解压,重命名x264

tar -jxvf x264-snapshot-20160910-2245-stable.tar.bz2
mv x264-snapshot-20160910-2245-stable x264

3.配置脚本

build_x264.sh

#!/bin/sh
#
# x264 build script
#
cd x264  

make clean  
  
export NDK=/home/wangxiong/Soft/android-ndk-r9d  
export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt
export PLATFORM=$NDK/platforms/android-8/arch-arm 
export PREFIX=/home/wangxiong/Documents/Github/x264Lib  

./configure --prefix=$PREFIX \
--enable-static \
--enable-pic \
--disable-asm \
--disable-cli \
--host=arm-linux \
--cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- \
--sysroot=$PLATFORM

make  

make install


cd ..  

注意我们的ffmpeg库最终要跑在基于linux系统的Android平台上,所以要用NDK的交叉编译

x264Lib是我们的库安装路径,--prefix=$PREFIX参数指定安装路径.
我的NDK是linux64位的,所以选择linux-x86_64,而32位系统则是linux-x86.

脚本说明:
1.这个脚本很简单,#!/bin/sh声明为shell脚本,由/bin/sh来执行该脚本
2.然后脚本向下执行,遇到命令就执行,跟在终端跑命令是一样的,cd x264,进入x264库
3.make clean编译前,先清掉上次编译的结果 ,看看x264的Makefile

clean:
    rm -f $(OBJS) $(OBJASM) $(OBJCLI) $(OBJSO) $(SONAME) *.a *.lib *.exp *.pdb x264 x264.exe .depend TAGS
    rm -f checkasm checkasm.exe $(OBJCHK) $(GENERATED) x264_lookahead.clbin
    rm -f example example.exe $(OBJEXAMPLE)
    rm -f $(SRC2:%.c=%.gcda) $(SRC2:%.c=%.gcno) *.dyn pgopti.dpi pgopti.dpi.lock *.pgd *.pgc

distclean: clean
    rm -f config.mak x264_config.h config.h config.log x264.pc x264.def conftest*
make clean仅仅是清除之前编译的可执行文件及配置文件
make distclean要清除所有生成的文件

哈哈,clean就是rm删除一些东西!
4.接下来,声明一些环境变量如export NDK,然后$符引用变量$NDK
5../configure接下来配置参数,会生成一些配置文件,可以看一下configure文件

部分代码如下

echo 'default: lib-static' >> config.mak就是将default: lib-static这句话输出重定向到config.mak这个配置文件!

最终会生成最关键的配置文件config.mak

6.make编译
7.make install安装,最后退出到上一个目录

 install-lib-dev:
    $(INSTALL) -d $(DESTDIR)$(includedir)
    $(INSTALL) -d $(DESTDIR)$(libdir)
    $(INSTALL) -d $(DESTDIR)$(libdir)/pkgconfig
    $(INSTALL) -m 644 $(SRCPATH)/x264.h $(DESTDIR)$(includedir)
    $(INSTALL) -m 644 x264_config.h $(DESTDIR)$(includedir)
    $(INSTALL) -m 644 x264.pc $(DESTDIR)$(libdir)/pkgconfig

install-lib-static: lib-static install-lib-dev
    $(INSTALL) -m 644 $(LIBX264) $(DESTDIR)$(libdir)
    $(if $(RANLIB), $(RANLIB) $(DESTDIR)$(libdir)/$(LIBX264))

include下面是ffmpeg的h264编译的依赖文件,lib下面就是静态库了


4. sudo ldconfig

上面的install执行完后,执行sudo ldconfig

5.配置FFmpeg ,开启h264编码

--enable-libx264 \
--enable-encoder=libx264 \
--enable-decoder=h264 \
--enable-decoder=h264_vdpau \
--enable-parser=h264 \
--extra-cflags="-I/home/wangxiong/Documents/Github/x264Lib/include -fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a" \
--extra-ldflags="-L/home/wangxiong/Documents/Github/x264Lib/lib"

--extra-cflags--extra-ldflags很关键,这样编译的时候可以链接x264的lib库!

注意ffmpeg也要用NDK交叉编译

这样我们就可以用ffmpeg的H264编码了

   /*3- 查找可用编码器*/
   pCodec = avcodec_find_encoder(AV_CODEC_ID_H264);

相关文章

  • x264惹得祸

    最近研究读取安卓手机摄像头数据并利用ffmpeg实时编码为H.264编码格式的FLV文件~到下面代码时,就打印找不...

  • 监考惹得祸

    文/听 上过大学的人都知道,考试作弊将会被取消学位证书,直接等于四年的大学白上了;而每年监考都令人纠结。 这天和L...

  • 方言惹得祸

    办公室职员的快乐生活系列41 单位组织红色旅游,去陕西重温延安精神,集体活动完了之后,有两天自由活动时间,大家相约...

  • 衣服惹得祸

    今天早上,我们来到了宁波的姑夫家。 来到他们家,我们吃了点大饼和薯包,看了会儿电视,忽然觉得很无聊...

  • 都是“@”惹得祸

    办公室里有一位60后的同事,姓秦,我们都叫他秦老。称呼他为秦老,他不高兴。后来,领导跟他说,称您为秦老,不是因为您...

  • 嘴巴惹得祸

    祸从口出 这一点也说的没错 很多事情 都是由嘴而挑起的 在很久以前 我们的祖先为何没有那么矛盾 没有那么多纷争呢 ...

  • 好动惹得祸

    前天我把家里面的浴室柜的陶瓷盆打破了。 我刚洗完澡后,妈妈正在用吹风机“呼呼呼”的给我吹头发。我想透过...

  • 都是🔑惹得祸

    傍晚,急匆匆下楼买北瓜、棒子回来熬小米粥,煮棒子吃。 骑自行车来到小区外,五分钟搞定。上楼,找钥匙开门,嗨,怎么没...

  • 香水惹得祸

    男人喷香水总感觉怪怪的,给人一种女里女气的印象,我觉得男人只要整洁干净,留有些许清洁用品的气味就够了。今天遇到的这...

  • 喝酒惹得祸

    这是刚才听来的事。 新区的一名男子,老实本分,前天晚上喝点儿酒,骑电动车碰到树上,摔死了。 “我腰...

网友评论

    本文标题:x264惹得祸

    本文链接:https://www.haomeiwen.com/subject/jleuettx.html