概述
我交叉编译的是feng -2.1.0
需要:
- a full Posix compatible system (suggested any linux distribution)
- gnu toolchain (gcc >= 3.4 , make >= 3.80, libtool >= 1.5.20) [1]
- glib-2 >= 2.10 [2]
- ffmpeg >= 0.5 [3]
- netembryo >= 0.1.0 [4]
- libev >= 3.48 [5]
交叉编译环境:
davinci:
Cross-Compile
使用:
ffmpeg 0.5
netembryo 0.1.1
libev 3.7
1
export prefix=/home/amy/workdir/cross-rtp/feng
echo $prefix
2
../libev-3.7/configure --prefix=$prefix --build=i386 --host=arm CC=arm_v5t_le-gcc
3
//before netembroyo
../lksctp-tools-1.0.11/configure --prefix=$prefix --build=i386 --host=arm CC=arm_v5t_le-gcc
这里是因为一般的 linux 发行版,准确的是内核,是不添加 sctp 支持的,因为这个毕竟是10年后的技术,因此,就需要安装 lksctp-tools-1.0.11 ,在 configure netembryo 的时候,要注意,sctp support ,否则 feng 无法运行
../netembryo-0.1.1/configure --prefix=$prefix --build=i386 --host=arm --enable-sctp --enable-ipv6 CC=arm_v5t_le-gcc LDFLAGS=-L/home/amy/workdir/cross-rtp/feng/lib CFLAGS=-I/home/amy/workdir/cross-rtp/feng/include
4
//before ffmpeg
CC=arm_v5t_le-gcc ../glib-2.22.4/configure --cache-file=glib.cache --with-gnu-ld --prefix=$prefix --build=i386 --host=arm
注意: glib 的编译,glib 是个很强大的库,提供很多函数,在 ffmpeg 编译的时候需要
glib.cache 这样写
glib_cv_stack_grows=no
glib_cv_uscore=yes
ac_cv_func_posix_getpwuid_r=no
ac_cv_func_nonposix_getpwuid_r=no
ac_cv_func_posix_getgrgid_r=no
具体问题,可以参考官网
为什么要有 glib.cache 呢?很简单,就是因为它是库函数,关于运行平台,而平台的参数,因为是 cross-compile ,没有办法读取,因此,就要 .cache 了
可能遇到的错误:
error:
libtool: eval: line 964: syntax error near unexpected token `|'
tricky solution(解决方案)
USE_ARCH=32 NM=nm CC="mipsel-linux-gnu-gcc ${BUILD32}" ./configure
--with-gnu-ld
--target=mipsel-linux
--host=mipsel-linux
CC=mipsel-linux-gnu-gcc
--prefix=/usr
5.
../ffmpeg-0.5/configure --arch=arm --prefix=$prefix --cc=arm_v5t_le-gcc --enable-cross-compile --host-ldflags=-L/home/amy/workdir/cross-rtp/feng/lib --host-cflags=-I/home/amy/workdir/cross-rtp/feng/include --disable-stripping
libtool经常会遇到版本问题,以下是我总结,希望有高手能系统地总结
1重新安装
../libtool-1.5.20/configure --prefix= --build=i386 --host=arm CC=arm_v5t_le-gcc
2有人说可以改文件里面的 $echo ,不是很懂
$echo -> $ECHO
3这是很多开源软件的 README 提供的方案
libtoolize --copy --force
4就是上面 glib 上提到的
tricky
关于 libtool 是很值得去探究下的,不管使自己写软件用,还是以后交叉编译,编译
6
export PKG_CONFIG_PATH=/home/amy/workdir/cross-rtp/feng/lib/pkgconfig
要 export PKG_CONFIG_PATH
这是关于 pkg 的问题,随后我会再加 博文上去
CC=arm_v5t_le-gcc CFLAGS=-I/home/amy/workdir/cross-rtp/feng/include LDFLAGS=-L/home/amy/workdir/cross-rtp/feng/lib ../feng-2.1.0_rc1/configure --prefix=$prefix --build=i386 --host=arm --enable-sctp --enable-ipv6
feng 的交叉编译就到这里
还有一些小 tips
在编译过程中总会涉及到工具库的使用,如果真的是工具库,其实可以考虑要不要交叉编译,能不能直接 apt-get ,这里我的看法是:如果是动态链接,那是交叉编译定了,如果是静态链接,倒可以考虑 apt-get ,因为静态链接是编译时引用相关函数
还有,根据经验,ubuntu 9.04 的apt-get 的库版本都太低,可以考虑升级一下 ,最简单的办法就是修改 source .list ,修改为 ubuntu 9.10 的代号,就可以 apt-get 很新的包了
就先这样,如果有问题,可以留言联系我
随时互通有无
基于feng streaming server 搭建Android直播测试平台
由于Android 不像iPhone有http live streaming的端到到方案(方便提供海量服务),暂时用开源的feng(http://lscube.org/feng,支持mp4(H264+AAC))搭建一个RTSP/RTP直播服务器用来测试,feng相对于darwin、live555等流媒体服务器的优势很容易增加新的媒体文件解析器,按照其中demux_avf.c结构利用ffmpeg API就可以demux出不同container媒体文件(如avi,3gp,mov),将音视频数据分别传到客户端。
1. 先安装feng streaming server的依赖库
1) 安装glib-2.20.0 , ./configure --prefix=/usr && make && sudo make install
2) 安装AAC的编解码faac/faad2 (http://www.audiocoding.com/downloads.html) ./configure --prefix=/usr , make && make install
3) 安装ffmpeg-0.6 ./configure --prefix=/usr --enable-libfaac --enable-gpl --enable-libfaad --enable-nonfree CXXFLAGS=-D__STDC_CONSTANT_MACROS , make && sudo make install
4) 安装libev-4.01, ./configure=prefix=/usr make & sudo make install
5) 安装netembryo-0.1.1, ./configure --prefix=/usr make &make install
2. 安装feng-2.1.0_rc1.和 flux-1.1 ( ./configure --prefix=/usr , make & make install )
feng 负责RTSP/sdp/RTP协议解析和音视频数据的RTP封包工作,flux负责RTP直播流的管理,如将摄像头的实时数据流映射到某个端口上去,flux -c udp://2900*live*mq:///audio -c udp://2902*live*mq:///video
3.启动feng, 如果传输媒体文件,直接把文件放到/usr/var/feng/avroot
sudo feng -v 出现如下信息表示启动成功:
feng - Feng 2.1.0_rc1
LScube Project - Politecnico di Torino
[Fri Dec 24 00:05:04 2010] Listening to port 554 (TCP) on all interfaces
[Fri Dec 24 00:05:04 2010] [warning] Cannot get group feng id, Success
[Fri Dec 24 00:05:04 2010] [warning] Cannot get user feng id, Success
1)先用vlc播放器测试下RTSP连接:
就可以通过feng的log信息清晰的看到RTSP协议控制完整流程(OPTIONS,DESCRIBE,SETUP,PLAY),其中OPTIONS阶段主要是通过sdp协议传递媒体参数信息,如h264的payload type=96(a=rtpmap:96 H264/90000)
2)在客户端可以用Android 的测试程序(通过VideoView控件实现媒体播放器)开始播放
最后
以上就是瘦瘦路人为你收集整理的feng交叉编译的全部内容,希望文章能够帮你解决feng交叉编译所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复