1 编译
官方提供的make文件并不好使,至少在我这里一堆错误,在不熟悉起代码的情况下不好修复
这里采用最傻的方法,将liveMedia
,BasicUsageEnvironment
,groupsock
,UsageEnvironment
这4个文件夹拖入Xcode项目里面
接着根据IDE提示把#include <>
换成 #include ""
在 NetCommon.h
里需要把SOCKLEN_T 换成 socklen_t
顺利编译通过, 笨归笨,日后还有很多方法可以打包成静态库
2 去rtsp服务器拉流
官方testProgs文件夹下有个testRTSPClient.cpp
的客户端文件
cv到项目代码中,把main函数替换一下自己的函数名, 填上自己的URL,最重要的是把ViewController.m
改成ViewController.mm
一个Helloworld就能跑起来了
3 RTP over udp, RTP over tcp
在live555里想使用RTP over tcp的话,可以在RTSPClient
创建是传入tunnelOverHTTPPortNum
,例如我在服务器中使用的是8554端口
RTSPClient* rtspClient = ourRTSPClient::createNew(*env, rtspURL, RTSP_CLIENT_VERBOSITY_LEVEL, "",8554);
默认这个参数为-1,就是使用RTP over udp
4 TaskScheduler
TaskScheduler 实际RTP信道拉流的对象,Environment文件夹下为我们提供了BasicTaskScheduler
实现基本的socket通信拉流
TaskScheduler是一个abstract类
在BasicTaskScheduler
中又会调用*handler->handlerProc
去拉流
handler->handlerProc
这个接口会在不同的状态切换到不同功能的方法指针
具体是由RTSPClient->envir().taskScheduler().setBackgroundHandling
,再交由SingleStep执行
获取服务器内容
在连接后获取服务器响应RTSPClient::connectToServer
会把connectionHandler
通过envir().taskScheduler().setBackgroundHandling
赋值到handlerProc在RTP信道传输时。。。
handler->handlerProc会被切换至SocketDescriptor::tcpReadHandler
5 Environment
(待续...)