WebRTC框架中的硬件加速
WebRTC框架中的硬件加速
WebRTC是一个免费的开源项目,可为浏览器和移动应用程序提供实时通信功能。

WebRTC的主要功能是能够发送和接收交互式高清视频。快速处理此类视频需要硬件加速的视频编码。
当前,开源WebRTC项目框架支持各种软件编码器类型:VP8,VP9和H264。NVIDIA将硬件加速的H.264编码集成到WebRTC编码框架中。本文档使用名称NvEncoder表示此功能。
典型缓冲液流量
下图显示了硬件加速的WebRTC编码框架中的典型缓冲区流。

发送YUV帧,该帧将YUV帧转换为I420格式并在编码器的输出平面上排队。使用专有的NVIDIA低级编码库将输出平面缓冲区发送到NvEncoder。NvEncoder在其捕获平面上返回已填充的已编码缓冲区。
根据应用程序的要求,发送编码后的缓冲区以进行进一步处理。
应用程序和单元测试设置
WebRTC_r32.2.0_aarch64.tbz2程序包中的readme文件包含有关应用程序使用和安装的其它信息。
设置和测试NvEncoder示例应用程序
1。Video Loopback应用程序:要运行该应用程序,请输入以下命令:
$ ./video_loopback-编解码器H264-宽度1280-高度720 --capture_device_index 0
其中:
•--codec指定编码格式。硬件编码当前仅支持H.264。
•--width指定框架宽度。
•--height指定框架高度。
•--capture_device_index指定/ dev / video <x>的索引。
如果WebRTC框架正常工作,应用程序将显示具有所需宽度和高度的摄像机视频流。如果WebRTC检测到帧丢失,则按比例缩放。
2. 对等连接客户端/服务器应用程序:
相机设置:将USB相机连接到Jetson设备。
服务器设置:要在Jetson平台上启动peerconnection_client应用程序,请输入以下命令:
$ ./peerconnection_server
此命令使用默认配置在端口8888上启动服务器。
客户端设置:要在Jetson平台上启动peerconnection_client应用程序的两个实例,请输入以下命令:
$ ./peerconnection_client --autoconnect --server < Server.IP >
$ ./peerconnection_client --server <Server.IP> --autoconnect --autocall
每个命令都会启动一个实例,该实例会自动将客户端连接到服务器。第二个命令使用-autocall选项来调用服务器上第一个可用的其它客户端,而无需用户干预。
3. ħ为NvEncoder 0.264单元测试:输入命令:
$ ./modules_tests --gtest_filter =“ TestNvH264Impl。*” --gtest_repeat = <迭代次数>
如果Jetson设备上的软件显示pulseaudio错误:
输入此命令安装pulseaudio:
$ sudo apt安装pulseaudio
输入以下命令以启动pulseaudio守护程序:
$ pulseaudio –开始
重要方法调用
NvEncoder基于NvVideoEncoderFactory类,该类在头文件中定义:
webrtc_headers / modules / video_coding / codecs / nvidia / NvVideoEncoderFactory.h
该头文件位于软件包WebRTC_r32.2.0_aarch64.tbz2中。
本节总结了对NvEncoder的重要调用。
创建支持硬件的视频编码器
•执行方法调用:
std :: unique_ptr <VideoEncoder> CreateVideoEncoder(const webrtc :: SdpVideoFormat&format)
参数为:
•format:指定所需的编码格式。当前仅支持SdpVideoFormat(H.264)。
该方法创建并返回指定格式的NvVideoEncoder对象。
查询视频编码器
•执行函数调用:
CodecInfo QueryVideoEncoder(const SdpVideoFormat&format)
参数为:
•format:指定所需的编码格式。
该函数查询视频编码器并返回其编解码器信息。
获取受支持的视频格式
•执行方法调用:
std :: vector <SdpVideoFormat> GetSupportedFormats()
该方法返回编码器支持的所有格式的SdpVideoFormat对象的向量。
WebRTC软件包
文件WebRTC_r32.2.0_aarch64.tbz2包含以下文件:
•libwebrtc.a:WebRTC库文件
•头文件:所有WebRTC头文件及其各自的路径名
•video_loopback:用于测试基本视频功能的应用程序
•peerconnection_client:连接到服务器和其它客户端的客户端应用程序
•peerconnection_server:一个创建服务器和客户端接口的应用程序
•module_test:编码器单元测试应用程序
•README:适用于应用程序和NvVideoEncoderFactory的README文件。
局限性
当前,硬件加速仅支持H.264编码器。
该video_loopback仅适用于H.264编码器。
USB摄像头以YUY2颜色格式输出缓冲区,但是NVEncoder希望输入为I420或NV12格式,需要进行颜色转换。当前,这是使用CPU上的WebRTC框架完成的。
WebRTC框架中的硬件加速的更多相关文章
- GPU硬件加速相关
从android3.0开始,2D渲染开始支持硬件加速,即在view的Canvas上的绘图操作可以用GPU来加速. 硬件加速会使app消耗更多的内存. 如果配置文件中,Target API level ...
- 硬件加速 Hardware Accelerated 绘制
官方文档中对硬件加速的描述 原文地址:http://developer.android.com/guide/topics/graphics/hardware-accel.html Beginning ...
- Qt 框架的图形性能高(OpenGL上的系统效率高),网络性能低,开发效率高,Quick是可以走硬件加速——Qt中分为好几套图形系统,差不多代表了2D描画的发展史。最经典的软描画系统
-----图形性能部分-----Qt的widgets部分,运行时的图像渲染性能是一般的,因为大部分的界面内容都是Qt自绘,没有走硬件加速,也就是说很多图形内容都是CPU算出来的.但是widgets底层 ...
- 【Chromium中文文档】Chrom{e,ium}{,OS}中的硬件视频加速
Chrom{e,ium}{,OS}中的硬件视频加速 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_ ...
- javascript 手势(swipeLeft,swipeRight)滑动中使用css3动画卡顿,开启硬件加速
今天,在做一个移动端项目,遇到了css3动画卡顿的现象. 例图: 在手势滑动中(swipeLeft,swipeRight)遇到了动画卡顿的现象,最后使用了css3动画-webkit-transform ...
- 图形性能(widgets的渲染性能太低,所以推出了QML,走硬件加速)和网络性能(对UPD性能有实测数据支持)
作者:JasonWong链接:http://www.zhihu.com/question/37444226/answer/72007923来源:知乎著作权归作者所有,转载请联系作者获得授权. ---- ...
- 几个平台环境里视频编解码和图像scale的硬件加速的方法
记录一下遇到几个平台里的视频编解码和图像scale的硬件加速的方法 1,intel平台当包含GEN系列的集成GPU时,可用libva实现视频codec.颜色空间转换和图像scale的硬件加速,具体可使 ...
- FortiGate 硬件加速
FortiGate 硬件加速 来源 https://wenku.baidu.com/view/07749195a1c7aa00b52acb63.html 硬件加速 来源 https://blog.cs ...
- Android 4.0的图形硬件加速及绘制技巧
转:http://zuiniuwang.blog.51cto.com/3709988/721798 从Android 3.0开始,Android 2D的绘制流程就设计为能够更好地支持硬件加速.使用GP ...
随机推荐
- 【Redis过期Key监听】
https://blog.csdn.net/wlddhj/article/details/89881055
- Python脚本暴力破解SSH口令以及构建僵尸网络(pxssh)
目录 暴力破解SSH口令 SSH远端执行命令 构建僵尸网络 环境:Kali Linux python 2.7.13 暴力破解SSH口令 Pxssh是pexpect库的ssh专用脚本,他能用预先写好的 ...
- node-mongo-服务器封装
分为三个文件 mongo.js基本的封装了下mongo数据库操作 workmongo.js 里面有路由和解析操作(可以根据具体业务进行扩充) mainmongo.js 服务器相关 调用例子: 查询数据 ...
- 1.关于逆向工程(RE、RCE)-笔记
名词 逆向工程(Reverse Engineering,简称RE):代码逆向工程(Reverse Code Engineering,简称RCE). 逆向分析方法 静态分析:不执行代码,观察外部特征.获 ...
- Portswigger web security academy:HTTP request smuggling
HTTP request smuggling 目录 HTTP request smuggling HTTP request smuggling, basic CL.TE vulnerability H ...
- 快速运行cmd
方法一 运行 windows+r 输入cmd 指定要手动输入cd ...... 方法二 文件地址栏 在指定路径在文件地址栏前面输入cmd 方法三 shift+鼠标右键 打开到指定文件夹,shift+鼠 ...
- Thinking in UML 笔记(一) -- 面向对象
一.UML 中最重要的就是面向对象. 面向对象的认识论可以构建更为复杂的系统来解释复杂的世界. 1. 面向过程,一切都是相互紧密地联系在一起,互相作用,互相影响. 2.面向对象, 世界是分割开的,只有 ...
- 老板让我重构项目,我想首先应该服务治理---eureka服务治理深入浅出
目录 什么是服务治理 Eureka调用过程 Eureka单机注册 Eureka 单机启动 单机注册 集群注册 客户调用 Eureka集群注册 idea 如何同一个项目启动多次 Eureka自我保护 为 ...
- uni-app 微信支付
小程序 支付 先看官方文档 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_2.shtml 知晓有那些比不可少的流程,之后后端 ...
- Mybatis-Plus的应用场景及注入SQL原理分析
一.背景 1.1 传统Mybatis的弊端 1.1.1 场景描述 假设有两张表:一张商品表.一张订单表,具体表的字段如下: 现有如下需求: 分别根据id查询商品表和订单表所有信息 根据支付状态和通知状 ...