gstreamer教程(GStreamer1.20嵌入式和)
本月初发布的 GStreamer 1.20 是整个社区 17 个月辛勤工作的成果超过 250 名开发人员贡献了代码来实现这个版本,Collabora 的贡献者再一次超过了任何其他组织,今天小编就来聊一聊关于gstreamer教程?接下来我们就一起去研究一下吧!
gstreamer教程
本月初发布的 GStreamer 1.20 是整个社区 17 个月辛勤工作的成果。超过 250 名开发人员贡献了代码来实现这个版本,Collabora 的贡献者再一次超过了任何其他组织。
我们的工作集中在我们认为 GStreamer 最亮眼的两个领域:嵌入式系统和网络流媒体,尤其是 WebRTC。下面总结了我们的工程师团队对这个最新版本的影响。
像往常一样,您还可以通过查看项目的 1.20发行说明来了解更多关于社区其他成员所做的增强功能。
与嵌入式系统相关的贡献GStreamer 已经是嵌入式系统的卓越媒体框架,这是 Collabora 在上一个发布周期中非常活跃的领域。以下是我们所做的一些改进。
经过 Guillaume、Nicolas、Stéphane 和 Aaron 多年的努力,我们终于得到了对子帧解码的支持。如果解码器支持,这使得在从网络接收到整个帧之前开始解码视频帧成为可能。当使用 Xilinx Zynq UltraScale MPSoC EV 处理器上的 Allegro 扩展时,我们已经为 JPEG2000 和 OpenJPEG、H.264 和 ffmpeg 以及 gst-omx 实现了这一点。
通过与华为合作,我们还改进了 GStreamer 构建系统,使创建一个库成为可能,该库仅包含特定应用程序或一组应用程序使用的 GStreamer 的特定部分。查看此博客文章以了解更多信息。
Nicolas 添加了MPEG2 和 VP9 无状态 Linux 支持,并为增强 VP9 解析器做出了贡献。H264 无状态 Linux 解码器也获得了对隔行视频流的支持,但仅适用于基于切片的解码器,而不适用于基于帧的解码器,因为主线 Linux 内核中没有驱动程序支持这一点。Nicolas 还增加了对渲染延迟的支持,该延迟允许多个帧在无状态解码器中排队,并以更高的延迟为代价提高吞吐量。他为 MPEG 2 Video、VP8 和 VP9 解码器实现了这一点。他还在新的“va”插件中添加了对 HEVC 解码的支持,该插件使用新的 GStreamer 通用解码器实现来支持基于 VA-API 的解码器。
Nicolas 还实现了 videocodectestsink:一个小元素,它计算传入帧的校验和,以将它们与已知的良好参考进行比较。这对于创建确保解码器实现中没有回归的测试很有用。他还在 GStreamer 中添加了必要的代码,以响应 Video4Linux 源中的分辨率变化。例如,如果源是 HDMI 输入,这主要是相关的。
WebRTC 和网络流媒体在该框架的大部分历史中,GStreamer 的主要关注点一直是网络上的流媒体。这是我们在这个周期中也做出了一些贡献的领域。
我们贡献了许多与 GStreamer 的 WebRTC 堆栈相关的改进,它是 WebRTC 协议最完整、最灵活的独立实现之一。我曾在 GStreamer 的 WebRTC 堆栈上工作,并添加了许多功能。我包括对候选人结束的明确通知的支持,以便可以更快地识别失败的连接。我重新设计了 WebRTC 库 API,通过将所有信息隐藏在属性后面来确保它是线程安全的。我还添加了对媒体流“优先级”的支持;设置各种优先级现在会添加正确的 DSCP 标记,从而使网络管理员可以相应地对流量进行优先级排序。
Jakub 已经实现了 RTP Header 扩展,使得每帧发送色彩空间信息成为可能;这使 GStreamer 能够通过 RTP 共享动态 HDR 内容。我们实施的扩展与 Google 的 libwebrtc 团队的提议兼容。通过 RTP 发送 Opus 的基本规范仅支持单声道和立体声。Google libwebrtc 团队创建了一个名为“multiopus”的扩展,可以将多个立体声 Opus 流一起发送以服务于两个以上的频道。Jakub 在 GStreamer 的 Opus RTP 加载器和 depayloader 中实现了这一点。我们实现了 RFC 6464,这是一个 RTP 标头扩展,允许客户端向服务器发送数据包中音频的相对级别(音量);这允许服务器优先考虑正在说话的客户端,而无需解码所有音频。我们还增加了对 iSAC 编解码器的支持;它是几年前由谷歌在 libwebrtc 中开源的传统音频编解码器。我们添加了一个包含编解码器参考实现的插件,我们还编写了 RTP 加载器和 depayloader 以使 GStreamer 能够通过 RTP 发送和接收使用此编解码器编码的音频。
如果您准备好探索 GStreamer 1.20,或者对如何利用其令人兴奋的新功能从硬件中获得最大性能有任何疑问,请随时与我们联系。Collabora 的多媒体团队随时可以帮助您利用或实施 GStreamer 的最新功能版本。
其他改进GStreamer 是一个非常灵活的跨平台框架,我们还进行了一些不属于这两个主要类别的改进。
Nicolas 实现了对 WebM 视频中 alpha 通道的解码支持。这有点特殊,因为 alpha 通道是作为第二个视频流传输的。他还增加了对使用硬件加速解码器(例如基于 V4L2 的解码器)的解码的支持。
Aaron 将第一个专门用于机器学习的元素添加到核心 GStreamer 插件集合中。它使用 ONNX 库进行对象检测;我们希望将来使用 ONNX 库添加更多元素。
Aaron 还帮助 NICE 的 Rabindra Harlalka 贡献了可以使用 AES 加密对流进行加密的上游元素。这只是使用应用程序提供的密钥将 CBC 模式下的 AES 应用于传入流。
Xavier 再次对 Meson 构建系统进行了大量改进;特别是,他用他贡献给 Meson 本身的一个替换了 GStreamer 的自定义 pkg-config 文件生成器。这可确保生成的 pkg-config 文件与构建系统中的库匹配。
我在标识元素中添加了一个“stats”属性;这使得检测管道以获取用于监控的统计数据变得更加容易。我在相关的各种 GStreamer 元素中添加了对较新的“受限高”和“渐进高”H.264 配置文件的支持。这些配置文件只是现有高配置文件的一个子集。
Jakub 改进了 d3d11desktopup 插件以将 Windows 桌面捕获到 DirectX 11 纹理。他实施了支持以跟踪桌面的动态分辨率变化以及捕获 Windows 用户帐户控制 (UAC) 提示。
我改进了诸如 audiomixer 和 audiointerleave 元素之类的元素使用的 GstAudioAggregator 基类,它现在发出一条 QoS 消息,告诉应用程序何时丢弃传入的缓冲区,因为它们迟到了。
Stéphane 修复了 MXF 和 Matroska 解复用器以精确定位到帧;这使得可以将它们用作视频编辑的来源。
Xavier 花了很多时间帮助将 GStreamer 存储库合并为一个。这是整个社区的努力,使我们的CI 系统更简单,并且通常使 GStreamer 开发人员的生活更轻松。
像往常一样,我们还全面贡献了大量的错误修复,但我们不会在这里全部列出。
展望未来我们的工程师团队已经为下一个版本计划了许多贡献。其中包括对 MPEG PS 解复用器的返工以实现更准确的搜索、对 Wayland 支持的改进(例如可以利用 Wayland 对硬件视频覆盖的支持的 GTK3 接收器)以及对 DRM 修改器的支持以在硬件解码器之间实现更高性能的零拷贝和显示。
如果您准备好探索 GStreamer 1.20,或者对如何利用其令人兴奋的新功能从硬件中获得最大性能有任何疑问,请随时与我们联系。Collabora 的多媒体团队随时可以帮助您利用或实施 GStreamer 的最新功能版本。
施 GStreamer 的最新功能版本。
,
