سؤال

كيف يمكنني معرفة عرض وارتفاع الفيديو برمجياً في ملف mpeg-2 ينقل ملف تيار البرنامج؟

يحرر:أنا أستخدم لغة C++، لكن يسعدني الحصول على أمثلة بأي لغة.يحرر:سؤال مصحح - ربما كان ذلك عبارة عن تدفقات برنامجية كنت أسأل عنها

هل كانت مفيدة؟

المحلول

وتحقق من التعليمات البرمجية المصدر إلى libmpeg2 أو فك F / OSS MPEG2. يبدو أن يتم تعيين العرض والارتفاع في وظيفة mpeg2_header_sequence() في header.c. لست متأكدا من كيفية تدفق التحكم لأن وظيفة معينة، وإن كان. أنا أقترح فتح ملف MPEG2 في شيء باستخدام libmpeg2 (مثل إمبلاير ) وإرفاق المصحح لرؤية عن كثب بالضبط ما تقوم به.

نصائح أخرى

إذا كنت تستخدم دايركت، هناك طريقة في واجهة 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، والآخر هو RFC على نقل MPEG عبر RTP.

HTTP: // شبكة الاتصالات العالمية .fh-friedberg.de / fachbereiche / E2 / تيليكوم-العمل / zinke / عضو الكنيست / mpeg2beg / beginnzi.htm

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

قال هاميشمن أن إجابة آدم روزنفيلد هي ما يحتاجه.وهذا يجعلني أتساءل عن دقة السؤال.دفق نقل MPEG لا يفعل ذلك يملك رأس تسلسل الفيديو.تم العثور على هذا الرأس في دفق برنامج MPEG.

ليس لدي إجابة.كنت آمل فقط على عكس الأمل أن تكون إجابة شخص ما صحيحة، لأنني أحتاج إلى إجابة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top