質問

mpeg-2 transport プログラムストリームファイルでビデオの幅と高さをプログラムで確認するにはどうすればよいですか?

編集:C ++を使用していますが、どの言語の例でも満足しています。 編集:質問を修正-それはおそらく私が尋ねていたプログラムストリームだった

役に立ちましたか?

解決

libmpeg2 (F / OSS MPEG2デコーダー)のソースコードをチェックアウトします。幅と高さは、 header.c mpeg2_header_sequence()関数で設定されているようです。ただし、特定の機能に制御がどのように流れるかはわかりません。 libmpeg2を使用してMPEG2ファイルを開き( 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ファイル形式について説明し、もう1つは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