接口調用簡單成熟的RTSP-Server組件EasyRTSPServer支持IPV6的改造方法介紹

RTSP協議以客戶服務器方式工做,它是一個多媒體播放控制協議,用來使用戶在播放從因特網下載的實時數據時可以進行控制,如:暫停/繼 續、後退、前進等。所以 RTSP 又稱爲「因特網錄像機遙控協議」。服務器

關於EasyRTSPServer

EasyRTSPServer是一套穩定、高效、可靠、多平臺支持的RTSP-Server組件, 接口調用很是簡單成熟,無需關注RTSPServer中關於客戶端監聽接入、音視頻多路複用、RTSP具體流程、RTP打包與發送等相關問題,支持多種音視頻格式,不再用去處理整個RTSP OPTIONS/DESCRIBE/SETUP/PLAY/RTP/RTCP的複雜流程和擔憂內存釋放的問題了,很是適合於安防領域、教育領域、互聯網直播領域等。架構

EasyRTSPServer架構.png

EasyRTSPServer支持IPV6改造方法

提出問題

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基本相同。接口

相關文章
相關標籤/搜索