如何在AppRTC iOS应用程序中获取帧数据以进行视频修改?

Ale*_*gin 5 video-streaming webrtc apprtcdemo swift apprtc

我目前正在尝试对Swift 中 iOS 版 AppRTC 应用程序中传入的 WebRTC 视频流进行一些修改(该应用程序又基于Objective-C 版本)。为此,我需要访问存储在类 RTCI420Frame 的帧对象中的数据(这是libWebRTC的 Objective-C 实现的基本类)。特别是,我需要一个字节数组:[UInt8]和帧的大小。该数据将用于进一步处理和添加一些过滤器。

问题是, RTCVideoTrack / RTCEAGLVideoView 上的所有操作都是在预编译的libWebRTC.a的引擎盖下完成的,它是从上面链接的官方 WebRTC 存储库编译的,并且获得它的自定义构建相当复杂,所以我更喜欢使用示例 iOS 项目中可用的构建;根据我的理解,它应该具有所有可用的功能。

我正在研究 RTCVideoChatViewController 类,特别是remoteView / RemoteVideoTrack,但在访问帧本身方面没有成功,花了很多时间研究官方存储库中的 libWebRTC 源代码,但仍然无法解决访问帧的问题框架数据以供自己使用它进行操作。很高兴获得任何帮助!

Ale*_*gin 4

就在发布问题后,我很幸运地找到了偷偷摸摸的数据!

您必须将以下属性添加到 RTCEAGLVideoView.h 文件:

@property(atomic, strong) RTCI420Frame* i420Frame;
Run Code Online (Sandbox Code Playgroud)

原始实现文件中存在i420Frame属性,但它并未在该类的 iOS 项目的头文件中公开。添加该属性允许您获取视图的当前帧。

我仍在寻找一种更优雅的方式来直接获取流数据,而不需要查看remoteView内容,一旦找到它就会更新答案。