当前位置: 首页 > news >正文

生活中的视音频技术

生活中的视音频技术

平时我们打开电脑中自己存电影的目录的话,一般都会如下图所示,一大堆五花八门的电影。(其实专业的影视爱好者一概会把影视文件分门别类的,但我比较懒,一股脑把电影放在了一起)

image

因为下载的来源不同,这些电影文件有不同的格式,用不同的后缀表示:avi,rmvb,mp4,flv,mkv等等(当然也使用不同的图标)。在这里需要注意的是,这些格式代表的是封装格式。何为封装格式?就是把视频数据和音频数据打包成一个文件的规范。仅仅靠看文件的后缀,很难能看出具体使用了什么视音频编码标准。总的来说,不同的封装格式之间差距不大,各有优劣。

注:有些封装格式支持的视音频编码标准十分广泛,应该算比较优秀的封装格式,比如MKV;而有些封装格式支持的视音频编码标准很少,应该属于落后的封装格式,比如RMVB。

下面演示一下如何使用视频播放器查看一个视频文件采用的视音频技术:

注:在这里使用Media Player Classic作为演示,实际上暴风影音,KMplayer这些操作都差不太多。

1.打开一个视频文件

2.在视频画面上右键单击,选择属性。

image

3.在弹出的“属性”对话框的“MediaInfo”选项卡中,就可以查看该视频文件采用的视音频技术了。如下图所示,“变形金刚预告片_h1080p.mov”采用MPEG4的QuickTime封装格式(MOV),采用了H.264(AVC)的压缩编码标准。
image

生活中的视音频技术到此为止,下面介绍一下具体的视音频技术。

视频播放器原理

视音频技术主要包含以下几点:封装技术,视频压缩编码技术以及音频压缩编码技术。如果考虑到网络传输的话,还包括流媒体协议技术。

视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤:解协议,解封装,解码视音频,视音频同步。如果播放本地文件则不需要解协议,为以下几个步骤:解封装,解码视音频,视音频同步。他们的过程如图所示。

image

1,解协议

解协议的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的描述等。解协议的过程中会去除掉信令数据而只保留视音频数据。例如,采用RTMP协议传输的数据,经过解协议操作后,输出FLV格式的数据。

2,解封装

解封装的作用,就是将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。

3,解码

解码的作用,就是将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。音频的压缩编码标准包含AAC,MP3,AC-3等等,视频的压缩编码标准则包含H.264,MPEG2,VC-1等等。解码是整个系统中最重要也是最复杂的一个环节。通过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。

4,视音频同步

视音频同步的作用,就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。

http://www.lryc.cn/news/193148.html

相关文章:

  • 一种用于肽图分析的烷化剂,Desthiobiotin-Iodoacetamide
  • 【(数据结构) —— 顺序表的应用-通讯录的实现】
  • macbook磁盘清理免费教程分享
  • cartographer_ros数据加载与处理
  • 设计模式-7种结构型模式
  • 华为李鹏:加速5G商业正循环,拥抱更繁荣的5.5G(5G-A)
  • Marin说PCB之CoilcraftBourns POC 电感的性能对比
  • 聊聊Maven的依赖传递、依赖管理、依赖作用域
  • centos6/7 SOCKS5 堆溢出漏洞修复(RPM方式)curl 8.4 CVE-2023-38545 CVE-2023-38546
  • C#,数值计算——数据建模Proposal的计算方法与源程序
  • 如何使用命令生成动态链接库.dll文件(保姆级教学)
  • Qt之模块介绍
  • Socks5代理和代理IP
  • 计算机指令、机器码
  • MyLife - Docker安装Consul
  • Leetcode刷题笔记--Hot61-70
  • python特别篇—github基本操作手册
  • tiktok直播websocket序列化与反序列化
  • 微信picker弹出之后 , 背景变成灰色是怎么做的
  • 通用考勤后台管理系统
  • LeetCode75——Day5
  • 面向C++模块的开源 IFC SDK
  • Docker开启远程访问+idea配置docker+dockerfile发布java项目
  • 基于nodejs+vue教学辅助管理系统
  • Qt 子线程中无限递归的信号槽导致主线程槽失效的原因和解决办法
  • 实施 DevSecOps 最佳实践
  • 第56节——redux-toolkit中的createAction——了解
  • 【数据结构】排序--选择排序(堆排序)
  • C# 图解教程 第5版 —— 第2章 C# 和 .NET Core
  • 数据结构 | Huffman TreeCode