zoukankan      html  css  js  c++  java
  • WebRTC框架中的硬件加速

    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框架完成的。

    人工智能芯片与自动驾驶
  • 相关阅读:
    C# tcp发送十六进制数据
    WPF中通过AForge实现USB摄像头拍照
    借鉴过的别人的帖子之C#篇
    C# 连续的语音识别
    C# NAudio 录音
    AS3 水波纹
    ARM多核心集群服务器
    RK3399Pro Android Rock-X 人工智能开发系列(2)
    智能化连锁门店解决方案
    RK3399Pro Android Rock-X 人工智能开发系列(1)
  • 原文地址:https://www.cnblogs.com/wujianming-110117/p/14204636.html
Copyright © 2011-2022 走看看