ITPub博客

首页 > 移动开发 > ANDROID > MediaExtractor初解

MediaExtractor初解

原创 ANDROID 作者:山有木xi 时间:2020-12-20 17:36:08 0 删除 编辑

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博客 ” ,链接:https://blog.itpub.net/69917874/viewspace-2743797/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: MediaRecord初解
请登录后发表评论 登录
全部评论
Oracle OCA(Java),IBM高级工程师认证,中国软件行业人才(高级c语言),高级Android工程师,对数据库并发与性能调优也有一定了解

注册时间:2019-04-25

  • 博文量
    147
  • 访问量
    390777