live555提供了强大的rtsp视频处理程序,更可喜的是在testProgs文件夹里提供了好多外部调用的测试程序。在开发自己的应用程序时,我们希望根据需要将testProgs某个程序分离出来,而把live555只编译成共享库就不再动它。最好能够将基于live555写的代码放在一个eclipse工程文件里,管理使用就方便多了。现在就介绍一下如何将testRTSPClient分离出来,然后介绍如何建立eclipse工程。
一、将live555编译成共享库
下载live555源代码文件,我下载的是live.2016.06.26.tar.gz,将其解压到Ubuntu系统下,然后执行下面的命令生成Makefile文件:
./genMakefiles linux-with-shared-libraries
然后执行 Make 和 Make install命令,完成编译和安装。
编译后的lib库在/usr/local/lib下,如下图所示:
接下来,执行testProgs下的testRTSPClient程序,例如接收海康摄像机的视频,命令为“./testRTSPClient rtsp://admin:admin123@192.168.1.33:554/h264/ch01/main/av_stream ”,正常启动的时候,能够看到控制台不断显示接收到的视频和音频的基本信息。
这里执行testRTSPClient,它调用的还是本地的链接库而不是/usr/local/lib下的库。为了方便测试,我们将testRTSPClient复制到/home/Desktop文件夹下,此时再执行该程序会提示找不到库。解决该文件有两种方法,一种是设置PATH全局变量,方法请参考我的另一个关于设置环境变量的博客点击打开链接。其实还有一种很简便的方法。新建一个脚本live_lqc.sh,内容如下,其实就是将这四个文件从/usr/local/lib/下复制到 /usr/lib下。这样你可以完全控制所有的文件,并且这四个文件其实都是快捷方式,不会导致占用太多额外的空间。
#!/bin/bash
cp /usr/local/lib/libliveMedia.so.52 /usr/lib
cp /usr/local/lib/libgroupsock.so.8 /usr/lib
cp /usr/local/lib/libBasicUsageEnvironment.so.1 /usr/lib
cp /usr/local/lib/libUsageEnvironment.so.3 /usr/lib
然后再执行
testRTSPClient就可以了。
二、在eclipse中运行testRTSPClient程序
需要说明的一点是为什么不能只写一个“/usr/local/include”,而必须将四个都加进来。你随便打开一个live里面的头部引用,都是直接写的文件名,没有指定路径,例如#include "groupsock_version.hh",但是头文件是分布在liveMedia等四个文件夹里的。如果这里不将四个子目录加进来,在编译的时候就会出现找不到有文件的错误。
然后设置共享库名称,方法请参考下面截图,注意库名称的写法,不要错了。因为我们将库的链接复制到/usr/lib下了,所以这里不用设置库的搜索路径了。
然后建立两个文件rtspdecode.h和rtspdecode.cpp。
环境配置好之后,剩下的工作就很简单了,其实将testRTSPClient.cpp的内容全部复制到rtspdecode.cpp中编译就可以运行了。作者为了便于我们学习,将所有的内容都放在这一个文件里了,为了规范,可以将头文件引用、类等放在rtspdecode.h中。编译成功后,接受海康摄像机视频,控制台输出为:
以后我们将在这个文件进一步封装,使其能够接受、解码并显示。后续博客正在更新中。
OK!