1. 程式人生 > >計算視訊檔案(包含PCR)播放頻寬的方法

計算視訊檔案(包含PCR)播放頻寬的方法

通過對碼流播放卡的分析,以及對公式的對照,對實際計算播放視訊檔案所用頻寬的方法進行了分析(附件中,帶有c語言的實現) 分析如下: 關鍵是最後計算頻寬的公式: PCRdelta = (uint64_t) ((uint64_t)PCR1 - (uint64_t)PCR0); bitRate = (double) ( ((double)(40608000000ULL)*((double)mpegPackets))/(double)(PCRdelta)); PCRdelta : 是相鄰N個PCR的PCR差值 mpegPackets : 是相鄰N個PCR,所包含的packet的數量(MPEG packet) 我們可以理解為: mpegPackets*188表示實際的資料                 而PCRdelta表示播放這段實際資料,總需要播放的總資料量. 則: (mpegPackets*188)/PCRdelta : 單位實際播放的資料中所包含的有效(MPEG packet)資料量 而我們目前所使用的VP播放卡,要求了,DVB-ASI輸出頻寬必須是216Mb/s 所以就有 bitRate/216000000 =  (mpegPackets*188)/PCRdelta   因此得到   bitRate = (double) ( ((double)(40608000000ULL)*((double)mpegPackets))/(double)(PCRdelta)); 所以,按照目前這樣分析,播放同一個包含pcr的視訊檔案,如果播放的DVB-ASI輸出總頻寬不同,則播放視訊檔案所分配的頻寬也應該不同
. ////////////////////////////////////////////////////////////////////////
//
//    This routine extracts the bitrate from the content file.
//    The content file must contain PCRs
//
////////////////////////////////////////////////////////////////////////
double getBitRate(FILE *fp)
{
    
// variables used to get bit rate from content file
    uint64_t PCR0 =0, PCR1 =0
    uint64_t PCRdelta;
    
double bitRate =0;
    uint32_t mpegPackets 
=0;
    uint32_t gotPCR 
=0;
    unsigned 
char m2tTmp[256];
    
int length;
    unsigned 
int PID =0;
    
    
//used to control "." output 
int sync =0;
           
    printf(
" Scanning content file for bit rate ");
    
for (;;) {
    
        length 
= fread(m2tTmp, sizeof(uint8_t), 188, fp);
        
if(length !=188break;
        mpegPackets
++;

        
if (sync %1200==0 ) {
            
//show user something while we loop 
            printf(".");
            
//force it out-may not otherwise appear in real time
            fflush(stdout);
        }


        sync
++;

        
// look for the sync byte
if(m2tTmp[0!=0x47{
            printf(
"vpSendspts: data corruption in content file ");
            fclose(fp);
            exit(
2);
        }


        
// we are going to scan through the first 10 PCRs in this content.
        
// According to the specifications that will be on the order of 
        
// every 40 milliseconds. We don't have to scan the whole file
        
// to get a good sense of its validity and bit rate.

        
// First see if the TS header indicates the presence of an
        
// adaptation field.
if(GET_DVBASI_ADAPT(m2tTmp) &0x02)  {
            
// Get the adaptation field and look for the presence of 
            
// a PCR in the adaptation field
if(GET_DVBASI_ADAPTLENGTH(m2tTmp) ==0{
                printf(
"Zero length AF ");
                
continue;
            }
                    

            
if(GET_DVBASI_ADAPTFIELD(m2tTmp) &0x10{
                
// Get the initial PCR and reset the counter
if(gotPCR ==10)  {        // skip the first few, some times they are bad!
                    PID = GET_DVBASI_PID(m2tTmp);
                    GET_DVBASI_PCR(m2tTmp, PCR0);
                    mpegPackets 
=0;
                }


                
// Look for the 10th PCR in this content and 
if((gotPCR >20&& PID == GET_DVBASI_PID(m2tTmp))   {
                
                    GET_DVBASI_PCR(m2tTmp, PCR1);                                            
                    PCRdelta 
= (uint64_t) ((uint64_t)PCR1 - (uint64_t)PCR0);                                                
                    bitRate 
= (double) ( ((double)(40608000000ULL)*((double)mpegPackets))/(double)(PCRdelta));
                         
                    
break;
                }

                gotPCR
++;
            }
// GET_DVBASI_ADAPTFIELD 
        }
//GET_DVBASI_ADAPT 
    }
// while read

    
//rewind file 
    rewind(fp);
    fflush(fp);
    
    
return(bitRate);
}

相關推薦

計算視訊檔案(包含PCR)播放頻寬方法

通過對碼流播放卡的分析,以及對公式的對照,對實際計算播放視訊檔案所用頻寬的方法進行了分析(附件中,帶有c語言的實現) 分析如下: 關鍵是最後計算頻寬的公式: PCRdelta = (uint64_t) ((uint64_t)PCR1 - (uint64_t)PCR

計算視頻文件(包含PCR)播放帶寬的方法 PCR計算碼率

公式 帶寬 .net 指向 div ive gpo 但是 重要性 關於PCR的重要性在網絡上到處都是,但是關於PCR的計算的帖子網上寫的卻不多 ,分析來,發現並不是一個很復雜的過程 在此 我簡單描述一下關於通過PCR計算碼率的過程。首先。我們要在TS流中找到 PSI信息表,

ffmpeg opencv 開啟視訊檔案,並且播放

// FFMpeg + OpenCV demo #include <stdio.h> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp>

[總結]Android 獲取本地視訊檔案路徑並播放的幾種方式

Android 獲取本地視訊檔案路徑的方式 在android 專案開發過程中,遇到獲取本地視訊檔案的問題,記錄一下獲取本地檔案的幾種方式。 首先說下sdcard在手機中的掛載位置。 android手

視訊檔案大小計算方法(終極篇附例項)

圖片原創 / 阿酷TONY / 2018-12-13 視訊檔案大小計算方法(終極篇附例項) 預估視訊儲存所需空間 為視訊伺服器所需容量大小提供參考數值 視訊檔案大小的計算 視訊檔案大小計算公式:(音訊位元速率+視訊位元速率) x 時長 / 8

opencv+vs2017實現視訊的讀取及播放,同時將每一幀圖片儲存在指定檔案

#include "highgui.h" #include <iostream> using namespace std; int main(int argc, char** argv) { cvNamedWindow("視訊播放器", CV_WINDOW_A

QT使用QMediaPlayer + QVideoWidget播放視訊檔案

QT使用QMediaPlayer + QVideoWidget播放視訊檔案 如需轉載請標明出處:http://blog.csdn.net/itas109 QQ技術交流群:129518033 目錄 文章目錄 QT使用QMediaPlayer

初夏小談:C/C++防止標頭檔案被重複包含的兩種方法及區別

防止標頭檔案被重複包含的兩種方式: 1.條件編譯的巨集 2.#pragma once 先來說說第一種: #ifndef __HEADNAME__H__ #define __HEADNAME__H__ //... //標頭檔案 #endif C/C++標準支援

關於NOKIA E71 播放視訊檔案(mp4等)的問題

因本人暫時不想更換智慧手機,目前打算繼續NOKIA E71到底,雖然螢幕較小,但也準備嘗試下視訊檔案的播放,NOKIA E71手機中自帶的或者通過手機本身錄影產生的視訊檔案播放正常,在將電腦上下載的flv視訊檔案直接通過優酷客戶端工具轉換為mp4(好像還支援3gp)檔案格式,然後傳輸到NOKIA E

ffmpeg解碼視訊檔案播放

        最近學習了一下如何使用ffmpeg解碼音視訊,網上的教程挺多但是也挺雜的,搞了好幾天,明白了ffmpeg解碼音視訊的大體流程,這裡記錄一下ffmpeg解碼視訊並播放音視訊的例子,但並沒有做音訊、視訊播放 的同步處理。 直接上程式碼: #include &l

windows下使用FFmpeg生成YUV視訊檔案播放(通過命令的方式)

一、YUV的定義   YUV是一種顏色編碼方法。它跟我們常見的RGB格式區分開來,常使用在各個視訊處理元件中。其中"Y"代表明亮度,"U"和"V"代表其色度。視訊播放器把市面上流行的MP4等格式的視訊檔案解碼出來,得到的一般會是YUV格式的資料,然後得進行轉碼(比如通過op

Unity在ios端視訊檔案無法播放的解決辦法

unity不管是用自帶的VideoPlayer還是AvPro等等外掛,部分視訊在pc端能完美播放,但是到IOS端就無法播放, 此時,我們只需利用工具將視訊檔案改為webm格式,將視訊編碼格式改為VP8即可 本人使用迅捷視訊轉換器轉換格式,轉換器下載連結:https

opencv無法讀取視訊檔案的解決方法

這是我嘗試解決的三種途徑,大家可以嘗試一下,本人現在已經能夠正常讀取。 1、檔案路徑是否正確; 2、是否有解碼器; 3、是否配置成功。 網上關於這三種途徑都有詳細教程,在此不一一贅述,僅提供三個連結,以供參考。 關於配置: 第一次寫部落格,對於引用網址

【Android實戰】播放assets或者raw資料夾下的視訊檔案

(1)assets資料夾下 AssetFileDescriptor afd = getAssets().openFd("guide_video.mp4");              mediaPlayer.setDataSource(afd.getFileDescript

android 播放assets檔案視訊檔案的問題

該方法不可以,還可以參考我的另文章:http://blog.csdn.net/moyunfei1987/article/details/37905625 今天做了一個功能,就是播放專案工程裡面的視訊檔案,不是播放SD卡視訊檔案。 我開始嘗試把視訊檔案放到 assets

關於webview適配H5上傳照片或者視訊檔案方法

一、需要實現的功能:用H5實現的App中需要在H5獲取手機中的照片或者視訊檔案上傳到伺服器。二、分析實現方法:由於不懂前端開發,不知道H5中有 input file之類的標籤控制元件,可以用來選擇檔案,剛開始的思路還是想著native 端是否要通過提供inputstream流

Html5學習筆記四—播放音訊和視訊檔案

1,  載入音訊檔案: Key word :<audio src=”路徑” controls=”controls”> Src是音訊路徑 ,controls屬性用來提供播放,暫停,音量控制 下面是一個簡單程式碼進行播放本地音訊 <!DOCTYPE HTML&

使用python播放視訊檔案

基於python和opencv實現的 import numpy as np import cv2 cap = cv2.VideoCapture('f:/rain_of_lovesickness.m

尼康視訊檔案丟失的恢復方法

尼康攝像機是日系品牌中比較大的廠商,其產品佔有較大的市場份額。尼康主流產品使用MP4和MOV兩種結構對視訊檔案進行打包封裝,和其它日系一樣尼康視訊檔案碎片數量是比較多的,這就導致用普通恢復軟體無法恢復丟失的資料!那麼尼康的視訊刪除後是否就無法恢復呢?答案是否定的,下邊我們介紹一個尼康視訊檔案恢復的簡單方法,無

Android使用MediaCodec硬解碼播放H264格式視訊檔案

前些時間,通過各種搜尋加請教了好幾個同行的朋友,在他們的指點下實現: RTSP+H264實時視訊播放播放及把實時視訊流儲存到手機SD卡中,再對儲存的H264格式檔案進行播放等基本功能。 非常感謝這些朋友的無私幫忙,在實現功能的同時,我也把他們提供的一