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

这篇具有很好参考价值的文章主要介绍了Android 深入系统完全讲解(28)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

先把这个理顺了,这些内容打通,对于学习音视频非常有用。
当我们知道这个,我们再来看个东西,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
/后面的会变化,代表具体的格式,这个格式是解析轨道的时候需要的。前面的用来判断是
视频还是音频信息。
当我们获取到具体的轨道后,可以获得一些信息:
基本可以获取到的信息文章来源地址https://www.toymoban.com/news/detail-424297.html

  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);
    我们拿到数据之后,就可以进行处理,解码转码操作:

到了这里,关于Android 深入系统完全讲解(28)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【算法第十四天7.28】二叉树的最大深度,二叉树的最小深度 ,完全二叉树的节点个数

    链接 力扣104-二叉树的最大深度 思路 链接 力扣111-二叉树的最小深度 思路 链接 力扣222-完全二叉树的节点个数 思路

    2024年02月14日
    浏览(41)
  • 基于安卓Android的房屋租赁系统APP(源码+文档+部署+讲解)

    毕设帮助、技术解答、源码交流 联系方式见文末。 房屋租赁App设计的目的是为用户提供房源信息、租房订单、房源资讯等方面的平台。 与PC端应用程序相比,房屋租赁App的设计主要面向于房主,旨在为管理员和租客、房主提供一个房屋租赁App。租客可以通过APP及时查看房源

    2024年02月22日
    浏览(47)
  • pytorch中的矩阵切片操作完全讲解

    我们经常需要从2维或3维tensor中进行切片操作,比如从mask模型中取出mask所在位置的向量。 Talk is cheap, show me code.  以下所有维度从0开始,3维即 0,1,2 ----------------------------------------------------- 另外,pytorch的函数已经为 这种切片操作准备好了,用以下代码: batch[\\\"loss_ids \\\"] 是

    2024年02月14日
    浏览(45)
  • 完全背包问题(超级详细地讲解优化过程)

    完全背包和01背包的区别就在于01背包中,每个物品只能选择一次,而完全背包问题中,每个物品可以选择无限次。如果大家没有看过之前01背包的讲解的话,建议大家先去看看作者之前写的01背包问题,传送门:01背包问题 那么很明显,这道题符合动态规划的三个性质:最优

    2024年02月14日
    浏览(57)
  • 基于安卓Android的校园点餐系统APP(源码+文档+部署+讲解)

    毕设帮助、技术解答、源码交流 联系方式见文末。 使用点餐系统app相对传统点餐管理方式具备很多优点:首先可以大幅提高点餐信息检索,只需输入点餐相关信息就能在数秒内反馈想要的结果;其次可存储大量的点餐信息,同时点餐信息安全性有更高的保障;相比纸质文件

    2024年04月16日
    浏览(43)
  • 笑死!这个插件太绝了;AI开发者如何稳赚这一波;MidJourney完完完全手册;零经验开发儿时3D游戏 | ShowMeAI日报

    👀 日报周刊合集 | 🎡 生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 最近一段时间,百度文心大模型团队内的研发人员受到其他公司的疯狂追捧,有 3 年左右相关经验的员工,可以直接给到原先年薪的 2 倍。 一名长期跟踪AI人才的猎头证实这一消息,表示百万年薪

    2023年04月09日
    浏览(65)
  • hal深入剖析之aidl实战-android framework车机车载手机系统开发

    这个是hal工程根目录 接下来要创建aidl的文件存放目录 注意mkdir -p android/hardware/mytest其实就是包名目录,即模块包名就是android.hardware.mytest. 提示:这个如果为了项目的更加好的维护性建议到自己项目目标的vendor下面进行,目前只是为了演示方便,直接在system的hardware下面 创建

    2024年02月19日
    浏览(50)
  • 深入Android S (12.0) 探索Framework之输入子系统InputReader的流程

    第一篇 深入Android S (12.0) 探索Framework之输入系统IMS的构成与启动 第二篇 深入Android S (12.0) 探索Framework之输入子系统InputReader的流程 上一篇文章深入探索了 Android Framework 的输入系统 IMS 的构成与启动,对 IMS 的重要成员有了初步的理解,然后通过源码对 IMS 的整个启动流程进行

    2024年01月20日
    浏览(45)
  • “深入解析Maven:安装、创建项目和依赖管理的完全指南“

    Maven是一个流行的项目管理工具,被广泛用于Java项目的构建、依赖管理和部署。它提供了一种简单而强大的方式来管理项目的各个方面,使开发人员能够更专注于业务逻辑的开发,而不必花费过多时间和精力在构建和部署过程上。 在软件开发中,项目往往依赖于许多第三方库

    2024年02月13日
    浏览(43)
  • 数据结构----完全二叉树的时间复杂度讲解,堆排序

    目录 一.建堆的时间复杂度 1.向上调整算法建堆 2.向下调整算法建堆 二.堆排序 1.概念 2.代码思路 3.代码实现 我们就以极端情况考虑时间复杂度(满二叉树+遍历所有层) 假设所有节点个数为N,树的高度为h N = 2^0+2^1+2^2......+2^(h-1) 即N = 2^h - 1 h = log(N+1) 时间复杂度我们以交换次数为

    2024年03月14日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包