1 編譯
官方提供的make文件并不好使主穗,至少在我這里一堆錯誤楷拳,在不熟悉起代碼的情況下不好修復
這里采用最傻的方法列粪,將liveMedia
,BasicUsageEnvironment
,groupsock
,UsageEnvironment
這4個文件夾拖入Xcode項目里面
接著根據(jù)IDE提示把#include <>
換成 #include ""
在 NetCommon.h
里需要把SOCKLEN_T 換成 socklen_t
順利編譯通過, 笨歸笨纽窟,日后還有很多方法可以打包成靜態(tài)庫
2 去rtsp服務(wù)器拉流
官方testProgs文件夾下有個testRTSPClient.cpp
的客戶端文件
cv到項目代碼中,把main函數(shù)替換一下自己的函數(shù)名, 填上自己的URL统舀,最重要的是把ViewController.m
改成ViewController.mm
一個Helloworld就能跑起來了
3 RTP over udp, RTP over tcp
在live555里想使用RTP over tcp的話,可以在RTSPClient
創(chuàng)建是傳入tunnelOverHTTPPortNum
,例如我在服務(wù)器中使用的是8554端口
RTSPClient* rtspClient = ourRTSPClient::createNew(*env, rtspURL, RTSP_CLIENT_VERBOSITY_LEVEL, "",8554);
默認這個參數(shù)為-1,就是使用RTP over udp
4 TaskScheduler
TaskScheduler 實際RTP信道拉流的對象誉简,Environment文件夾下為我們提供了BasicTaskScheduler
實現(xiàn)基本的socket通信拉流
TaskScheduler是一個abstract類
在BasicTaskScheduler
中又會調(diào)用*handler->handlerProc
去拉流
handler->handlerProc
這個接口會在不同的狀態(tài)切換到不同功能的方法指針
具體是由RTSPClient->envir().taskScheduler().setBackgroundHandling
绰筛,再交由SingleStep執(zhí)行
獲取服務(wù)器內(nèi)容
在連接后獲取服務(wù)器響應RTSPClient::connectToServer
會把connectionHandler
通過envir().taskScheduler().setBackgroundHandling
賦值到handlerProc在RTP信道傳輸時。描融。铝噩。
handler->handlerProc會被切換至SocketDescriptor::tcpReadHandler
5 Environment
(待續(xù)...)