live555在iOS上的使用

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

(待续...)

你可能感兴趣的:(live555在iOS上的使用)