MediaExtractor初解
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MediaRecord初解
- WXSTranistion 初解
- 初識 Java 註解Java
- dojo.connect初解
- Terraform - 初解Terraform - 變數ORM變數
- 初略講解Flutter Widget庫Flutter
- Android MVVM探索(一) - DataBiding初解AndroidMVVM
- 【解構雲原生】初識Kubernetes Service
- 初略講解Flutter的包管理Flutter
- flutter安裝詳解--初體驗--問題解決Flutter
- 初略講解Flutter的狀態管理Flutter
- 初略講解Flutter的資源管理Flutter
- 瞭解Vuex方法的使用初級篇Vue
- 【IOS開發初學者】UINavigationController詳解iOSUINavigationController
- 初略講解Flutter的文字及樣式Flutter
- 初略講解如何除錯Flutter應用除錯Flutter
- 手遊PC發行那些事:Steam初瞭解
- 初識Python,我想你應該瞭解這些...Python
- Spring Boot第五彈,WEB開發初瞭解~Spring BootWeb
- Flutter開發實戰初級(一)ListView詳解FlutterView
- 初識SAP解決方案及其上雲優勢
- Kotlin——初級篇(三):資料型別詳解Kotlin資料型別
- 第一天,初瞭解銳捷網路
- 初略講解Flutter的Wrap和Flow(流式佈局)Flutter
- 藍橋杯2015初賽生命之樹 DFS圖解圖解
- 初略講解基礎Widgets之Widget、StatelessWidget和StatefulWidget
- Flutter開發實戰初級(一)ListView詳解2FlutterView
- NOIP 2017初賽普及組C/C++答案詳解C++
- Java四大知識點講解,初學者必看!Java
- Flutter Web初嘗試以及一些問題解決FlutterWeb
- 初略講解Flutter的Align(對齊與相對定位)Flutter
- 例項講解:我的強化學習初體驗!強化學習
- 初學者Mybatis的初級使用MyBatis
- 初試
- 2021騰訊PC客戶端初賽題解(對大佬解題手法的學習)客戶端
- 適合初學者的who 命令的解釋與示例指南
- Docker 入門概述(適合初學者瞭解相關概念)Docker
- SAP 幾款容易令初學者混淆的 HANA 解決方案