惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News | PayPal Newsroom
H
Hackread – Cybersecurity News, Data Breaches, AI and More
雷峰网
雷峰网
NISL@THU
NISL@THU
V
Vulnerabilities – Threatpost
P
Privacy International News Feed
博客园_首页
P
Privacy & Cybersecurity Law Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The Cloudflare Blog
Know Your Adversary
Know Your Adversary
小众软件
小众软件
人人都是产品经理
人人都是产品经理
WordPress大学
WordPress大学
博客园 - 聂微东
Hacker News - Newest:
Hacker News - Newest: "LLM"
T
Tor Project blog
C
Cybersecurity and Infrastructure Security Agency CISA
V
V2EX
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
J
Java Code Geeks
M
MIT News - Artificial intelligence
PCI Perspectives
PCI Perspectives
T
The Blog of Author Tim Ferriss
美团技术团队
Jina AI
Jina AI
D
Darknet – Hacking Tools, Hacker News & Cyber Security
L
LINUX DO - 最新话题
Cloudbric
Cloudbric
Webroot Blog
Webroot Blog
V2EX - 技术
V2EX - 技术
爱范儿
爱范儿
S
Securelist
MyScale Blog
MyScale Blog
B
Blog
AI
AI
L
LINUX DO - 热门话题
Security Archives - TechRepublic
Security Archives - TechRepublic
The Register - Security
The Register - Security
I
Intezer
有赞技术团队
有赞技术团队
Google Online Security Blog
Google Online Security Blog
云风的 BLOG
云风的 BLOG
H
Help Net Security
D
DataBreaches.Net
K
Kaspersky official blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
The Last Watchdog
The Last Watchdog
Attack and Defense Labs
Attack and Defense Labs
酷 壳 – CoolShell
酷 壳 – CoolShell

音视频开发进阶

音视频教程-第三节 音视频教程-第二节 真的,AI 可能就是新时代的信息差 充值 Cursor 之后,工作有了哪些变化?🤔 个人'蒸馏'大模型能做哪些有意思的事情 DeepSeek 大模型在 Mac 上的部署和运行 音视频教程-第一节 【WebRTC 专栏】-- Android 开发集成 WebRTC 库的几种方式 【WebRTC 专栏】-- 在 Mac M1 等系列芯片编译和开发 WebRTC-Android 库 Meta Llama3 大模型在 Mac 上的部署和运行 iOS VideoToolBox 解码 HEVC Open-GOP 视频的问题排查 Flutter 状态管理之 InheritedWidget 使用和分析 用 ChatGPT 回答技术问题怎么样 ? 音视频开发系统入门大致路线 UE 4.27 添加自定义 ShadingModel 用 UE4 虚幻引擎做个捏脸小功能~~ UE4 材质练习 之 凹凸贴图偏移的使用 UE4 材质练习系列基础 OpenGL上下文创建以及共享机制 007 | 播放器系列专栏-解析 MP4 文件读取信息 006 | 播放器系列专栏-在 Mac 上查看 MP4 格式信息 干货 | 快速抽取缩略图是怎么练成的? 关于直播、WebRTC、FFmpeg 的那些事 005 | 播放器系列专栏-在 Windows 上查看 MP4 格式信息 将音视频中的花屏、绿屏、黑屏问题一网打尽 关于音视频里面的解码帧率和渲染帧率 004 | 播放器系列专栏-认识MP4视频(下) 003 | 播放器系列专栏-认识MP4视频(上) 入门或者转行音视频,应该要怎么做? H264视频文件如何缩放分辨率 002 | 播放器系列专栏-FFmpeg依赖库的配置 001 | 播放器系列专栏-关于播放器项目的一个小实践 Seek策略以及在有B帧情况下的处理 目前流媒体开发工程师工作内容主要是什么? 一个音视频领域专业问答的小圈子 干货收藏 || Vulkan Game Engine 视频教程 音视频春节假期内卷指南(实操) Vulkan 在 FFmpeg 中的支持 Windows 下 FFmpeg 和 LibX264 的编译和配置 Metal 开发 | 使用 C++ 进行接口调用 音视频开发工作经验分享 || 视频版 FFmpeg 调用 MediaCodec 硬解码到 Surface 上 代码吸猫 | 用 OpenGL 图像渲染的养猫计划 百倍变速--解码到底能不能丢 非参考帧 ?FFmpeg 有话说!!! 老生常谈-FFmpeg 的编译问题轻松搞定 FFmpeg 调用 Android MediaCodec 进行硬解码(附源码) 【WebRTC 专栏】--创建相机预览 Unity Shader 光照基础之 Half Lambert 光照模型 Unity Shader 光照基础之Lambert光照模型 Unity Shader 光照基础内容 Unity Shader 显示一张图片纹理 UnityShader 的基本概念 Unity 物体的基本操作 C++ 模板系列小结07-尾置返回类型 C++ 模板系列小结06-可变参数模板特性 C++ 中的多线程的使用和线程池建设 C++ 模板系列小结05-模板类型作为模板参数 C++ 模板系列小结04-类模板中的成员模板 C++ 模板系列小结03-在模板中指定变量类型 C++ 模板系列小结02-非类型模板参数 C++ 模板系列小结01-函数模板和类模板 从零打造渲染引擎系列01-什么是渲染引擎 iOS开发 - 在 Swift 中去调用 C/C++ 代码 2021 技术新番 - 从零打造渲染引擎系列 iOS 音视频开发的一些基础准备工作 音视频交流群又来啦~~~ 【WebRTC 专栏】WebRTC & Android 开发学习环境搭建~ 【喜大普奔】域名终于备案通过啦 Shader 优化 | OpenGL 绘制网格效果 【音视频连载-011】第二季 FFmpeg 一层一层获取文件信息 KodeLife | Shader 实时编辑预览的强大工具使用实践 推荐几个堪称教科书级别的 Android 音视频入门项目 【音视频连载-010】第二季 FFmpeg 日志打印 【音视频连载-008】基础学习篇-SDL 播放 PCM 音频文件(下) 【音视频连载-007】基础学习篇-SDL 播放 PCM 音频文件(上) 【音视频连载-006】基础学习篇-SDL 播放 YUV 视频文件 【音视频连载-005】基础学习篇-SDL 加载 YUV 文件并显示 【音视频连载-004】基础学习篇-SDL 加载图片并显示 【音视频连载-003】基础学习篇-SDL 消息循环和事件响应 【音视频连载-002】基础学习篇-SDL 创建窗口并显示颜色 【音视频连载-001】基础学习篇- SDL 介绍以及工程配置 LearnOpenGL 源码在 MAC 上的编译与调试 2019 年终总结与回顾 Android NDK 开发的免费技术视频来啦~~ OpenGL 实现视频编辑中的转场效果 OpenGL 实践之贝塞尔曲线绘制 图像库 libjpeg-turbo 编译与实践 图像库 libpng 编译与实践 rust 开发编译 Android 动态库实践 Android NDK 开发 —— 从 Assets 文件夹加载图片并上传纹理 简单易用的图像解码库介绍 —— stb_image 博客图床迁移记 进击的 Vulkan 移动开发之 SwapChain 进击的 Vulkan 移动开发之 Command Buffer 进击的 Vulkan 移动开发之 Instance & Device & Queue Java 显式锁 Lock 与条件队列 C++ 标准容器库小结 MediaCodec 硬编码之相机内容编码成 H264 文件 一文读懂 YUV 的采样与格式 《OpenGL ES 3.x 游戏开发》碰撞检测之 AABB 包围盒
进击的 Vulkan 移动开发(一)之今生前世
音视频开发进阶 · 2018-12-07 · via 音视频开发进阶

一个专注音视频领域的小圈子

捋一捋 Vulkan 。

文章开始之前先来讲一讲《王者荣耀》,作为曾经珠海市香洲区第五十号鲁班七号,可是有着辉煌的战绩。

18年9月份的时候,小米出了小米8青春版,采用高通骁龙660处理器,并且支持《王者荣耀》Vulkan 版;同年11月,老东家魅族也出了魅族 X8,采用710处理器,开始支持《王者荣耀》Vulkan 版。

可见这年头,没有个支持 Vulkan 的手机,玩起游戏来都不好意思再闪现交大、越塔强杀了。

那么 Vulkan 到底是何方神圣,让各路手机厂商在发布新品时都会强调它呢?

正如 维基百科 中写道:

Vulkan是一个低开销、跨平台的二维、三维图形与计算的应用程序接口(API)。

与 OpenGL 类似的是,Vulkan 针对全平台即时3D图形程序(如电子游戏和交互媒体)而设计,并提供高性能与更均衡的CPU与GPU占用。

与 OpenGL 区别的是,Vulkan是一个底层API,而且能执行并行任务。除此之外,Vulkan还能更好地分配多个CPU核心的使用。

简单来说,Vulkan 与 OpenGL 功能类似,都是二维、三维图形绘制接口,但是 Vulkan 功耗更低,可以节省电量,同时在 CPU 与 GPU 调度上更均衡,发挥硬件的性能,最后的结果就是打《王者荣耀》时帧数更高、更稳定、耗电更低。

口说无凭,一起来看个测评视频吧 First comparison of Vulkan API vs OpenGL ES API on ARM ~~~

视频地址(科学上网):https://www.youtube.com/watch?v=rvCD9FaTKCA

视频截图一张,作为示例:

在 ARM 平台上作为对比,可以看到,渲染同样的场景,OpenGL ES 的 CPU 使用率达到了 50%,并且是单核在高速运行,类似于一核有难,三核围观;反观 Vulkan 版本的绘制,CPU 的使用率目测不到 20%,而且是四核都参与了运算,这样一来,Vulkan 当然更加省电、功耗低了。

Vulkan 和 OpenGL 的今生前世

难免还是要讲一些历史。

OpenGL 主要是由 Khronos Group (科纳斯组织)在进行维护。它最早的版本发布于 1992 年,那时候还是 OpenGL 1.0 固定渲染管线的年代,现在已经到了 OpenGL 4.6 版本,早已经是可编程渲染管线了。并且为了能够在嵌入式设备上使用 OpenGL ,还有了一个子集叫做 OpenGL ES ,同样的技术还得弄两个名字就很不好了(文章中把两者统称 OpenGL ,暂不做详细区分)。

后来这个组织在 18年3月 由发布了 Vulkan 1.1 正式版本。另外,不管是在嵌入式设备上还是 PC 上,它都只有一个名字了。随着 Vulkan 的逐渐发展,也就意味着 OpenGL 的维护将要停止更新了,后续也是添加一些新的拓展在里面。

与 OpenGL 一样,Vulkan 也是支持跨平台的。但不同的平台愿不愿意让它跨就又是另外一回事了。在 iOS 平台上,苹果公司主推自家的 Metal 图形接口;在 Windows 平台上,微软公司主推 DirectX 图形接口。两家大厂都有自己的脾气,Vulkan 想要做到一统江湖还有很长的一段路要走。

但对于 Android Developer 就不一样了,Android 从 7.0(Nougat) 开始加入了对 Vulkan 的支持,可见谷歌对它还是有信心的。

至于 Vulkan 在实际中到底有哪些用处呢?除了熟知的《王者荣耀》,目前市面上的应用中使用 Vulkan 的确实不多,如果有的话,也是在游戏中。

反观 OpenGL ,近年来很火的音视频应用中都能看到它的身影,比如相机滤镜、贴纸、视频特效、多媒体相关特效等等,这些方面等我稳定一点之后再来分享了。

不知道 Vulkan 的特性能不能用在视频处理方面,并没有很好的思路,如果你有的话,欢迎一起分享。

另外,基于 Vulkan 在渲染方面的特性,很可能在未来 VR 等应用中大发光彩。总之,对于这一门新的技术,笔者还是很看好它的,更多地去了解它的使用和原理。

Vulkan 学习之路

如果说学程序语言,第一行代码是 Hello World;那么对图形学程序,第一行代码就应该是画个三角形。

这将会是一个系列的文章,去分享关于 Vulkan 的开发学习,国内目前关于 Vulkan 的学习博客还是挺少的。

首先是 劝退篇

并不是所有的应用都需要用到 Vulkan ,如果你的瓶颈在于 CPU 开销太大,那么就可以考虑。另外,对于 Windows 、iOS 程序员,还有不懂 OpenGL ,不会 C/C++ 的同学,强撸 Vulkan 的话只能是一脸懵逼。

本文章主要会偏向于在 Android 设备上使用 Vulkan ,同时也会介绍相关的 OpenGL、图形学理论知识点。

然后是关于 学习资源 方面的。

在学习资源上,主要会参考 Vulkan 的 官网 和 Google 给的代码 官方例子

另外,在知乎上搜索 Vulkan 关键字,也能找到大神们关于 Vulkan 的 心得 。这里推荐几位知乎大佬的主页:Vinjn张静SnowFox空明流转陈勇。从这几位大佬的相关文章中,受益匪浅。

还有,在 Youtube 上有一些关于 Vulkan 的系列视频,推荐这个系列视频

对照着中文字幕,多看几遍还是能够理解的。

不像学习 OpenGL 那样,可以搞两本书来看看,这次就只能靠自己的学习理解了,还有一定要善用搜索。

这也印证了一句话:

你与知识,仅隔了一根网线。

有了学习资源之后,还有一项关键的东西,那就是一台支持 Vulkan 的手机。

谈到手机就不得不说一下显卡了,移动平台上的显卡主要是高通的 Adreno 系列和 ARM 的 Mail 系列 ,在 PC 上则是有 NVIDIA、AMD 这些巨头们。在选择手机的时候一定先判断是否支持 Vulkan ,否则调试了半天发现不支持就尴尬了,目前一些千元机也已经开始支持了。

有了学习资源和设备,接下来就是撸起袖子加油干了,充分发挥人的主观能动性,在知识的海洋里遨游~~~

当然,这只是个人的学习经验,仅供参考,有讲的不对之处,欢迎指出,也可以加我微信一起交流学习: ezglumes

系列文章的代码地址:

https://github.com/glumes/vulkan_tutorial

参考

这里有一些不错的参考链接:

  1. https://github.com/vinjn/awesome-vulkan

记录了很多关于 Vulkan 的文档,可以选择性地好好看看。

  1. https://renderdoc.org/vulkan-in-30-minutes.html

30 分钟了解 Vulkan 开发,显然,30 分钟肯定是不够的。

  1. https://www.khronos.org/registry/vulkan/specs/1.1/pdf/vkspec.pdf

Vulkan 1.1 版本的官方文档,对于各种参数调用,没有比它讲的更详细的了。

  1. http://developer.download.nvidia.com/gameworks/events/GDC2016/Vulkan_Essentials_GDC16_tlorach.pdf

一份讲述 Vulkan 渲染流程和组件的文档,里面的图内容很到位,加速理解,等明白了 Vulkan 之后再来看这里面的图就知道它有多么精髓了。

  1. https://github.com/googlesamples/vulkan-basic-samples

安卓开发者的福音,跟着 Google 的例子一步一个脚印的去学习。

原创文章,转载请注明来源:    进击的 Vulkan 移动开发(一)之今生前世