RTSP, RTP 및 RTCP 포트 번호 설정
RTSP 포트 번호를 설정하는 작업은 ARTSPConnection에 있습니다.cpp 파일에서 먼저 URL에서 포트 번호를 가져옵니다. 읽지 못하면 기본 포트 554로 설정합니다.코드 처리는 다음과 같습니다.
ARTSPConnection::ParseURL(
const char *colonPos = strchr(host->c_str(), ':');
if (colonPos != NULL) {
unsigned long x;
if (!ParseSingleUnsignedLong(colonPos + 1, &x) || x >= 65536) { // rtsp 65536
return false;
}
*port = x;
size_t colonOffset = colonPos - host->c_str();
size_t trailing = host->size() - colonOffset;
host->erase(colonOffset, trailing);
} else {
*port = 554; // url , 554
}
-------------------------------------------------------------------------------------------------------- 2. RTP 및 RTCP 포트 번호 설정
RTP 및 RTCP 포트 번호를 설정하는 작업은 ARTPConnection에 있습니다.cpp 파일의 RTSP 포트 번호 설정과 처리는 각각 다른 파일에 있습니다.(1) 함수 선언: 인접 포트 쌍에 대한 UDP 데이터 보고서 소켓을 생성합니다.rtp 플러그인은 짝수 포트입니다. rtcp 플러그인 포트는 rtp 포트 번호보다 한 번호가 큽니다.
4
// Creates a pair of UDP datagram sockets bound to adjacent ports
// (the rtpSocket is bound to an even port, the rtcpSocket to the
// next higher port).
static void MakePortPair(
int *rtpSocket, int *rtcpSocket, unsigned *rtpPort);
(2) 함수 정의: RTP 및 RTCP 포트 설정// static
void ARTPConnection::MakePortPair(
int *rtpSocket, int *rtcpSocket, unsigned *rtpPort) {
*rtpSocket = socket(AF_INET, SOCK_DGRAM, 0);
CHECK_GE(*rtpSocket, 0);
bumpSocketBufferSize(*rtpSocket);
*rtcpSocket = socket(AF_INET, SOCK_DGRAM, 0);
CHECK_GE(*rtcpSocket, 0);
bumpSocketBufferSize(*rtcpSocket);
unsigned start = (rand() * 1000)/ RAND_MAX + 15550; // 15550
start &= ~1; // 1 , start ,
for (unsigned port = start; port < 65536; port += 2) { // rtp 65535, rtcp 65536
struct sockaddr_in addr;
memset(addr.sin_zero, 0, sizeof(addr.sin_zero));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(port);
if (bind(*rtpSocket,
(const struct sockaddr *)&addr, sizeof(addr)) < 0) {
continue;
}
addr.sin_port = htons(port + 1);
if (bind(*rtcpSocket,
(const struct sockaddr *)&addr, sizeof(addr)) == 0) {
*rtpPort = port;
return; // rtcp
}
}
TRESPASS();
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
React 구성 요소에서 소켓 이벤트 리스너가 여러 번 실행됩니다.기본적이지만 종종 간과되는 사이드 프로젝트를 하면서 배운 것이 있습니다. 이 프로젝트에는 단순히 두 가지 주요 부분이 포함되어 있습니다. 프런트 엔드: 반응 및 재료 UI 백엔드: Express, Typescript...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.