문제

MPEG-2에서 비디오의 너비와 높이를 프로그래밍 방식으로 어떻게 알 수 있습니까? 수송 프로그램 스트림 파일?

편집 : C ++를 사용하고 있지만 모든 언어로 예제에 기뻐합니다. 편집 : 수정 된 질문 - 아마도 내가 묻는 프로그램 스트림 일 것입니다.

도움이 되었습니까?

해결책

소스 코드를 확인하십시오 libmpeg2, F/OSS MPEG2 디코더. 너비와 높이가 mpeg2_header_sequence() 기능 header.c. 그러나 제어가 특정 기능으로 어떻게 흐르는 지 잘 모르겠습니다. 나는 libmpeg2 (예 : mplayer) 그리고 디버거를 첨부하여 그것이하는 일을보다 정확하게 볼 수 있습니다.

다른 팁

DirectX를 사용하는 경우 vmrwindowlesscontrol 인터페이스에 메소드가 있습니다.

piwc->GetNativeVideoSize(&w, &h, NULL, NULL);

또는 IbasicVideo 인터페이스 :

pivb->GetVideoSize(&w, &h);

MPEG2 비디오의 경우 가로 및 수직 크기는 비디오 시퀀스 헤더 (비디오 비트 스트림에서)에서 찾을 수 있습니다. 시퀀스 헤더 코드는 0x000001B3입니다. 아래의 일부 예제 코드. 그러나 순서 연장 헤더에 지정된 경우 수평/수직 크기 확장을 고려하지 않습니다.

#define VIDEO_SEQUENCE_HDR  0xB3
#define HOR_SIZE_MASK       0xFFF00000
#define HOR_SIZE_SHIFT      20
#define VER_SIZE_MASK       0x000FFF00
#define VER_SIZE_SHIFT      8

unsigned char *pTmp = tsPacket;
int len = 188;
int horizontal, vertical;

 while(len>0 && !horizontal && !vertical)
 {        
        if(*pTmp == 0 && *(pTmp+1) == 0
           && *(pTmp+2)== 0x01 && *(pTmp+3) == 0xB3 && (len-1) >0)
        {
            unsigned int *pHdr = (unsigned int *)pTmp;    
            pHdr++ ; 
            unsigned int secondByte = ntohl(*pHdr);
            horizontal = (secondByte & HOR_SIZE_MASK) >> HOR_SIZE_SHIFT;
            vertical = (secondByte & VER_SIZE_MASK) >> VER_SIZE_SHIFT;           
            break;
        }
        pTmp++;
        len--;
    }

당신은 어떤 언어를 사용하고 싶은지 말하지 않았으므로 코드 샘플을 얻을 것입니다.

다음 링크를 살펴보십시오. 첫 번째는 MPEG-2 파일 형식을 설명하고 다른 하나는 RTP를 통해 MPEG를 전송하는 RFC입니다.

http://www.fh-friedberg.de/fachbereiche/e2/telekom-labor/zinke/mk/mpeg2beg/beginnzi.htm

http://www.ietf.org/rfc/rfc2250.txt

Hamishmcn은 Adam Rosenfield의 대답이 그가 필요한 것이라고 말했다. 이것은 질문의 정확성에 대해 궁금해합니다. MPEG 전송 스트림은 그렇지 않습니다 가지다 비디오 시퀀스 헤더. 해당 헤더는 MPEG 프로그램 스트림에서 발견됩니다.

나는 대답이 없다. 나는 누군가의 대답이 옳았다는 희망에 반대하고있었습니다.

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