문제

H264 RTP 패킷의 타임 스탬프에 대해 혼란스러워합니다. 비디오의 벽 시계 속도는 SIP SDP에서 정의한 90kHz라는 것을 알고 있습니다. 내 인코더의 프레임 속도는 정확히 30 fps가 아니며 가변적입니다. 즉석에서 15fps에서 30fps로 다양합니다. 따라서 고정 타임 스탬프를 사용할 수 없습니다.

누구든지 다음 인코딩 된 패킷의 타임 스탬프를 말해 줄 수 있습니까?
0 MINISECOND 후 인코딩 된 RTP 타임 스탬프 = 0 (시작 타임 스탬프 0을 보자)
50 밀리 초 후 RTP 타임 스탬프 =?
40 밀리 초 후 RTP 타임 스탬프 =?
33 마일 후인 인코딩 된 RTP 타임 스탬프 =?

인코딩 된 프레임 속도가 가변적 일 때의 공식은 무엇입니까?

미리 감사드립니다.

올바른 솔루션이 없습니다

다른 팁

RTP 타임 스탬프를 사용하여 인코더가 비디오를 10fps 또는 30fps로 인코딩하는지 여부는 중요하지 않습니다. 수신기에 두 프레임 사이의 일시 중지 시간이 얼마나되는지 알려줍니다. 따라서 각 프레임에 대해 즉석에서 결정합니다. 이렇게하면 1 초 (10fps)에 10 프레임을 보낼 수 있으며 다른 초에는 30 프레임 (30fps)을 보낼 수 있습니다. RTP 타임 스탬프를 올바르게 설정하면됩니다. 그리고 내가 당신의 질문을받는다면, 당신은 이것을하는 방법을 의심합니다 ...

시작 시간 스탬프를 0이면, 마지막 RTP 타임 스탬프에 100을 곱한 밀리 초의 벽시계 시간을 추가하거나 원하는 시간 스케일을 사용할 수 있습니다. 디코더 디코더 디코딩 비디오를 30fps로 디코딩하려면 각 패킷에 대해 333000에 RTP 타임 스탬프를 추가하지만 예를 살펴 보겠습니다.

Frame #      RTP Time   Time between frames [ms]
[  1]               0   0
[  2]           50000   50
[  3]           90000   40
[  4]          420000   33  

따라서 이와 같이 RTP 타임 스탬프를 설정하면 (Time in ms * 100000) 디코더로드 및 디코딩 프레임 1을 만들고 프레임 2를로드하고 디코딩하지만 프레임 2를 그리기 전에 50ms (프레임 1과 프레임 2의 시차) 동안 잠을 자게됩니다.

보시다시피, 디코더는 RTP 타임 스탬프를 사용하여 각각을 표시 할시기를 알 수 있으며 비디오가 30 또는 10fps로 인코딩 된 경우에도 상관하지 않습니다.

또한 비디오가 30fps 인 경우 매 초마다 30 개의 RTP 패킷이 있음을 의미하지는 않습니다. 때로는 100 이상이 될 수 있으므로 올바른 RTP 타임 스탬프 계산을 보장하는 공식이 없을 수 있습니다.

나는 이것이 당신이 필요로하는 것 같아 ... 내가 도와주기를 바랍니다.

이것에 대한 간단한 공식은 없습니다.

인코딩 전에 프레임을 샘플링하는 데 사용 된 즉각적인 것을 pts (프레젠테이션 타임 스탬프). 인코더의 범위를 벗어나서 프레임을 캡처 할 때 데이터 흐름에서 기억해야합니다.

거기에서 두 가지 가능성이 있습니다.

  1. H264 인코더는 B- 프레임을 생성하지 않으며 RTP 타임 스탬프는 PTS + 랜덤 오프셋이어야합니다 (모든 스트리밍 세션에서는 동일).
  2. 인코더가 B- 프레임 (또는 B- 슬라이스)을 생성하는 경우 B- 프레임에는 다음 프레임을 디코딩해야하므로 디코딩 순서를 수정해야하므로 이전에 전송해야합니다.

후자의 경우, RFC6184는 인코딩 된 NAL 장치를 스트리밍하는 여러 가지 방법이 있다고 명시하고 있습니다.

대부분의 스트리밍 소프트웨어는 "비 인터리브"라는 모드를 사용하여 RTP 타임 스탬프를 PTS + 오프셋으로 설정해야하지만 타임 스탬프가 단조로 증가하지 않도록 디코딩 순서로 보내야합니다. 이는 또한 클라이언트가 수신 된 순서대로 해독해야하며 PTS 순서에서 프레임을 재정렬하지 않아야합니다.

나는이 용어를 사용하지 않습니다 DTS 디코딩이 필요하지 않기 때문에 여기에 타임 스탬프 이것이 작동하기 위해서는 주문 만 있습니다.

RFC6184에 설명 된 마지막 모드는 NAL 장치를 재정렬 할 수있는 소위 인터리브 순서입니다. 이 경우 장치를 재정렬하려면 일부 응용 프로그램 논리를 구현해야합니다. 자세한 내용은 RFC6184를 참조하십시오.

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