前言
在摸索一段时间的音视频开发后, 越来越发现这个坑的深度真是特别的深. 除了了解 Android 自带的音视频处理 API 以外, 还得了解一些视频与音频方面的知识. 这篇博客就是主要讲解这方面的专业术语. 内容较多, 如果你需要进行音视频开发是必需静下心来了解这些.
术语目录
MIME 类型
分辨率
sample-rate 采样率
bitrate 比特率
frame-rate 帧速率
capture-rate 捕获率
Data Rate 码率
视频编码格式 / 解码格式
音频编码格式 / 解码格式
声道
MIME 类型
MIME 是什么? 截取一段百度百科的解释, 偷偷懒...
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型. 是设定某种扩展名的文件用一种应用程序来打开的方式类型, 当该扩展名文件被访问的时候, 浏览器会自动使用指定应用程序来打开. 多用于指定一些客户端自定义的文件名, 以及一些媒体文件打开方式.
它是一个互联网标准, 扩展了电子邮件标准, 使其能够支持:
非 ASCII 字符文本; 非文本格式附件 (二进制, 声音, 图像等); 由多部分(multiple parts) 组成的消息体; 包含非 ASCII 字符的头信息(Header information).
这个标准被定义在 RFC 2045,RFC 2046,RFC 2047,RFC 2048,RFC 2049 等 RFC 中. MIME 改善了由 RFC 822 转变而来的 RFC 2822, 这些旧标准规定电子邮件标准并不允许在邮件消息中使用 7 位 ASCII 字符集以外的字符. 正因如此, 一些非英语字符消息和二进制文件, 图像, 声音等非文字消息原本都不能在电子邮件中传输(MIME 可以).MIME 规定了用于表示各种各样的数据类型的符号化方法. 此外, 在万维网中使用的 HTTP 协议中也使用了 MIME 的框架, 标准被扩展为互联网媒体类型.
所以.. 还是没太明白? MIME 就是其实就是一个文件的类型标注, 当然你可能更熟悉文件名的后缀. 但是, 文件中的 MIME 会在文件创建或者编码的时候添加到文件头里. 所以, 不会被轻易的改动. 一般你右击文件的属性就可以查看到文件类型, 如下图:
图 1. 在这个文件的类型: 我们可以看到 video/mp4
图 2. 在这个文件里, 我们可以看到类型 image/jpeg
MIME 类型跟音视频开发有什么关联?
有些小伙伴在了解过 MIME 下一个疑问肯定是这个.
首先在 Android 开发中我们可以通过 MediaExtractor 方法获取到多媒体文件 MIME 的类型. 其中的各种 video/avc video/mp4v-es 格式是我们在开发音视频中一直需要时刻关注的东西. 如果你的项目对视频格式要求严格, 那么就需要在这方面做很多文章.
其次重点! 视频文件, 其实是图像文件与音频文件合并的一个文件. 所以它会包含 2 个甚至多个 MIME 类型. 图像一个类型音频一个类型, 如果多声道可能还会有多个音频. 这时候你就明白了 MIME 的主要作用, 就是在视频文件多个管道里找到图像类型的管道, 将图像的流与音频剥离开. 这样你就可以获得纯图像的流了. 看如下代码, 获取一个视频里的 MIME 类型:
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_media_extractor);
- mFile = new File(getExternalCacheDir(),"demo.mp4");
- mediaExtractor();
- }
- private void mediaExtractor(){
- try {
- MediaExtractor extractor = new MediaExtractor();
- extractor.setDataSource(mFile.getAbsolutePath());
- for (int i = 0; i < extractor.getTrackCount(); i++){
- MediaFormat mediaFormat = extractor.getTrackFormat(i);// 获取多媒体格式
- String mimeFormat = mediaFormat.getString(MediaFormat.KEY_MIME);// 获取 MIME 格式内容
- Log.e(TAG, "mediaExtractor: mimeFormat="+mimeFormat);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
最终结果:
2019-07-19 21:12:14.021 13202-13202/demo.yt.com.demo E / 测试 Demo: mediaExtractor: mimeFormat=video/mp4v-es
2019-07-19 21:12:14.023 13202-13202/demo.yt.com.demo E / 测试 Demo: mediaExtractor: mimeFormat=audio/3gpp
我们可以看到这个叫 demo.mp4 的文件, 包含了 2 个通道, 分别是视频的 MP4 与音频的 3gpp
分辨率
sample-rate 采样率
bitrate 比特率
frame-rate 帧速率
capture-rate 捕获率
Data Rate 码率
视频编码格式 / 解码格式
音频编码格式 / 解码格式
声道
来源: http://www.bubuko.com/infodetail-3128403.html