저는 VoIP에서 새로운 제품입니다. RTP를 사용하여 클라이언트/서버 아키텍처를 사용하여 오디오를 스트리밍하는 응용 프로그램을 생성하고 싶습니다. 다른 API를 사용할 수 있습니다 그러나 핵심 수준에서 이해를 얻을 필요가 있습니다. 나는 RFC를 연구했다. 누구나 오디오 RTP 패킷을 만드는 방법을 제안하고 JAVA에있는 패킷의 압축을 풀면서 서버로 보낼 수 있습니까? 미리 감사드립니다.RTP 패킷의 전송 및 압축 해제와 함께 API를 사용하지 않고 오디오 RTP 패킷을 만드는 방법
답변
빈 Java 클래스를 만듭니다.
RTP 헤더의 모든 입력란에 회원을 추가하십시오. 단일 비트 필드에 bool을 사용하십시오. 숫자 필드의 경우 SSRC에 int를 사용하고, 타임 스탬프, 시퀀스의 길이를 짧게, 페이로드 유형에 대해 바이트 등 필요한 비트 수를 염두에 두어야합니다. CSRC는 int의 배열 (또는 arrayList 등)이어야합니다. . 오디오 페이로드는 바이트 배열이어야합니다.
패킷은 바이트 배열 일 뿐이므로 패킷 바이트 []를 출력하는 ToBytes() 메서드와 byte []를 매개 변수로 사용하는 생성자가 필요합니다. 패킷을 보내려면 ToBytes()를 호출하고 결과를 UDP 패킷에 넣습니다.
ToBytes() 메서드에서 12 바이트의 바이트 배열을 만들고 각 CSRC에 대해 추가로 4 바이트를 더한 다음 오디오 페이로드에 많은 바이트를 추가합니다.
비트 OR 연산자를 사용하여 설정해야하는 단일 비트 값입니다. 예를 들어, 마커 비트는 두 번째 바이트의 첫 번째 비트는, 그래서를 설정합니다 :
if(marker)
{
bytes[1] = bytes[1] | 0x80; //0x80 is 1000 0000
}
int 타입 반바지있는 값을 설정하려면, 네트워크 순서로 값을 변환해야합니다 (bigendian) 바이트 배열을 만들고 arraycopy를 사용하여 버퍼에 설정하십시오. 네트워크 순서 바이트 배열을 만드는 방법을 알아보기 위해 여러분에게 맡기 겠습니다.
바이트 []을 사용하는 생성자의 경우 위의 프로세스를 역순으로 수행해야합니다. 단일 비트의 값을 확인하려면 AND 연산자를 사용하는 예 :
이 클래스 또는 패킷 수와 샘플 속도에 따라 타임 스탬프를 설정하는 데 도움이하는 방법이 필요 아마거야 헬퍼 클래스marker = bytes[1] & 0x80 == 1;
하나 . 예를 들어, 페이로드가 G.711 인 경우 8000 샘플/초입니다. 즉, 패킷이 160 바이트 페이로드로 20ms마다 전송되므로 타임 스탬프가 모든 패킷마다 160 씩 증가합니다.
성공적으로 구현했습니다. 누군가 코드를 원하면 전자 메일로 저에게 연락하십시오. [email protected]com –