문제

내가 좋아하는 동적으로 스위치 비디오 소스에서 스트리밍 비디오 응용 프로그램입니다.그러나 다른 동영상 소스는 독특한 이미지 크기입니다.내가 생성할 수 있는 개인 SDP 파일에 대한 각각의 비디오 소스,하지만 난 그들을 결합으로 단일 SDP 도록 파일 보기 클라이언트는 자동으로 크기를 조정 디스플레이 창으로 동영상 소스의 변경되었습니다.여기에는 두 가지 예 SDP 파:

640×480.sdp:

v=0
o=VideoServer 305419896 9876543210 IN IP4 192.168.0.2
s=VideoStream640x480
t=0 0
c=IN IP4 192.168.0.2
m=video 8000/2 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=0; profile-level-id=4D4033; sprop-parameter-sets=Z01AM5ZkBQHtCAAAAwAIAAADAYR4wZU=,aO48gJ==
a=control:trackID=1

960x480.sdp:

v=0
o=VideoServer 305419896 9876543210 IN IP4 192.168.0.2
s=VideoStream960x480
t=0 0
c=IN IP4 192.168.0.2
m=video 8000/2 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=0; profile-level-id=4D4033; sprop-parameter-sets=J01AM5WwPA9sBAIA,KO4G8gA=
a=control:trackID=1

할 수 있는 방법 이러한 개별 파일로 결합될 SDP 파일입니까?

도움이 되었습니까?

해결책

두 SDP 예제의 매개 변수는 매우 가깝습니다. 스트림 이름과 스프로프 파라미터 세트는 다릅니다. 스트림 이름에 신경 쓰지 않는다고 생각합니다. 별도의 Sprop-Parameter-sets가 필요한 경우 클라이언트가 표준 우물을 지원하는 경우 각 해상도에 별도의 동적 페이로드 유형을 사용할 수 있으며 다음과 같이 단일 SDP를 가질 수 있습니다.

    v=0
    o=VideoServer 305419896 9876543210 IN IP4 192.168.0.2
    s=VideoStream640x480
    t=0 0
    c=IN IP4 192.168.0.2
    m=video 8000/2 RTP/AVP 96 97
    a=rtpmap:96 H264/90000
    a=fmtp:96 packetization-mode=0; profile-level-id=4D4033; sprop-parameter-sets=Z01AM5ZkBQHtCAAAAwAIAAADAYR4wZU=,aO48gJ==
    a=rtpmap:97 H264/90000
    a=fmtp:97 packetization-mode=0; profile-level-id=4D4033; sprop-parameter-sets=J01AM5WwPA9sBAIA,KO4G8gA=
    a=control:trackID=1

다른 스트림 이름이나 다른 스프로프 파라미터 세트가 필요하지 않은 경우 다른 답변과 유사하게 첫 번째 SDP 및 스위치 형식 중간 스트림을 사용할 수 있어야합니다. H.264의 실제 페이로드 또는 특정 디코더가 응용 프로그램에서 작동하도록 충분히 잘 모르겠지만 화상 회의 애플리케이션이 변경 사항을 신호를 보내지 않고 해상도간에 동적으로 전환 할 수 있도록 매우 일반적입니다. 페이로드 유형.

다른 답변에서 언급했듯이 두 개의 SDP 문서를 연결할 수는 있지만이 경우에 도움이 될 것이라고 생각하지 않습니다. H.264 디코더는 내가 믿는 한 번에 단일 스프 롭 파라미터 세트 매개 변수로만 작동 할 수 있습니다. 두 SDP 모두 동일한 페이로드 유형, 소스 포트 등을 갖기 때문에 수신기는 어떤 Sprop-Parameter Sets 매개 변수를 사용 해야하는지 알지 못합니다. 업데이트 : 일부 구현은 SDP가 아닌 SPROPS를 밴드에 넣습니다 (또는 처음에는 SDP에서만). 환경에 적용되는 경우 SDP Sprop-Parameter-Sets가 밴드를 업데이트 할 수 있습니다.

참조 :

  1. RFC 3984 H.264 비디오 용 RTP 페이로드 형식
  2. 새로운 제안 H.264 RTP 페이로드 형식 RFC 6184
  3. RFC 4566 SDP : 세션 설명 프로토콜

전체 인용을하지 않아서 죄송합니다 - 자유롭게 수정하십시오

다른 팁

나는 RFC를 넘어 갔다 (RFC2327 -SDP : 세션 설명 프로토콜) 그리고 두 개의 SDP 문서를 연결할 수 있습니다. 문서는 명시 적으로 나타납니다.

SAP에 의해 SDP를 전달하면 패킷 당 하나의 세션 설명 만 허용됩니다. SDP를 다른 방법으로 전달할 때 많은 SDP 세션 설명이 함께 연결될 수 있습니다 (세션 설명의 시작을 나타내는`v = '라인은 이전 설명을 종료합니다)..

나는 그것이 당신의 디코더에 달려 있다고 생각합니다. 스트림 내부에서 매개 변수가 변경되는 경우, 해상도를 변경할 때 해당 헤더를 넣도록 인코더를 알려 주면 디코더가 자동으로 전환해야합니다.

당신의 질문은 정확히 무엇입니까? 그렇습니다 : 스트림을 멈추거나 다시 시작하지 않고 해상도를 어떻게 변경할 수 있습니까?

디코더에게 미리 알 수 없다고 생각합니다. 여기 SDP 마법으로 볼 수있는 잠재적 해상도가 있습니다. 디코더가 H264 매개 변수 변경을 이해할 수 있고, 괜찮습니다. 그렇지 않으면 괜찮습니다. 그렇지 않으면 모든 것을 다시 시작한 다음 동적 SDP가 충분합니다.

예를 들어 VLC는 MP4 인코딩 변경을 감지 할 수 있지만 (예 : 가변 비트 속도에서 일정한 비트 속도로 이동) SDP로 수행 할 수있는 유일한 방법은 다른 미디어 설명을 결합하는 것입니다. 예를 들어 다른 동적 페이로드 유형과 다른 제어 ID 속성으로.

당신이 할 수 있는 동적 페이로드를 변경 또는 스트림을 매개 변수를 설정하거나 변경하거나 SIP 다시 초대합니다.

페이로드의 변화가 있는 문제를 관리할 수 없는 경우 인코더와 디코더를 것을 확인할 필요가락 모두 페이로드,그리고 그들은 스위치를 탑재량이 올바르게(그리고 충분히 빠르다-당신을 위해 필요는 전혀 없습니다 해당).

에서 변경에 문제가 있는 경우에는 매개 변수를 설정 패킷을 잃게 됩니다.당신이 사용할 수 있는 다른 매개 변수 설정(스위치에서 매개 변수 설정 1 2 변경할 때)을 피하는 잘못된 해독하는 경우 집합은 분실,당신을 얻을 냉동 또는 빈 그림.내가 조언을 다시 전송하는 대신 그들을 몇 시간(지에서도 연속으로 빠르게).

SIP 다시 초대 is out-of-band 및 handshaked,따라서 안전이지만,추가 지연 어떤 스위치고 결함에 따라 수신기 및 수 있는 거절될 수 있습니다.

(주의:저는 저자의 RFC3984bis 업데이트 RFC3984)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top