文档章节

hi3507/hi3515交叉编译live555

xiaot99
 xiaot99
发布于 2014/11/19 11:13
字数 867
阅读 98
收藏 0

Live555 是一个为跨平台的C++开源项目,它实现了RTP/RTCP、RTSP、SIP等的支持。并且相对于其他的流媒体服务器是完全开源并且免费的。

废话不多说,下面开始。

 

1、首先到它的主页下载一个源码包:

http://www.live555.com/liveMedia/public/

我下载的是latest的,具体什么版本还真不清楚闭嘴

 

2、放到linux目录下解压:


root@kubuntu:/home/frank tar zxvf live555-latest.tar.gz  

root@kubuntu:/home/frank# cd live  

root@kubuntu:/home/frank/live#  

 

3、首先尝试在PC的Linux上编译:
区别于传统的源码包,不是传统的配置方式,而是通过genMakefiles配对目录下的config.*文件生成Makefile


root@kubuntu:/home/frank/live# ./genMakefiles linux  

root@kubuntu:/home/frank/live# make  


编译很顺利,然后上网找一个*.264文件(常见的就是那个test.264在新闻报道奋斗)放在当前目录下

执行mediaServer目录下的live555MediaServer服务器原型


root@kubuntu:/home/frank/live# ./mediaServer/live555MediaServer  

LIVE555 Media Server  

 version 0.75 (LIVE555 Streaming Media library version 2012.11.08).  

Play streams from this server using the URL  

        rtsp://192.168.1.41:8554/<filename>  

where <filename> is a file present in the current directory.  

Each file's type is inferred from its name suffix:  

".264" => a H.264 Video Elementary Stream file  

".aac" => an AAC Audio (ADTS format) file  

".ac3" => an AC-3 Audio file  

".amr" => an AMR Audio file  

".dv" => a DV Video file  

".m4e" => a MPEG-4 Video Elementary Stream file  

".mkv" => a Matroska audio+video+(optional)subtitles file  

".mp3" => a MPEG-1 or 2 Audio file  

".mpg" => a MPEG-1 or 2 Program Stream (audio+video) file  

".ts" => a MPEG Transport Stream file  

     (a ".tsx" index file - if present - provides server 'trick play' support)  

".wav" => a WAV Audio file  

".webm" => a WebM audio(Vorbis)+video(VP8) file  

See http://www.live555.com/mediaServer/ for additional documentation.  

(We use port 8080 for optional RTSP-over-HTTP tunneling, or for HTTP live streaming (for indexed Transport Stream files only).)  

通过VLC可以点播rtsp://192.168.1.41:8554/test.264视频,

(注意:test.264所在的目录要和live555MediaServer执行目录相一致,若test.264放在live目录下,则需要在live目录下执行./mediaServer/live555MediaServer)

 

4、交叉编译

编译器arm-hismall-linux-gcc/arm-hismall-linux-g++

同理如果通过genMakefiles生成交叉编译的Makefile,我们需要一个对应的config.*

因此我们创建一个config.hi3507,内容可以参考config.armlinux


root@kubuntu:/home/frank/live# cat config.hi3507  

CROSS_COMPILE?=         arm-hismall-linux-  

COMPILE_OPTS =          $(INCLUDES) -I. -O2 -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64  

C =                     c  

C_COMPILER =            $(CROSS_COMPILE)gcc  

C_FLAGS =               $(COMPILE_OPTS)  

CPP =                   cpp  

CPLUSPLUS_COMPILER =    $(CROSS_COMPILE)g++  

CPLUSPLUS_FLAGS =       $(COMPILE_OPTS) -Wall -DBSD=1  

OBJ =                   o  

LINK =                  $(CROSS_COMPILE)g++ -o  

LINK_OPTS =  

CONSOLE_LINK_OPTS =     $(LINK_OPTS)  

LIBRARY_LINK =          $(CROSS_COMPILE)ar cr  

LIBRARY_LINK_OPTS =     $(LINK_OPTS)  

LIB_SUFFIX =                    a  

LIBS_FOR_CONSOLE_APPLICATION =  

LIBS_FOR_GUI_APPLICATION =  

EXE =  

 

然后与在PC上编译一样,进行编译。

root@kubuntu:/home/frank/live# ./genMakefiles hi3507  

root@kubuntu:/home/frank/live# make clean;make  

这里要记得先make clean,否则因为之前在PC上编译的目标文件没清楚会导致链接失败。

编译时会产生一个错误


In file included from MPEG4GenericRTPSink.cpp:22:  

include/Locale.hh:47:123: xlocale.h: No such file or directory  

In file included from MPEG4GenericRTPSink.cpp:22:  

include/Locale.hh:62: error: `locale_t' does not name a type  

make[1]: *** [MPEG4GenericRTPSink.o] Error 1  

make[1]: Leaving directory `/home/frank/live/liveMedia'  

make: *** [all] Error 2  


这个是由于海思使用的是uClinux,并没有xlocale.h这个头文件,

而live555内部的一个locale模块调用了(见liveMeida/locale.hh),因此通过编译选项把他去掉。

修改config.hi3507,在编译选项上加入-DLOCALE_NOT_USED把此模块去掉。

 


CROSS_COMPILE?=         arm-hismall-linux-  

COMPILE_OPTS =          $(INCLUDES) -I. -O2 -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64  

C =                     c  

C_COMPILER =            $(CROSS_COMPILE)gcc  

C_FLAGS =               $(COMPILE_OPTS)  

CPP =                   cpp  

CPLUSPLUS_COMPILER =    $(CROSS_COMPILE)g++  

CPLUSPLUS_FLAGS =       $(COMPILE_OPTS) -Wall -DBSD=1 -DLOCALE_NOT_USED  

OBJ =                   o  

LINK =                  $(CROSS_COMPILE)g++ -o  

LINK_OPTS =  

CONSOLE_LINK_OPTS =     $(LINK_OPTS)  

LIBRARY_LINK =          $(CROSS_COMPILE)ar cr  

LIBRARY_LINK_OPTS =     $(LINK_OPTS)  

LIB_SUFFIX =                    a  

LIBS_FOR_CONSOLE_APPLICATION =  

LIBS_FOR_GUI_APPLICATION =  

EXE =  


再次生成Makefile并编译

root@kubuntu:/home/frank/live# ./genMakefiles hi3507  

root@kubuntu:/home/frank/live# make  


编译成功!

再按照上述方法把程序放到hi3507上运行测试


© 著作权归作者所有

共有 人打赏支持
xiaot99
粉丝 16
博文 73
码字总数 166962
作品 0
成都
程序员
私信 提问
VLC 和 MPlayer 使用的流媒体库被曝出高危漏洞

外媒消息,思科 Talos 团队的安全研究人员在 LIVE555 流媒体库中发现了一个严重的代码执行漏洞。该库正被用于包括 VLC 和 MPlayer 在内的多款流行播放器中。 由 Live Networks 开发和维护的 ...

王练
2018/10/23
1K
1
基于Hi3516A的H265 IPC LIVE555 开发基本原理

转载于http://m.blog.csdn.net/faihung/article/details/73008742,如有侵权,请告知删除。 1 系统工作原理 系统以Hi3516A开发平台(由高分辨率1080 p的AR0330摄像头模块和带千兆以太网功能的...

oqqHuTu12345678
2018/01/02
0
0
VLC源码分析知识总结 (一)#和##的使用

关于#和## 1.1).在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。 比如在早期的VLC版本...

地狱的烈火
2013/04/26
0
0
让android支持RTSP及live555分析

#DATE 2012/05/09 #2012/08/27由cnblogs迁入 如何让Android支持C++异常机制 Android不支持C++异常机制,如果需要用到的话,则需要在编译的时候加入比较完整的C++库. Android支持的C++库可以在A...

Wii-D
2012/08/27
0
6
live555 --- vs2010编译

最近想研究下live555,在ubuntu下编译并运行,虽然有cgdb可以进行源码调试,但总感觉调试时不够直观和简便,于是想在vs2010下编译。 从http://live555sourcecontrol.googlecode.com/svn/trun...

长平狐
2012/09/20
2.6K
0

没有更多内容

加载失败,请刷新页面

加载更多

JFinal开发的旅游线路营销Saas平台演示系统我部署了一个

今天部署了一个旅游线路营销管理系统的演示版: 演示地址:http://lvyou.jfinalxueyuan.com 演示账号:(暂时只给一个门店版的吧,批发商和总部的如果需要 演示看看 单独联系我微信:1876673...

山东-小木
今天
2
0
如何学习大数据技术

学习大数据技术,首先要明确大数据的概念。 大数据的概念作者认为有如下几点: 1.数据的来源多样性。例如关系数据库+文本+excel等 2.数据量大。TB级别的数据。 3.业务应用领域。实时性高与实...

董黎明
今天
3
0
开箱即用(out-of-box)的Redis序列号生成器,不用再写任何代码,你值得拥有

先看整体效果 把简单的东西“傻瓜化”是软件开发追求的目标之一。请看下图: 左边是在 application.yml 里配置了3个生成器,右边可以直接注入到代码中使用,注意,不用写任何代码。这酸爽。 ...

花漾年华
今天
1
0
算法我也不知道有没有下一个---一个题目的开端(索引堆与图)

病痛了一周,折磨来折磨去,终于还是平静了下来,现在能把上周末"贯穿"学到的最后一个基础数据结构的知识给沉淀沉淀了。也是即将再单位分享的东西:图论。这东西,想当年大二,学校的时候,只...

心中的理想乡
今天
1
0
Synchronized和Lock的区别

锁类型: 可重入锁:在执行对象中所有的同步方法时,不必再次去获取锁 可中断锁:在等待获取锁过程中可中断 读写锁:对线程的读写分为两个部分,读过程中多线程可一起访问readLock,写过程中...

最胖的瘦子
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部