热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何从开发小白到音视频专家

原文地址:http:blog.csdn.netdev_csdnarticledetails78738806作者:卢俊,七牛云客户端团队技术负责人。拥有丰富的音视频领域的开发和实战

原文地址:http://blog.csdn.net/dev_csdn/article/details/78738806

作者:卢俊,七牛云客户端团队技术负责人。拥有丰富的音视频领域的开发和实战经验,先后开发过 Android 播放 SDK、Android 推流 SDK、短视频 SDK,并主导了七牛连麦系统的设计和实现。服务过上百家直播客户,包括熊猫、全民、龙珠、汽车之家、懂球帝等。

本文整理自卢俊的演讲,目标读者是对音视频开发感兴趣但是又不知道如何下手的初学者们,希望对大家有所帮助。

1. 成长的烦恼

经常收到一些网友的来信或者留言,反馈如下这样的困惑:

“我是一名应届毕业生,该如何快速地成长起来”
“我只懂 C/C++,是学 Android 开发有前途,还是 iOS 开发有前途?”
“我是一名 Android/iOS 开发,已经可以独立完成一个完整的 App 开发上线,该如何继续提升?”
“我想从事音视频开发,该如何入门? 如何进阶 ?”

很高兴看到大家有这样的问题,因为这也从侧面反映了你是一个积极向上,想不断努力来提升自己的人。

我就先从一个简单的问题聊起,“到底 Android 开发有前途还是 iOS 开发有前途?”

其实这个问题跟 “PHP 是不是世界上最好的语言一样”,只会引发争论,却没有什么实际价值,在我看来,无论是 Windows、Linux、Android 还是 iOS 开发,都没有什么优劣之分,它们其实都有着很多的共同点,那就是:

都是基于操作系统提供的 API 完成特定需求的实现

当然,也有些不同的地方,比如:

  • 系统的 API 和特性不同
  • 编程语言不同,Windows/Linux 以 C/C++ 为主,Android 以 Java 为主,iOS 以 Object C 为主等等

但无论什么平台,他们的学习曲线其实是类似的,都要经历差不多如下的环节:

  • 学习对应平台的编程语言,如:C/C++,Java,Object C,Javascript 等
  • 熟悉对应平台提供的 API,如:UI 库,网络,文件,数据库, 图片处理,多媒体处理 等等
  • 掌握平台相关的特性、框架和原理,如:Windows 的 WINSOCK,ODBC,WPF 等,Unix 的设计哲学,Android 的四大组件,iOS 的 MVC 模式等等
  • 通过具体的项目,熟悉和练手,达到可完成任意功能的开发

当你已经走到第 4 步了后,往往就会感觉遇到了瓶颈,产生如文章开头的问题,下一步何去何从 ?

其实我一直有一个观点,就是:

“基于平台的 API 做应用开发,并不是一个可以走得多远的方向,真正有价值的地方在于与具体的业务方向结合”,比如:

  • 网络安全
  • 音视频
  • 智能硬件
  • 深度学习
  • 大数据
  • 其他(比如:金融、通信等)

在具体的业务领域,你可以慢慢沉淀下来,用自己的努力和时间换来对领域知识的深入理解和积累,逐渐从一个开发小白走向最懂这个行业的专家。

今天呢,我就主要跟大家分享下,如果你对音视频这个领域感兴趣,应该如何入门和提高 ?

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

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

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

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

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

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

2.1 采集

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

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

a. 系统的摄像头采集接口是什么,怎么用?

比如:

Windows:DirectShow
Linux:V4L2
Android:Camera
iOS:AVCaptureSession

b. 系统的摄像头采集的参数怎么配置,都是什么含义 ?

比如:分辨率、帧率、预览方向、对焦、闪光灯 等

c. 系统的摄像头输出的图像/视频数据,是什么格式,不同格式有什么区别 ?

比如:

图片:JPEG;
视频数据:NV21,NV12,I420 等

d. 系统的麦克风采集接口是什么,怎么用 ?

比如:

Windows:DirectShow
Linux:ALSA & OSS
Android:AudioRecord
iOS:Audio Unit

e. 系统的麦克风采集参数怎么配置,都是什么含义 ?

比如:

采样率、通道号、位宽等

f. 系统的麦克风输出的音频数据,是什么格式?

比如:

PCM

2.2 渲染

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

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

a. 系统提供了哪些 API 可以绘制一张图片或者一帧 YUV 图像数据的 ?

比如:

Windows:DirectDraw, Direct3D, GDI,OpenGL 等
Linux: GDI, OpenGL 等
Android:ImageView,SurfaceView,TextureView,OpenGL 等
iOS: CoreGraphics,OpenGL 等

b. 系统提供了哪些 API 可以播放一个 mp3 或者 pcm 数据 ?

比如:

Windows:DirectSound 等
Linux:ALSA & OSS 等
Android:AudioTrack 等
iOS: AudioQueue 等

2.3 处理

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

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

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

a. 图像处理:OpenGL,OpenCV,libyuv,ffmpeg 等
b. 视频编解码:x264,OpenH264,ffmpeg 等
c. 音频处理:speexdsp,ffmpeg 等
d.音频编解码:libfaac,opus,speex,ffmpeg 等

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

2.4 传输

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

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

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

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

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

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

3.小结

限于篇幅原因,经验分享就到这里了,音视频的路很长,更多的还是要靠自己去学习和实践,带着追求极致的精神去探索和优化,相信大家都能快速成长,成为真正的行业专家!


推荐阅读
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
author-avatar
游走的小张
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有