WebRTC:如何为视频编码器启用硬件加速

2024-01-12

我正在尝试在 WebRTC 的帮助下将屏幕捕获的视频发送到 mediasoup 。 WebRTC 库中有一个类:Android 屏幕捕捉器。 它可以工作,但在某些设备上的性能非常糟糕。特别是当我使用高清或更好的显示分辨率时。

在 stackoverflow 上我发现了一个建议 https://stackoverflow.com/questions/50914031/webrtc-cannot-record-screen打电话设置启用视频硬件加速(true) and setVideoHwAccelerationOptions()。但在较新版本的 WebRTC 库中方法已被删除 https://groups.google.com/d/msg/discuss-webrtc/SKSkOUHXB2A/uugaMVuJAgAJ .

这是我的代码:

  // ...
PeerConnectionFactory.Builder builder = PeerConnectionFactory.builder();
builder.setOptions(null);

EglBase.Context eglContext = EglUtils.getRootEglBaseContext();

VideoEncoderFactory encoderFactory =
    new DefaultVideoEncoderFactory(
        eglContext, true /* enableIntelVp8Encoder */, true);


PeerConnectionFactory.InitializationOptions initializationOptions =
PeerConnectionFactory.InitializationOptions.builder(context)
//        .setEnableVideoHwAcceleration(true)  // <-- does not work any more 
        .createInitializationOptions();
PeerConnectionFactory.initialize(initializationOptions);

mPeerConnectionFactory =
    builder
        .setVideoEncoderFactory(encoderFactory)
        .createPeerConnectionFactory();

我的问题是:如何使用较新的 WebRTC 库版本启用视频硬件加速以进行屏幕捕获。


这取决于您的设备以及您使用的 libwebrtc 版本。所以你可以检查webrtc源代码来了解HW是否支持。这意味着如果你的 libwebrtc 不在源代码中做一些工作,视频编码器的硬件加速将不受支持。 :P

因此,如果您的 libwebrtc 不支持它,那么即使您在应用程序级别的设置正确,也无法快速看到任何内容。

那么,我们来谈谈如何在libwebrtc中检查视频编码器的硬件加速。

检查这个源代码https://chromium.googlesource.com/external/webrtc/+/HEAD/sdk/android/api/org/webrtc/HardwareVideoEncoderFactory.java https://chromium.googlesource.com/external/webrtc/+/HEAD/sdk/android/api/org/webrtc/HardwareVideoEncoderFactory.java

可以在HardwareVideoEncoderFactory.java中搜索关键字:
“CurrentSdk 中是否支持硬件”

今天是 1 月 12 日,我截屏了代码。

从源代码来看,它们确实显示了清晰的信息。

顺便说一句,您还可以在 Google Play 中下载一些媒体编解码器信息应用程序来检查不同类型的 Android 手机的不同类型的编码器/解码器。那也会有帮助的。

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

WebRTC:如何为视频编码器启用硬件加速 的相关文章

  • Twilio Video API 的房间内的参与者数量有限制吗?

    Twilio Video API 中的团体类型房间的参与者数量有限制吗 文档中指定了对等类型的限制 但没有提及团体类型房间 UPDATE Twilio 在其博客文章中提到每个房间最多可容纳 50 名参与者 看起来是一个非常小的数字 还是一样
  • 为手势控制的网站生成事件

    我很高兴有机会在基于手势的网站上工作 对此我有一些启发 link http when it rains com gesture php 我访问了很多网站并用谷歌搜索 维基百科和 gitHub 也没有多大帮助 由于这些技术还处于起步阶段 因此
  • org.webrtc.RTCPeerConnection 无法将视频发布到服务器

    我使用 webrtc 在会议中发送和获取视频 子主视频正常显示 但问题是视频没有发布到服务器 我检查方法 setlocalDescription 没有返回错误 这是我的sdp 有人可以帮忙吗 我搜索了很多解决方案 但我仍然不知道我的问题 我
  • 将 PCM 波形数据转换为 numpy 数组,反之亦然

    情况 我正在使用 WebRTC 中的 VAD 语音活动检测 WebRTC VAD https github com wiseman py webrtcvad Python 适配器 这示例实现 https github com wiseman
  • 在 Android 上使用 WebRTC 实现 Kurento 客户端

    我正在尝试在支持 API 22 的 Android 设备上实现 WebRTC 并且正在尝试连接到 Kurento 媒体服务器以建立媒体服务器功能 对于我的应用程序服务器层 我尝试使用基于 Tomcat 的 Java 服务器 这正在实现 Ku
  • Android WebRTC 中的本地视频渲染器

    我正在使用这个库 https bintray com google webrtc google webrtc https bintray com google webrtc google webrtc 我想要实现的目标 至少在我的项目开始时
  • 在 Heroku 上部署 PeerJS 服务器

    我的 PeerJS 服务器有问题 我从这里使用了 部署到 Heroku 按钮 https github com peers peerjs server https github com peers peerjs server 我不知道如何连
  • SignalR WebRTC WebSocket 已处于 CLOSING 或 CLOSED 状态

    我想测试运行 SignalR 和 WebRTC 的最简单实现 我将代码托管在https github com foyzulkarim WebRtc https github com foyzulkarim WebRtc 我制作了两个不同的文
  • WebRTC 无法从 USB 输入设备获取视频源(readyState 转为结束)

    我正在尝试使用 WebRTC 在屏幕上显示视频输入作为实时源 我不想进行任何点对点通信或类似的事情 只是显示视频源 我的代码对于我的笔记本电脑集成网络摄像头工作得很好 但是当我连接外部视频输入设备 在本例中是一台旧摄像机 使用 StarTe
  • 我可以在 DTLS-SRTP 加密中指定自己的加密密钥吗

    在 Chrome 中的 webrtc Web 应用程序中 我曾经通过覆盖 SDP 中的加密信息来指定自己的加密密钥 我现在正在迁移我的 webrtc Web 应用程序以使用 DTLS SRTP 进行加密 启用 DTLS 后 有没有办法告诉
  • Node教程一对多无加载远程服务器Stream Spinner动不停

    我对在项目中使用所需的 Kurrento 很陌生 但是当我克隆 git hub 上为 Kurento 提供的教程并遵循 one2Many 调用的说明时 首先 adapter js 的软件包损坏了 因为我成功解决了它们 但之后出现了一个问题
  • WebRTC 与 python

    我想用 python twisted 制作一个流服务器 它接收 WebRTC 视频流 然后对其应用一些 OpenCV 算法 但是我找不到 WebRTC 的 python 模块 如何使用 python twisted 发送和接收 WebRTC
  • 有没有办法使用 getUserMedia 减少延迟?

    在尝试减少视频延迟的同时WebRTC通信时 我测量了视频捕获和视频显示之间的延迟 为了防止测量 WebRTC 涉及的延迟 我只是使用getUserMedia和一个 HTMLvideo显示流 我通过每帧显示时间戳来做到这一点 使用reques
  • WebRTC:强制对等点使用 TURN 服务器

    我有一个 webrtc 应用程序 它工作正常 但出于测试目的 我需要测试我的 TURN 服务器是否工作 但因为两个测试设备都在同一网络内 所以我无法测试 认为下面的代码会限制候选人仅那些使用 TURN 服务器的 function onIce
  • Libsourcey 缺少 -fPIC 编译错误

    我正在尝试运行 LibSourcey 以使用 Webrtc 流服务器 问题是我似乎无法让它发挥作用 我努力在我的 Ubuntu 16 04 上 cmake 该项目 cmake 文件中的正则表达式 但现在它已修复 我实际上遇到的问题是编译时的
  • MediaStream 未处理的承诺拒绝:[object DOMError](在 Safari 11 中)

    在下面初始化 WebRTC 的方法中 我在 Safari Tech Preview 11 中遇到了未处理的承诺拒绝 具体来说 当我分配MediaStream像这样的视频元素 video srcObject event stream 堆栈跟踪
  • 通过 Websockets 进行 WebRTC 视频聊天

    我正在尝试使用 webRTC 和 WebSockets 进行信号发送来开发视频聊天应用程序 我的问题是 我不知道创建 RTCPeerConnection 并通过 webSocket 连接两个对等点 2 个浏览器 的过程是什么 至少在本地 我
  • webrtc - 视频出现斑点,但它仍然是黑色的

    我使用 chrome 21 运行我的 webrtc 代码 如果我在同一个 chrome 中打开两个选项卡 然后打开其中包含 webrtc 代码的页面 一个选项卡用于发送视频流 一个选项卡用于接收视频流 效果很好 但是 如果我使用两种隐身模式
  • 检测 MediaStreamTrack 是否为黑色/空白

    我正在与peerjs 创建视频聊天 我使用以下功能切换相机 开 关 function toggleCamera localStream getVideoTracks 0 enabled localStream getVideoTracks
  • 如何检查 TURN 服务器日志?

    我已经安装了开源 TURN 服务器 rfc5766 turn server 我使用以下命令运行它sudo turnserver L my domain in a b usr local etc turnuserdb conf f r dom

随机推荐

  • 如何避免使用 PHP cURL 进行 URL 通配?

    我有一个网址 稍作修改 如下所示 https ssl site com certificate 123 moo shoo type 456 domain GH 2fdodo 20 10 3a47 3a11 3a3316 由于括号的原因 当直
  • 实体框架始终将 DateTimeOffset 保存为 UTC

    有没有一种方法可以指示实体框架始终将 DateTimeOffset 存储为 UTC 值 从技术上讲 没有理由这样做 但如果我的数据库中的所有数据都是一致的 我更喜欢它 目前 它存储从客户端接收到的 DateTimeOffset 这可以是任何
  • 为什么 Python 中没有报告多处理错误以及如何打开报告错误?

    我设置了一些简单的代码来测试多处理的一些问题处理 但我无法跟踪此代码中的错误 因为没有来自进程的反馈 既然现在我对它视而不见 我如何才能从子流程接收异常 如何调试这段代码 coding utf 8 import multiprocessin
  • sql查询如果参数为空则选择全部

    如果以下查询可以修改为返回所有记录 一片空白 SELECT NAME SURNAME FROM MY TABLE WHERE NAME 尝试这个 SELECT FROM MY TABLE WHERE parameter IS NULL OR
  • 取消 HttpClient 请求 - 为什么 TaskCanceledException.CancellationToken.IsCancellationRequested 为 false?

    给出以下代码 var cts new CancellationTokenSource try get a hot task var task new HttpClient GetAsync http www google com cts T
  • 订阅事件日志中的非系统(自定义)事件

    每当将新日志条目添加到 Windows 事件查看器中的特定事件日志文件时 我想引发一个事件 我正在尝试做与这里提到的类似的事情 http msdn microsoft com en us library bb671202 aspx http
  • RadioGroup onCheckedChanged 函数不会触发

    我的应用程序跟踪餐厅服务员的轮班销售情况以帮助他们制定预算 在显示过去班次的活动中 我在 ListView 下创建了一个 RadioGroup 以便用户可以选择显示午餐 晚餐或两者 我已经在 RadioGroup onCheckedChan
  • 如何从 python 获取已安装的 GDAL/OGR 版本?

    如何从 python 获取已安装的 GDAL OGR 版本 我知道gdal config计划 目前正在使用以下内容 In 3 import commands In 4 commands getoutput gdal config versi
  • JavaFX 着色 TableCell

    我需要你的帮助 我有一个表 其中包含行 名称等 现在 当位于该行的对象具有特定值时 我想为特定的 tableCells 背景着色 但我只能让它读取这个单元格的值 但我需要读取对象 在我的代码中称为TableListObject 知道我需要用
  • 预测取决于 Keras 中的批量大小

    我正在尝试使用 keras 对图像进行二元分类 我的 CNN 模型在训练数据上经过了良好的训练 训练准确度约为 90 验证准确度约为 93 但是在训练过程中 如果我设置批量大小 15000 我会得到图 I 输出 如果我设置批量大小 5000
  • vkCmd* 函数的参数何时被消耗?

    一些vkCmd 函数指定何时使用或不使用某些参数 例如 在文档中vkCmdBindDescriptorSets pDynamicOffsets 的内容在期间立即被消耗 vkCmdBindDescriptorSets 的执行 但大多数人并没有
  • 在不使用命令行工具的情况下使用 Python Fabric (fab)

    尽管 Fabric 文档提到了一种使用该库进行 SSH 访问而不需要 fab 命令行工具和 或任务的方法 但我似乎无法管理一种方法来做到这一点 我想运行这个文件 示例 py 通过仅执行 python 示例 py env hosts exam
  • 支持在 Dynamics CRM 2016 中设置 Web 资源样式

    建议和支持的方式是什么来设计 CRM Web 资源的样式 使其与常规 CRM 表单 视图和对话框保持一致 想必您不会引用 CRM 正在使用的相同样式 因为这将不受支持 但是是否有一组可以直接引用的样式 以节省您自己编写的时间 它不是特定于
  • Android中如何处理ConcurrentModificationException

    我正在尝试从 a 中删除项目ArrayList 有时它弹出一个异常 java util ConcurrentModificationException 首先我尝试通过以下方式删除它们array list name remove i 但是失败
  • Fluent NHibernate 有很多外键映射问题

    我正在尝试在 nhibernate 中映射一个简单的数据结构 Tables Employees employeeID int username varchar 30 departmentID int Departments departme
  • 如何将 Spring Boot 应用程序日志文件读取到 Splunk 中? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我希望将日志数据从应用程序发送到 Splunk 我发现这与spring无关 只是Splunk需要一些配置来读取应用程序的日志文件 我想知道
  • 我可以将 SQL Server Management Studio 2005 用于 2008 DB 吗?

    我希望使用 Management Studio 2005 管理 SQL Server 2008 DB 原因是我们的服务器是 64 位计算机 而我们只有 64 位版本的软件 这可能吗 使用 Management Studio 2008 管理
  • 使用 stackalloc 分配的内存的初始化

    如果我分配内存stackalloc in C 内存是否已初始化 with 0 该文档没有提到这一点 只是告诉我们保留了正确的金额 在我的测试中 这种内存默认为0 但这并不意味着它是有保证的 从规格来看 18 8 堆栈分配 新分配的内存的内容
  • 如何重写WPF路由命令调度机制

    我可以以某种方式扩展 WPF 命令路由 以便它首先检查命令是否可以在聚焦字段中调用 如果不能在其他字段中调用 永远不会改变 有什么钩子吗 也许您不知道这是否可行 但在网络上的某个地方看到了类似的内容并且可以保留链接吗 抽象例子 例如 如果我
  • WebRTC:如何为视频编码器启用硬件加速

    我正在尝试在 WebRTC 的帮助下将屏幕捕获的视频发送到 mediasoup WebRTC 库中有一个类 Android 屏幕捕捉器 它可以工作 但在某些设备上的性能非常糟糕 特别是当我使用高清或更好的显示分辨率时 在 stackover