RtspServer是參考了live555和jrtplib實現的,但代碼全部是重新書寫的,所以不依賴於任何第三方庫即可編譯和運行,
目前僅支持h264和G711格式,這是rtp打包時決定的,后續將不斷迭代優化,加入對其他格式的支持。
RtspServer的功能是接收輸入的流,然后推流到客戶端,
用戶參考main.cpp,就可以把RtspServer當作庫來使用。
RtspServer的流程是,會開啟兩個線程,一個線程監聽客戶端的鏈接,一旦有鏈接則保存到鏈表里。同時,有另外一個
線程不斷的去輪詢這個鏈表,然后處理鏈表中的每一個連接對應的rtsp命令,處理命令時使用了正則表達式,簡化了字符串解析流程。
另外,當SETUP時,會建立rtp會話的鏈接,然后當PLAY時,會將接收到的音視頻流打包成RTP包,然后通過rtp鏈接推送到客戶端
全部的源碼可訪問:https://github.com/fengweiyu/RTSP/tree/master/RtspServer ,目前的版本是V1.0.1,
下載完源碼后,先查看ReadMe.txt,然后執行make,再運行程序即可。
關於源碼的介紹,主要用的就5個類,
類的說明:
RtspServer:對客戶端請求的RTSP命令的回應處理,以及推流操作。
TcpSocket: RtspServer的父類,主要是用於與客戶端命令通信的TCP鏈路的相關操作
RtpSession:對RTP會話的操作,內部主要是發送RTP包
UdpSocket::主要是RTP會話會使用UDP的方式,這里提供UDP鏈路的相關操作
RtpPacket:對接收到的音視頻數據進行RTP打包
類的關系是:
RtspServer繼承TcpSocket,RtspServer會調用RtpPacket進行打包,打包后再通過RtpSessio向客戶端推流。
關於RTSP協議的介紹可以參考我的博客:http://www.cnblogs.com/yuweifeng/p/7567846.html