MediaExtractor初解

山有木xi發表於2020-12-20

MediaExtractor字面意思是多媒體提取器,它在Android的音影片開發裡主要負責提取影片或者音訊中的資訊和資料流

在Android音影片處理中,MediaExtractor的介面比較簡單,首先透過setDataSource()設定資料來源,資料來源可以是本地檔案地址,也可以是網路地址

extractor.setDataSource(videoPath)

然後可以透過getTrackFormat(int index)來獲取各個track的MediaFormat,透過MediaFormat來獲取track的詳細資訊,如:MimeType、解析度、取樣頻率、幀率等等:

extractor.getTrackFormat(i)

獲取到track的詳細資訊後,透過selectTrack(int index)選擇指定的通道:

然後選擇我們需要的軌道,可以是音訊軌道也可以是影片軌道

extractor.selectTrack(audioTrack)
MediaFormat trackFormat = extractor.getTrackFormat(audioTrack);

然後就是透過軌道讀取資料

int readSampleSize = extractor.readSampleData(byteBuffer, 0);

而如果想獲取其他資訊呢?這裡有幾種常見的資訊供選擇

int frameRate = mediaFormat.getInteger(MediaFormat.KEY_FRAME_RATE);//幀率
int tileWidth = mediaFormat.getInteger(MediaFormat.KEY_TILE_WIDTH);//圖塊解析度
int tileHeight = mediaFormat.getInteger(MediaFormat.KEY_TILE_HEIGHT);//圖塊解析度
int gridRows = mediaFormat.getInteger(MediaFormat.KEY_GRID_ROWS);//網格行
int gridColumns = mediaFormat.getInteger(MediaFormat.KEY_GRID_COLUMNS);//網格列
int pcmEncoding = mediaFormat.getInteger(MediaFormat.KEY_PCM_ENCODING);//PCM-編碼 模擬訊號編碼
float captureRate = mediaFormat.getFloat(MediaFormat.KEY_CAPTURE_RATE);//捕獲率
int sampleRate = mediaFormat.getInteger(MediaFormat.KEY_SAMPLE_RATE);//獲取取樣率
int bitRate = mediaFormat.getInteger(MediaFormat.KEY_BIT_RATE);//獲取位元
int channelCount = mediaFormat.getInteger(MediaFormat.KEY_CHANNEL_COUNT);//獲取聲道數量
int isAdts = mediaFormat.getInteger(MediaFormat.KEY_IS_ADTS);//是否為AAS
int colorFormat = mediaFormat.getInteger(MediaFormat.KEY_COLOR_FORMAT);//顏色格式
int maxWidth = mediaFormat.getInteger(MediaFormat.KEY_MAX_WIDTH);//最大寬度
int maxHeight = mediaFormat.getInteger(MediaFormat.KEY_MAX_HEIGHT);//最大高度


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2743797/,如需轉載,請註明出處,否則將追究法律責任。

相關文章