簡介
Android提供了一個MediaExtractor類,可以用來分離容器中的視頻track和音頻track。
- 使用步驟
-
通過setDataSource()設置數(shù)據(jù)源,數(shù)據(jù)源可以是本地文件地址,也可以是網(wǎng)絡地址:
MediaExtractor mVideoExtractor = new MediaExtractor(); mVideoExtractor.setDataSource(mVideoPath); -
可以通過getTrackFormat(int index)來獲取各個track的MediaFormat,通過MediaFormat來獲取track的詳細信息,如:MimeType、分辨率、采樣頻率、幀率等等:
for (int i = 0; i < mVideoExtractor.getTrackCount(); i++) { MediaFormat format = mVideoExtractor.getTrackFormat(i); }mediaFormat
封裝描述媒體數(shù)據(jù)格式的信息,無論是音頻還是視頻。媒體數(shù)據(jù)的格式被指定為字符串/值對。 -
獲取到track的詳細信息后,通過selectTrack(int index)選擇指定的通道:
if (format.getString(MediaFormat.KEY_MIME).startsWith("video/")) { mVideoExtractor.selectTrack(i); break; } -
指定通道之后就可以從MediaExtractor中讀取數(shù)據(jù)了:
while (true) { int sampleSize = mVideoExtractor.readSampleData(buffer, 0); if (sampleSize < 0) { break; } // do something mVideoExtractor.advance(); // 移動到下一幀 } -
在讀取結束之后,記得釋放資源:
mVideoExtractor.release();