RTSP協議以客戶服務器方式工做,它是一個多媒體播放控制協議,用來使用戶在播放從因特網下載的實時數據時可以進行控制,如:暫停/繼 續、後退、前進等。所以 RTSP 又稱爲「因特網錄像機遙控協議」。服務器
EasyRTSPServer是一套穩定、高效、可靠、多平臺支持的RTSP-Server組件, 接口調用很是簡單成熟,無需關注RTSPServer中關於客戶端監聽接入、音視頻多路複用、RTSP具體流程、RTP打包與發送等相關問題,支持多種音視頻格式,不再用去處理整個RTSP OPTIONS/DESCRIBE/SETUP/PLAY/RTP/RTCP的複雜流程和擔憂內存釋放的問題了,很是適合於安防領域、教育領域、互聯網直播領域等。架構
EasyRTSPServer 基於live555改造而來,live555官方代碼中只支持IPv4, 現實環境中絕大多數項目也是IPv4, 可是用支持IPv6的EasyRTSPClient去鏈接海康的相機,而且現工程投標中也有部分明確須要IPv6, 因此在原IPv4基礎上,動手改造支持IPv6。socket
定義IPV4和IPV6 live_ipv4_ipv6.h typedef enum LIVE_IPVER_ENUM { LIVE_IP_VER_4 = 0, LIVE_IP_VER_6 }LIVE_IP_VER_ENUM; NetAddress.hh 增長地址定義 typedef struct __LIVE_NET_ADDRESS_INADDR { struct in_addr sin_addr; struct in6_addr sin6_addr; __LIVE_NET_ADDRESS_INADDR() { sin_addr.s_addr = INADDR_ANY; sin6_addr = in6addr_any; }; }LIVE_NET_ADDRESS_INADDR; typedef struct __LIVE_NET_ADDRESS_SOCKADDR_IN { struct sockaddr_in saddr4; struct sockaddr_in6 saddr6; }LIVE_NET_ADDRESS_SOCKADDR_IN;
除了void AddressString::init(struct in_addr addr)外, 將工程中全部struct in_addr 改成 LIVE_NET_ADDRESSspa
修改重點code
在建立IPV6的socket後,需作以下設置(設置IPV6的socket只接收IPV6的數據)視頻
int on = 1; if (setsockopt(newSocket, IPPROTO_IPV6, IPV6_V6ONLY, (char *)&on, sizeof(on)) < 0) { printf("set ipv6 fail.\n"); }
後續的處理和IPV4基本相同。接口