RTSP 스트림에서 H.264 SPS/PPS 누락: VLC는 재생되지만 FFmpeg 또는 분석은 실패하는 이유

H.264 SPS/PPS 증거가 누락되면 허용 가능한 플레이어가 작동하는 것처럼 보이는 경우에도 RTSP 디코더 오류, 블랙 프레임 및 분석 실패가 발생하는 이유는 무엇입니까?

H264, RTSP, SPS, PPS, 디코더

카메라 엔지니어에게는 실망스러운 RTSP 실패 패턴이 익숙합니다. VLC는 스트림을 재생하지만 FFmpeg, VMS, 분석 파이프라인 또는 클라우드 수집 서비스는 디코더 오류로 인해 실패합니다. 지원 스레드는 종종 어떤 도구가 "올바른"지에 대한 논쟁이 됩니다. 더 나은 질문은 스트림이 새로운 디코더에 대한 충분한 H.264 매개변수 증거를 제공하는지 여부입니다.

H.264에는 시퀀스 매개변수 세트와 그림 매개변수 세트가 필요합니다. 엔지니어들은 보통 SPS와 PPS라고 부릅니다. 프로필, 레벨, 차원, 참조 동작 및 그림 구조 등 비트스트림을 디코딩하는 방법을 설명합니다. 이것이 없으면 디코더는 슬라이스 데이터를 볼 수 있지만 여전히 이를 프레임으로 변환하기 위한 유효한 컨텍스트가 없습니다.

SPS 및 PPS가 나타날 수 있는 위치

RTSP 배포에서 SPS/PPS 증거는 둘 이상의 위치에 나타날 수 있습니다.

  • SDP sprop-매개변수 세트
  • 슬라이스 전 대역 내 RTP 페이로드
  • 키 프레임 이전에 반복됨
  • 이전 세션에서 관대 한 플레이어가 캐시했습니다.
  • 다음 IDR을 기다린 후에만 배송됨

이는 "하나의 뷰어에서 작동" 문제를 설명합니다. 플레이어는 상태를 재사용하거나, 더 오래 기다리거나, 누락된 참조를 복구하거나, 오류 은폐를 적용할 수 있습니다. 엄격한 수집 서비스는 빈 디코더로 시작하여 SPS/PPS 및 사용 가능한 키 프레임이 도착할 때까지 스트림을 거부할 수 있습니다.

오류가 실제로 의미하는 것

"액세스 유닛의 사진 누락", "슬라이스 헤더 디코딩 오류", "존재하지 않는 PPS 참조" 또는 "SPS/PPS 대기 중"과 같은 메시지는 자동으로 카메라가 손상되었음을 의미하지 않습니다. 이는 디코더가 디코딩을 시도하는 시점에 필요한 매개변수 컨텍스트가 없다는 것을 의미합니다.

진단 질문은 다음과 같습니다.

  • SDP에 sprop-parameter-sets가 포함되어 있나요?
  • RTP 페이로드에 SPS 및 PPS가 표시되었습니까?
  • 첫 번째 조각이 나오기 전에 도착했나요?
  • 매개변수 세트 후에 IDR 프레임이 나타납니까?
  • 패킷 손실로 인해 매개변수 세트 패킷이 제거되었습니까?
  • 스트림이 GOP 중반에 시작되었나요?
  • 페이로드 유형이 SDP와 일치했습니까?

이러한 질문에 답하면 다음 조치가 더 명확해집니다.

Mid-GOP 스트림 시작이 위험한 이유

RTSP 클라이언트가 연결되면 많은 카메라가 현재 인코더 위치에서 전송을 시작합니다. 클라이언트가 mid-GOP에 참여하면 키 프레임 이전에 인터 프레임을 수신할 수 있습니다. 스트림이 정기적으로 SPS/PPS를 반복하지 못하는 경우 디코더는 다음 적절한 경계까지 기다리거나 실패할 수 있습니다.

모니터링 소프트웨어의 경우 다음과 같습니다.

  • 몇 초 동안 검은 화면
  • 첫 번째 프레임은 모션 또는 키 프레임 간격 이후에만 나타납니다.
  • 분석 파이프라인이 스트림을 거부합니다.
  • 리스트리머가 시작되지만 다운스트림 클라이언트가 실패함
  • 다시 연결한 후 가끔 복구됨

수정 사항은 카메라 측에서 발생할 수 있습니다. 키 프레임 간격을 줄이고, 매개변수 세트를 반복하고, 다른 스트림 프로필을 사용하거나, 다운스트림 제품이 더 엄격한 지원을 하는 경우 H.265에서 H.264로 전환합니다.

SDP는 하나의 주장입니다. RTP는 증거입니다

일부 카메라 시스템은 SDP에서 SPS/PPS를 광고합니다. 다른 사람들은 디코더가 대역 내 NAL 단위를 기다릴 것으로 예상합니다. 일부는 둘 다 수행합니다. 일부는 둘 다 정확하지 않습니다. 진단 보고서는 클레임과 페이로드를 비교해야 합니다.

유용한 증거는 다음과 같습니다.

  • SDP의 base64 매개변수 세트
  • RTP에서 관찰되는 H.264 NAL 단위 유형
  • 첫 번째 SPS/PPS 패킷 인덱스
  • 첫 번째 IDR 패킷 인덱스
  • 키프레임 준비 전 패킷 손실
  • 디코더 준비 상태

이는 "다른 플레이어를 시도해 보세요"보다 훨씬 강력합니다. SDP, 인코더 설정 또는 패킷화 동작을 변경할지 여부를 공급업체에 알려줍니다.

RTSP 검사기가 적합한 곳

RTSP Inspector는 재생을 가장하지 않고 RTSP, SDP, RTP/RTCP 및 코덱 구조를 검사하도록 설계되었습니다. SPS/PPS 케이스가 누락된 경우 제품은 엔지니어가 다음을 보여줄 수 있도록 도와야 합니다.

  • 스트림이 성공적으로 연결되었습니다
  • SDP는 매개변수 세트를 전달했거나 전달하지 않았습니다.
  • RTP는 매개변수 세트를 전달했거나 전달하지 않았습니다.
  • 패킷 손실이 첫 번째 디코드 경계에 영향을 미쳤거나 영향을 미치지 않았습니다.
  • 오류는 스트림 메타데이터, 네트워크 전달, 디코더 지원 또는 카메라 구성에 속합니다.

이것은 "VLC 작동" 주장을 해결하는 일종의 증거입니다. VLC 작업은 유용한 정보입니다. 스트림이 모든 소비자에게 깨끗하다는 증거는 아닙니다.

검색 쿼리가 "RTSP는 VLC에서 작동하지만 FFmpeg는 실패합니다."인 경우 다운스트림 시스템을 비난하기 전에 SPS/PPS, 키 프레임, 패킷 손실 및 SDP를 검사하십시오.