首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

GStreamer 适用于 iOS 和 Android 上的 RTSP 实时直播

这篇文章描述了在为 iOS 和 Android 实施新的 RTSP 实时视频流应用程序时遇到的挑战和注意事项。并描述了我们最终使用GStreamer的原因以及我们使用该库的经验。

需要适用于 Nabto Edge 的新视频应用程序!

在 Nabto,我们不断寻求改进我们的解决方案和技术,以提供易于使用的产品和示例,这些产品和示例以合理灵活的方式编写,同时安全且启动时性能良好。为了实现这一目标,我们定期推出新版本并寻求遵守最新标准,以保持我们的物联网平台得到良好维护和安全。

在我们最新的努力中,我们用新的 Nabto Edge 平台取代了 Nabto Micro 平台。由于 Nabto Edge 是一个完全重写的平台,我们必须更新示例程序和应用程序才能与新平台配合使用。

重新制作

和制作新的示例应用程序让我们有机会再次面对新旧挑战,事后看来这次我们腰带上的一个工具。这些挑战之一是显示来自安全摄像头等物联网设备的实时视频源。许多此类安全摄像机使用 RTSP 网络协议来复用和传输音频和视频流。RTSP 通常使用 TCP 作为其传输协议。

Nabto

Edge 使客户端可以直接与物联网设备通信,而无需防火墙麻烦,并且当数据直接在客户端和设备之间流动时,可以实现更高的性能。我们支持的功能之一是 TCP 隧道,它允许 TCP 客户端安全地连接到 IoT 设备上运行的 TCP 服务器应用程序,即使该设备位于防火墙后面。

考虑 ExoPlayer 和 FFmpeg

通过TCP 隧道,可以轻松地将客户端视频播放器连接到 RTSP 服务器并显示视频源。然而,这依赖于支持 RTSP 协议的良好视频播放器的存在,而这通常不在 Nabto 的掌控之中。由于我们希望在 Android 和 iOS 上拥有可以显示 RTSP 流的示例客户端应用程序,因此我们还必须找到在这些平台上播放 RTSP 流的可行解决方案。事实证明,许多媒体播放器对 RTSP 的支持有限甚至不支持,除此之外,我们的客户希望视频源具有亚秒级延迟,因此我们的要求从一开始就很高。由于我们正在构建示例应用程序,因此拥有一个易于集成到应用程序中的媒体播放器解决方案也符合我们的最大利益。

Android 上,我们从ExoPlayer开始,它是 Google 的应用程序级媒体播放器。ExoPlayer 是普遍推荐的 Android 媒体播放器解决方案,甚至高于 Android 自己的 MediaPlayer API。值得庆幸的是,ExoPlayer 具有低延迟 RTSP 支持,但它支持的视频和音频格式非常有限。截至撰写本文时,ExoPlayer 仅支持 H264 视频和 AAC 或 AC3 音频。虽然 ExoPlayer 非常简单地集成到我们的示例应用程序中,并允许我们快速引导可用的应用程序,但这也意味着我们必须忍受这种有限的示例格式支持。

iOS 上,情况要糟糕得多,Apple 的 AVFoundation 框架具有不支持 RTSP。有许多第三方视频播放器可用,但许多都已经过时且未维护,或者需要大量工作才能集成到 Xcode 应用程序中(许多基于 FFmpeg 的媒体播放器就是这种情况)。

GStreamer!

在寻找能够满足我们的需求并且最好在两个平台上工作的解决方案之后,我们决定使用GStreamer,一个著名的多媒体库来构建简单和复杂的多媒体组件图。非常幸运的是,GStreamer 支持 iOS 和 Android,可以低延迟地显示 RTSP 流,并且集成(相对)简单。GStreamer 的

主要在 Android 上,我们用 C 编写了一个集成层,它只公开我们的功能需要使用 GStreamer 的高级 playbin 组件显示 RTSP 流。我们在 iOS 的 Objective-C 中做了一个类似的层。

我们的其余示例应用程序分别使用 Kotlin 和 Swift 编写,并且我们有封装与 GStreamer 集成层的通信的高级类。虽然这会在 GStreamer 之上产生两层抽象,但它为 iOS 和 Android 应用程序开发人员提供了一个易于理解的 API 供他们使用,因此无需考虑使用 GStreamer 的内部结构。应该注意的是,GStreamer 集成代码并不是非常复杂。

目前,我们在 iOS 和 Android 上拥有这些客户端应用程序,它们在内部使用 GStreamer 和 Nabto Edge 连接到支持 Edge 的设备,并通过隧道连接到该设备上的 RTSP 服务器,以便 GStreamer 可以显示视频源。由此,我们实现了低延迟 RTSP 流(范围约为 500 毫秒),支持 iOS 和 Android,并公开了一个简单的 API 供应用程序开发人员使用。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OshXNk6sL7LDxBd0uct03qZA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券