[회고록]규격 이해의 중요성

HW·2024년 3월 13일

SMPTE-ST-2022-6 규격에 OP-47 데이터가 디코딩 되지 않는 이슈가 발생했다.
데이터를 온전히 디코딩하고 있는지 확인하기 위해, 클라이언트로부터 pcap 파일을 제공 받아 RTP Payload를 파일로 덤프했다.
덤프한 파일은 SDI 포맷을 고려하더라도 yuv 포맷이 손상된 듯한 형태였다.

알고보니 제공 받은 pcap 파일은 스트리밍을 받고 있는 플레이어에서 tcpdump한 파일이었고, 스트리밍 시작과 끝을 tcpdump 했지만, 스트리밍을 보내고 있는 디코더에서 프레임 생성 시작이 아닌 중간 지점의 패킷부터 받은 덤프 파일이었다. 그래서 프레임 단위로 정렬이 되지 않은 채 덤프를 하여 손상된 듯한 형태를 보였던 것이었다.

그래서 RTP Header에서 비디오 프레임의 마지막 패킷을 알리는 M필드를 참조하여 프레임 시작과 끝을 덤프했더니 프레임 사이사이 알 수 없는 데이터가 채워졌다.
알고보니 RTP Payload는 최소 8바이트의 RTP Payload Header와 실질적인 ST-2022-6 규격의 1376 바이트의 Payload로 나눠져 있었다. 그래서 RTP Payload Header 크기를 계산하고 실질적인 데이터만을 파일로 덤프하게 됐다.

덤프 파일을 확인해보니 영상은 두 필드로 나눠진 인터레이스 영상이었고, 디코더는 Top 필드의 VANC 영역만을 디코딩하고 있었다. Bottom 필드의 VANC를 액티브 영상 영상으로 판단해 해당 영역의 OP-47 데이터가 디코딩 되지 않았던 것이었다.

이를 해결하기 위해, 인터레이스 영상일 경우 액티브 영상 영역 사이에 있는 VANC에서도 데이터 확인을 하도록 코드를 수정했다.

규격 이해는 개발자의 필수 역량이다. 이 경험을 통해 관련 규격 문서를 꼼꼼하게 읽고 이해하고 지속적인 업데이트로 최신 정보를 습득해야 정확한 구현과 문제 해결을 할 때 나와 똑같은 상황에 처한 누군가에게 도움을 받고, 도움이 되는 정보를 제공할 수 있음을 알게되었다.

profile
예술융합형 개발자🎥

0개의 댓글