Android 深入系统完全讲解(28)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

先把这个理顺了这些内容打通对于学习音视频非常有用。
当我们知道这个我们再来看个东西MediaExtractor 这个是媒体的提取类。把音视频进
行分离。
我们的视频有两部分组成音频和视频这两个是在不同的轨道上默认是一个视频轨道
一个是音频轨道。但是有时候会有多个音轨比如选择器里面的国语港语这类选择实际
就是多个音轨选择不同的来播放。
它们在同一个校准时钟下运行保证同步。
这里我们看下 Demo
mFile = new File(getExternalCacheDir(),“demo.mp4”);
MediaExtractor extractor = new MediaExtractor();//实例一个 MediaExtractor
extractor.setDataSource(mFile.getAbsolutePath());//设置添加 MP4 文件路径
int count = extractor.getTrackCount();//获取轨道数量
Log.e(TAG, "轨道数量 = “+count);
for (int i = 0; i < count; i++){
MediaFormat mediaFormat = extractor.getTrackFormat(0);
Log.e(TAG, i+” 编 号 通 道 格 式 =
"+mediaFormat.getString(MediaFormat.KEY_MIME));
}
打印出来轨道的格式这里会出来
video/avc
audio/mp4a-latm
/后面的会变化代表具体的格式这个格式是解析轨道的时候需要的。前面的用来判断是
视频还是音频信息。
当我们获取到具体的轨道后可以获得一些信息
基本可以获取到的信息

  1. 获取 MIME 信息
  2. MediaFormat mediaFormat = extractor.getTrackFormat(0);//获取多媒体格式,因为是 demo 已经
    确定自己的视频文件没问题,所以直接获取 0 位轨道
    String mimeFormat = mediaFormat.getString(MediaFormat.KEY_MIME);//获取 MIME 格式内容
    Log.e(TAG, “mediaExtractor: 获取 MIME 格式内容=”+mimeFormat);
    2.获取语言格式(大多数情况是获取到空的字符串,但是至少不会报 null)
    MediaFormat mediaFormat = extractor.getTrackFormat(0);
    String language = mediaFormat.getString(MediaFormat.KEY_LANGUAGE);//获取语言格式内容
    Log.e(TAG, “mediaExtractor: 获取语言格式内容=”+language);
    3.视频的高度与宽度
    MediaFormat mediaFormat = extractor.getTrackFormat(0);
    int width = mediaFormat.getInteger(MediaFormat.KEY_WIDTH);//获取高度
    int height = mediaFormat.getInteger(MediaFormat.KEY_HEIGHT);//获取高度
    4.播放总时长
    long durationTime = mediaFormat.getLong(MediaFormat.KEY_DURATION);//总时间
    5.获取 MediaFormat 描述的数据缓冲区的最大字节数的键
    int maxByteCount = mediaFormat.getInteger(MediaFormat.KEY_MAX_INPUT_SIZE);//获取视频
    缓存输出的最大大小
    不确定可以获取到的信息
    1.获取采样率
    int sampleRate = mediaFormat.getInteger(MediaFormat.KEY_SAMPLE_RATE);//获取采样率
    2.获取比特率
    int bitRate = mediaFormat.getInteger(MediaFormat.KEY_BIT_RATE);//获取比特
    3.获取声道数量
    int channelCount = mediaFormat.getInteger(MediaFormat.KEY_CHANNEL_COUNT);//获取 声道
    数量
    4.获取最大高度与最大宽度
    int maxWidth = mediaFormat.getInteger(MediaFormat.KEY_MAX_WIDTH);//最大宽度
    int maxHeight = mediaFormat.getInteger(MediaFormat.KEY_MAX_HEIGHT);//最大高度
    5.获取颜色格式
    int colorFormat = mediaFormat.getInteger(MediaFormat.KEY_COLOR_FORMAT);//颜色格式
    6.获取帧率
    int frameRate = mediaFormat.getInteger(MediaFormat.KEY_FRAME_RATE);//帧率
    7.获取图块的高度与宽度
    int tileWidth = mediaFormat.getInteger(MediaFormat.KEY_TILE_WIDTH);//图块分辨率int tileHeight = mediaFormat.getInteger(MediaFormat.KEY_TILE_HEIGHT);//图块分辨率
    8.获取网格行
    int gridRows = mediaFormat.getInteger(MediaFormat.KEY_GRID_ROWS);//网格行
    9.获取网格列
    int gridColumns = mediaFormat.getInteger(MediaFormat.KEY_GRID_COLUMNS);//网格列
    10.PCM-编码 模拟信号编码
    int pcmEncoding = mediaFormat.getInteger(MediaFormat.KEY_PCM_ENCODING);//PCM- 编 码
    模拟信号编码
    11.捕获率
    float captureRate = mediaFormat.getFloat(MediaFormat.KEY_CAPTURE_RATE);//捕获率
    12.是否是 AAS
    int isAdts = mediaFormat.getInteger(MediaFormat.KEY_IS_ADTS);
    我们拿到数据之后就可以进行处理解码转码操作
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: android