Live555 C++ arm linux64 RTSP推流开发

本文详细描述了如何在ARM板子上安装Live555库,生成适合的makefile,解决make过程中的test问题,以及如何配置RTSP推流服务器,包括运行demo和遇到的问题,如多IP支持和OutPacketBuffer大小调整。

一、首先安装Live555

1、下载源码

由于不能apt-get install,所以先官网下载源码。http://www.live555.com/liveMedia/
在这里插入图片描述
在这里插入图片描述
解压 tar -zxvf live.2023.07.24.tar.gz

安装可以看这篇博文前部
live555server环境搭建
OpenSSL必须安装

2、生成makefile

安装时如果直接在arm板子上装,生成makefile时就直接写

~/live$ ./genMakefiles linux

# 查看Makefile
~/live$ cat Makefile
##### Change the following for your environment:
COMPILE_OPTS =		$(INCLUDES) -I/usr/local/include -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
C =			c
C_COMPILER =		cc
...

不能写成armlinux

~/live$ ./genMakefiles armlinux

# 查看Makefile
~/live$ cat Makefile
##### Change the following for your environment:
CROSS_COMPILE?=		arm-elf-
COMPILE_OPTS =		$(INCLUDES) -I/usr/local/include -I. -O2 -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
C =			c
...

如果选成了armlinux,这样make的时候用的就是交叉编译工具链,仅适用于从x86机器上给arm机器编译。

3、make

make时基本都会遇到test问题
编辑一下这个文件 /live/BasicUsageEnvironment/BasicTaskScheduler.cpp(190行左右)

if (fTriggersAwaitingHandling[i].test()) {
   
   
# 将上面这行改为
if (fTriggersAwaitingHandling[i].test_and_set()) {
   
   

4、sudo make install

编好了再运行sudo make install之后,就会把头文件放到 /usr/local/include 中,库文件放到 /usr/local/lib 中,不需要添加环境变量。

5、编译

编译demo的时候,在makefile中增加-I和-L就行。

文件名:
test_live555.cpp
编译指令:
g++ -I/usr/local/include -I/usr/local/include/groupsock -I/usr/local/include/UsageEnvironment -L/usr/local/lib test_live555.cpp -o test_live555 -lliveMedia -lBasicUsageEnvironment -lgroupsock -lUsageEnvironment -lssl -lcrypto

-lliveMedia -lBasicUsageEnvironment -lgroupsock -lUsageEnvironment 是live555的
-lssl -lcrypto 是OpenSSL的

二、运行demo

我们既然是要做rtsp推流,demo在 live/testProgs/testOnDemandRTSPServer.cpp 中,这个demo功能就是读取本地视频,然后启动RTSP推流服务器。

make的时候已经编译好了,我们可以直接运行。
不过我删减了一些,得自己编译了。拷到test_live555.cpp中,写一个makefile:

#include <liveMedia/liveMedia.hh>
#include <BasicUsageEnvironment/BasicUsageEnvironment.hh>
#include <UsageEnvironment/UsageEnvironment.hh>
#include <GroupsockHelper.hh>


void announceURL(RTSPServer* rtspServer, ServerMediaSession* sms) {
   
   
  if (rtspServer == NULL || sms == NULL) return; // sanity check

  UsageEnvironment& env = rtspServer->envir();

  env << "Play this stream using the URL ";
  if (weHaveAnIPv4Address(env)) {
   
   
    char* url = rtspServer->ipv4rtspURL(sms);
    env 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值