音视频开发技术的进阶路线

2023-05-16

1. 音视频开发包括哪些内容

虽然一篇文章无法把音视频开发的知识点都介绍清楚,但是大概的学习路线还是可以梳理一下的,我们先看看下面这张图:

                       

其实说白了,音视频开发,就是要掌握图像、音频、视频的基础知识,并且学会如何对它们进行采集、渲染、处理、传输等一系列的开发和应用。

  • 采集:它解决的是,数据从哪里来的问题
  • 渲染:它解决的是,数据怎么展现的问题
  • 处理:它解决的是,数据怎么加工的问题
  • 传输:它解决的是,数据怎么共享的问题

每一个门类,都可以深挖,衍生出一个又一个充满技术挑战的话题,比如:如何更高效地渲染画面、如何提高音视频的压缩比,如何优化弱网下的音视频数据传输等等。

其实,音视频开发的技术积累,也没有那么难,带着问题去 Google,带着任务去实践,一切都不是问题,我们就从上面说的 4 个方向,逐个探索一下,有哪些知识点,是要我们去了解和掌握的。

 2.1 采集

采集,它解决的是,数据从哪里来的问题,那么,数据究竟从哪里来的呢 ?

                                       

其实无论在哪个平台,图像、视频最初都是来自摄像头,而音频最初都是来自麦克风,因此,做音视频采集,就要掌握如下的技术知识:

1. 系统的摄像头采集接口是什么,怎么用 ?
比如:
Windows:DirectShow
Linux:V4L2
Android:Camera
iOS:AVCaptureSession

2. 系统的摄像头采集的参数怎么配置,都是什么含义 ?
比如:分辨率、帧率、预览方向、对焦、闪光灯 等

3.  系统的摄像头输出的图像/视频数据,是什么格式,不同格式有什么区别 ?
比如:图片:JPEG,视频数据:NV21,NV12,I420 等

4. 系统的麦克风采集接口是什么,怎么用 
比如:
Windows:DirectShow
Linux:ALSA & OSS
Android:AudioRecord
iOS:Audio Unit

5.  系统的麦克风采集参数怎么配置,都是什么含义 ?
比如:采样率,通道号,位宽 等

6.  系统的麦克风输出的音频数据,是什么格式?
比如:PCM

2.2 渲染

渲染,它解决的是,数据怎么展现的问题,那么,数据究竟怎么展现呢 ?

            

其实无论在哪个平台,图像、视频最终都是要绘制到视图上面,而音频最终都是要输出到扬声器,因此,做音视频渲染,就要掌握如下的技术知识:

1. 系统提供了哪些 API  可以绘制一张图片或者一帧 YUV 图像数据的 ?
比如:
Windows:DirectDraw, Direct3D, GDI,OpenGL 等
Linux: GDI, OpenGL 等
Android:ImageView,SurfaceView,TextureView,OpenGL 等
iOS: CoreGraphics,OpenGL 等

2.  系统提供了哪些 API 可以播放一个 mp3 或者 pcm 数据 
比如:
Windows:DirectSound 等
Linux:ALSA & OSS 等
Android:AudioTrack 等
iOS: AudioQueue 等

2.3 处理

处理,它解决的是,数据怎么加工的问题,那么,数据究竟可以怎么加工呢 ?

首先,我们看看图像/音视频的数据可以做哪些加工 ?

              

其实无论在哪个平台,图像和音视频的加工,除了系统的 API,大多数都会依赖一些跨平台的第三方库的,通过掌握这些第三方库的原理和使用方法,基本上就可以满足日常音视频处理工作了,这些库包括但不限于:

1. 图像处理:OpenGL,OpenCV,libyuv,ffmpeg 等
2.视频编解码:x264,OpenH264,ffmpeg 等
3.音频处理:speexdsp,ffmpeg 等
4.音频编解码:libfaac,opus,speex,ffmpeg 等

因此,学习和掌握这些第三方库的使用,非常有必要。

2.4 传输

传输,它解决的是,数据怎么共享的问题,那么,数据究竟怎么共享呢 ?

共享,最重要的一点,就是协议。

互联网之所以能够如此蓬勃地发展,将整个世界都紧密联系在一起,其实是离不开 W3C 这个委员会的巨大贡献的,因为无论什么数据,要想在不同的国家、不同设备之间互联互通,离不开 “标准”,有了 “标准”,大家就能互相读懂对方。

因此,研究音视频传输,其实就是在研究协议,具体有哪些协议呢 ?

1. 音视频在传输前,怎么打包的,如:FLV,ts,mpeg4 等
2. 直播推流,有哪些常见的协议,如:RTMP,RSTP 等
3. 直播拉流,有哪些常见的协议,如:RTMP,HLS,HDL,RTSP 等
4. 基于 UDP 的协议有哪些?如:RTP/RTCP,QUIC 等

互联网环境下的音视频的传输,是一个非常有挑战和价值的方向,为了解决弱网下的传输延时、卡顿,提高用户体验,整个业界都在不断地进行着深入的探索和优化。

3.小结

音视频的路很长,更多的还是要靠自己去学习和实践,带着追求极致的精神去探索和优化,最终,大家都能快速成长,成为真正的行业专家!

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

音视频开发技术的进阶路线 的相关文章

  • web登陆退出测试点总结

    根据自己的测试经历 xff0c 又阅读了一些关于登陆测试的资料 xff0c 对web 登陆退出测试点做了一下总结 xff1a 界面测试 xff1a 1 登陆页面显示是否正常 xff1a 文字和图片能否正常显示 xff0c 相应的提示信息是否
  • 异常值检测算法

    闲话 xff1a 最近总是特别嗜睡 xff0c 不知为何床对我的引力总是让我死死的赖在上面 xff0c 大概是懒癌又犯了 要改 异常值分析是检验数据是否有录入错误以及含有不合常理的数据的过程 xff0c 忽视异常值的存在是十分危险的 xff
  • informer

    list watch机制 list watch有两部分组成 xff0c 分别是list和watch list非常好理解 xff0c 就是调用资源的list API罗列资源 xff0c 基于HTTP短链接实现 xff1b watch则是调用资
  • kubelet - container manager

    containerManager 负责 node 节点上运行的容器的配置信息 xff0c 如 cgroup cpu device xff1b pod的创建流程参考 xff1a http www tianfeiyu com p 61 2825
  • 理解TCP/IP网络通信原理

    为什么会有TCP IP协议 在世界上各地 xff0c 各种各样的电脑运行着各自不同的操作系统为大家服务 xff0c 这些电脑在表达同一种信息的时候所使用的方法是千差万别 就好像圣经中上帝打乱了各地人的口音 xff0c 让他们无法合作一样 计
  • 最新百度 阿里 华为 腾讯 谷歌面试笔试题及解析

    8月15日 xff0c 百度2道面试题 xff1a 1 来自 编程之美 的概率题 xff1a 一个桶里面有白球 黑球各100个 xff0c 现在按下述规则取球 xff1a 的 i 每次从通里面拿出来两个球 xff1b ii 如果取出的是两个
  • virsh的使用与实例步骤安装虚拟机

    Libvirt 有两种控制方式 xff0c 命令行和图形界面 图形界面 xff1a 通过执行名 virt manager xff0c 启动 libvirt 的图形界面 xff0c 在图形界面下可以一步一步的创建虚拟机 xff0c 管理虚拟机
  • Jboss低版本项目热部署到Jboss7

    Jboss低版本项目热部署到Jboss7 1 Jboss7 新特性 1 1 构建在 Modular Service Container上 xff0c 充分地利用了多核处理器的能力 xff0c 并发 按需启动服务 xff0c 启动速度更快 占
  • devstack安装openstack

    devstack是一套用来给开发人员快速部署Openstack开发环境的脚本 xff0c 其实对于整个安装过程没有什么好说的 xff0c 因为脚本写的很完善 xff0c 全程无脑式安装也没什么大问题 xff0c 但是因为公司里的网络环境不给
  • RBAC vs ABAC

    K8s在1 3版本中发布了alpha版的基于角色的访问控制 xff08 Role based Access Control xff0c RBAC xff09 的授权模式 相对于基于属性的访问控制 xff08 Attribute based
  • Attach detach controller manager 流程

    一 xff1a 初始化 1 adc 调用 InitPlugins 初始化 volumeplugins 1 1 初始化 dynamicplugins Currentlyonly Flexvolume plugins are dynamical
  • 网络时延的几个概念

    假设一个数据包X从路由器A到路由器B xff0c 我们来分析下 xff0c 在这种情况下 xff0c 数据包X从A到B的总时延 xff1a 当A接收到数据包时 xff0c 会检测数据包的首部 xff0c 决定将该数据包导向哪一个链路上 xf
  • 洗牌、发牌算法 (打乱扑克牌顺序)

    img alt src https img blog csdn net 20130504122806254 include lt stdio h gt include lt stdlib h gt include lt time h gt
  • X11,GTK,QT,GNOME的区别与联系(UI工具总结)

    1 X11是X Window System Protocol Version 11 xff08 RFC1013 xff09 xff0c 是X server和X client之间的通信协议 X server是xfree86 xorg驱动下的显
  • Metrics-server

    概述 从 v1 8 开始 xff0c 资源使用情况的监控可以通过 Metrics API的形式获取 xff0c 具体的组件为Metrics Server xff0c 用来替换之前的heapster xff0c heapster从1 11开始
  • 【推荐】真正的安卓网络摄像机(Android IPCamera)任意浏览器输入IP地址即可观看视频

    笔者打算寻找一款好用的安卓IPCamera xff0c 发现很多软件都需要安装特殊的监控端软件或者VLC播放器来接收RSTP视频流 xff0c 根本没法直接在浏览器中直接观看视频 多方寻找无果 xff0c 笔者遂决定自己开发一款IPCame
  • Xubuntu15.04更新系统源时出现错误提示W: GPG 错误:http://archive.ubuntukylin.com:10006 xenial InRelease: 由于没有公钥,无法验证

    在更新系统源后 xff0c 输入sudo apt get update之后出现提示 xff1a W GPG 错误 xff1a http archive ubuntukylin com 10006 xenial InRelease 由于没有公
  • ROS学习笔记-from ._tf2 import *出错问题的解决

    复现古月居教程中关于tf的一节 xff0c 使用tf时提示错误 File 34 home pangweijian catkin ws src learning tf scripts turtle tf listener py 34 line
  • rosdep init 错误的终极解决方法

    rosdep init 错误的终极解决方法 从网站上下载需要的文件 xff1a https github com Vision4UAV rosdistro tree master rosdep 将文件夹和五个文件下载下来 拷贝到 etc r

随机推荐

  • vs2017调用dll文件提示“LNK2019 无法解析的外部符号 “__declspec(dllimport) public: __cdecl ”解决方法

    如题 xff0c 通过vs2017定义的接口生成了dll文件并调用测试结果报错无法解析的外部符号 解决方法 xff1a 在C C 43 43 目录中包含dll对应的头文件 xff0c 库目录包含dll文件 xff0c 如下图所示 然后在链接
  • matlab使用app designer进行界面开发时,给控件的显示值进行赋值时,提示‘Text‘ 或‘Value‘ 必须为字符向量或字符串标量的解决办法

    使用 xff1a sprintf 39 s 39 taskID 进行变量值的格式化 如下图 xff1a 以及 xff1a
  • Chrome安装zotero connector 插件

    1 下载zotero connector插件 ZoteroConnectorv5 0 68 zip 其它文档类资源 CSDN下载 2 找到crx文件 xff0c 重命名为rar然后解压 3 打开扩展应用安装界面 4 打开开发者模式 xff0
  • 2011年工作总结---测试流程梳理

    主要针对半年测试工作中测试流程的梳理 根据各项目测试任务过程中自己的总结和学习 xff0c 这里介绍下测试各阶段的注意点 虽然以前也对测试各个阶段做了总结 xff0c 但是感觉很散很乱 xff0c 这里就整合一下以前的总结 xff0c 根据
  • 生成随机数的两种方法

    一 Math random 方法 它会生成一个大于等于0 0且小于1 0 0 0 1 0 的double类型的数字 public static void main String args 案例1 System out println 34
  • UnBBayes考虑时序因素时的推理

    最近在使用UnBBayes进行MEBN的研究 xff0c 有时候推理需要考虑上一时刻的状态 一开始总是无法产生前一时刻状态的节点 当加入证据 t pre 61 pretimeOf t now 后就可以正常出现上一时刻的状态的节点了
  • zotero文献管理软件插件配置终极教程

    zotero是一款开源免费的文献管理工具 xff0c 在各位大神制作的插件加持下 xff0c 对于我来说已经没有满足不了的文献管理需求了 xff01 xff01 xff01 现将zotero使用教程整理如下 首先感谢贡献zotero和zot
  • ROS多机器人时rviz无法显示机器人模型,提示:param robot_description not found by searchParam()

    如图所示 xff0c 使用ROS进行多机器人仿真时 xff0c RobotModel无法显示机器人模型 xff0c 提示 xff1a param robot description not found by searchParam 原因 x
  • xcode使用gdal库

    GDAL Geospatial Data Abstraction Library 是一个在X MIT许可协议下的开源栅格空间数据转换库 它利用抽象数据模型来表达所支持的各种文件格式 它还有一系列命令行工具来进行数据转换和处理 GDAL提供对
  • MAC系统版本AnyLogic提示the font “Times“ is not available

    问题原因 xff1a MAC新版本系统中移除了Times字体 导致JAVA运行出现问题 如图所示为需要安装的Times字体 解决方法 xff1a 重新安装TImes字体 下载地址
  • LIBTIFF读取tiff文件时,打印buf出错

    如图所示 xff0c 按照官网提供的例程读取tiff文件 xff0c 并打印读取的值时 xff0c 提示 xff1a Subscript of pointer to incomplete type 39 void 39 代码如下 xff1a
  • OHEM loss 源代码

    import numpy as np import torch import torch nn as nn class OhemCELoss nn Module def init self thresh ignore lb 61 255 s
  • git命令回退方法

    我们在使用git命令的时候 xff0c 有时候误输入命令 xff0c 导致需要回退到之前的状态 现在针对这种情况做一个汇总 xff1a 1 Git add回退 git status 先看一下add中的文件 xff0c 确定已经添加的文件 g
  • 思岚激光雷达A1使用

    1 使用思岚调试激光雷达测试软件 xff08 软件打开前和打开后雷达都是转动的 xff09 点击菜单栏上的扫面按钮 xff0c 扫描出周围的环境轮廓 方向和距离定义 测试完成 xff0c 关闭雷达测试软件 2 使用串口调试助手测试 测试A1
  • STM32读取MPU6050陀螺仪

    目录 一 硬件设计 1 模块说明 2 电气原理图 二 程序设计 1 工程创建 2 程序设计 xff08 1 xff09 main程序 xff08 2 xff09 IIC初始化 xff08 3 xff09 串口1配置 xff08 4 xff0
  • kalibr标定IMU

    kalibr标定IMU 必须明确的是 1 如何标定 2 标定的结果 3 如何验证标定结果的正确性 如何标定 标定所需文件 XX bag 包含有图片信息和IMU数据的ROS包 camchain yaml 包含相机的内参和畸变参数的文件 IMU
  • git diff和回退操作

    在git提交环节 xff0c 存在三大部分 xff1a working tree index file commit 这三大部分中 xff1a working tree xff1a 就是你所工作在的目录 xff0c 每当你在代码中进行了修
  • 基于Python socket利用TCP协议让上下位机 传输图片

    基于Python socket利用TCP协议让上下位机 传输图片 Notes 1 原理2 下位机代码 xff1a 3 上位机代码 xff1a Notes 之前用来做 基于QT 的物联网图形化软件的其中一个功能 xff0c 因为在这遇到过许多
  • Java中的final变量、final方法和final类

    1 final变量 final关键字可用于变量声明 xff0c 一旦该变量被设定 xff0c 就不可以再改变该变量的值 通常 xff0c 由final定义的变量为常量 例如 xff0c 在类中定义PI值 xff0c 可以使用如下语句 xff
  • 音视频开发技术的进阶路线

    1 音视频开发包括哪些内容 虽然一篇文章无法把音视频开发的知识点都介绍清楚 xff0c 但是大概的学习路线还是可以梳理一下的 xff0c 我们先看看下面这张图 xff1a 其实说白了 xff0c 音视频开发 xff0c 就是要掌握图像 音频