智慧保安互联网APP
zengh
2022-06-21 4efeb31d5b4921d7e851c256009486ad86bc70e2
nativePlugins/AR-RtcModule/ios/ARtcKit.framework/Headers/ARMediaIO.h
New file
@@ -0,0 +1,224 @@
//
//  ARMediaIO.h
//  ARtcKit
//
//  Created by 余生丶 on 2020/6/15.
//  Copyright © 2020 zjq. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <AVFoundation/AVFoundation.h>
#import "AREnumerates.h"
/** 视频像素格式
 关于 YVU 图像格式的描述,请参考:
 FourCC YUV 格式说明
 Recommended 8-Bit YUV Formats for Video Rendering
 */
typedef NS_ENUM(NSUInteger, ARVideoPixelFormat) {
    /** I420 */
    ARVideoPixelFormatI420   = 1,
    /** BGRA */
    ARVideoPixelFormatBGRA   = 2,
    /** NV12 */
    ARVideoPixelFormatNV12   = 8,
};
/** 视频的顺时针旋转角度
如果设置为其他数字,系统会自动忽略
 */
typedef NS_ENUM(NSInteger, ARVideoRotation) {
    /** 顺时针旋转 0 度 */
    ARVideoRotationNone      = 0,
    /** 顺时针旋转 90 度*/
    ARVideoRotation90        = 1,
    /** 顺时针旋转 180 度 */
    ARVideoRotation180       = 2,
    /** 顺时针旋转 270 度 */
    ARVideoRotation270       = 3,
};
/**
 ARVideoFrameConsumer 支持接收两种 Buffer 类型的视频帧数据:PixelBuffer 和裸数据。 自定义视频源时,开发者需要通过 bufferType 来指定一种 Buffer 类型,并在自定义视频源中只使用与其对应的方法来传递视频帧数据。
*/
@protocol ARVideoFrameConsumer <NSObject>
/** PixelBuffer 类型
 @param pixelBuffer PixelBuffer 类型的视频 Buffer
 @param timestamp   传入的视频帧的时间戳,开发者必须为每一个视频帧设置一个时间戳。
 @param rotation    视频的顺时针旋转角度, 详见 ARVideoRotation
 */
- (void)consumePixelBuffer:(CVPixelBufferRef _Nonnull)pixelBuffer
             withTimestamp:(CMTime)timestamp
                  rotation:(ARVideoRotation)rotation;
/** RawData 类型
 @param rawData   RawData 类型的视频 Buffer
 @param timestamp 传入的视频帧的时间戳,以毫秒为单位。
 @param format    ARVideoPixelFormat
 @param size      视频裸数据的尺寸
 @param rotation  视频的顺时针旋转角度, 详见 ARVideoRotation
 */
- (void)consumeRawData:(void * _Nonnull)rawData
         withTimestamp:(CMTime)timestamp
                format:(ARVideoPixelFormat)format
                  size:(CGSize)size
              rotation:(ARVideoRotation)rotation;
@end
/** ARVideoSourceProtocol 协议
 ARVideoSourceProtocol 定义了一套协议,开发者通过实现该接口,来创建自定义的视频源,并设置给 sdk 底层的 Media Engine
 实时通讯过程中,SDK 通常会启动默认的视频输入设备,即内置的摄像头,进行视频推流。 使用 ARVideoSourceProtocol 接口可以自定义视频源。通过调用 设置视频源 setVideoSource 接口,可以改变并控制默认的视频输入设备,再将自定义的视频源发送给 Media Engine,让 Media Engine 进行其它视频处理,如过滤视频、将视频发布到 RTC 链接等。
 */
@protocol ARVideoSourceProtocol <NSObject>
@required
/** ARVideoFrameConsumer 协议,详见 ARVideoFrameConsumer */
@property (strong) id<ARVideoFrameConsumer> _Nullable consumer;
/** 初始化视频源
 Media Engine 在初始化视频源的时候会回调此方法。开发者可以在这个方法中做一些准备工作,例如打开 Camera,或者初始化视频源,并通过返回值告诉 Media Engine,自定义的视频源是否已经准备好。
**Note**
 初始化视频源过程中,开发者需要在 bufferType 中指定一种 Buffer 类型,并在自定义视频源中只使用与其对应的方法来传递视频帧数据。
 在初始化视频源过程中,Media Engine 会传递给开发者的一个 ARVideoFrameConsumer 对象。开发者需要保存该对象,并在视频源启动后,通过这个对象把视频帧输入给 Media Engine。
 开发者需要手动输入 YES 或 NO,以告诉 Media Engine 自定义视频源是否已准备好。
 @return 初始化状态:
 * YES: 自定义的视频源已经完成了初始化工作
 * NO: 自定义的视频源设备没准备好或者初始化失败,Media Engine 会停下来并上报错误
 */
- (BOOL)shouldInitialize;
/** 启动视频源
 Media Engine 在启动视频源时会回调这个方法。开发者可以在该方法中启动视频帧捕捉。开发者需要通过返回值告诉告知 Media Engine 自定义的视频源是否开启成功。
 开发者需要手动输入 YES 或 NO,以告诉 Media Engine 自定义视频源是否开启:
 * YES:自定义的视频源已成功开启,接下来会打开 ARVideoFrameConsumer 的开关,接收开发者传输的视频帧
 * NO:自定义的视频源设备启动失败,Media Engine 会停下来并上报错误
 */
- (void)shouldStart;
/** 停止视频源
 Media Engine 在停止视频源的时候会回调这个方法。开发者可以在这个方法中停止视频的采集。Media Engine 通过这个回调通知开发者,ARVideoFrameConsumer 的帧输入开关即将关闭,之后输入的视频帧都会被丢弃。
 */
- (void)shouldStop;
/** 释放视频源
Media Engine 通知开发者视频源即将失效,开发者可以在这个方法中关闭视频源设备。引擎会销毁 ARVideoFrameConsumer 对象,开发者需要确保在此回调之后不再使用它。
 */
- (void)shouldDispose;
/** 获取 Buffer 类型
 Media Engine 在初始化的时候,会调用这个方法来查询该视频源所使用的 Buffer 类型。开发者必须指定且只能指定一种 Buffer 类型并通过返回值告诉 Media Engine
 @return ARVideoBufferType
 */
- (ARVideoBufferType)bufferType;
@end
/** ARVideoSinkProtocol 协议
 ARVideoSinkProtocol 定义了一套协议,开发者通过实现该接口,来创建自定义的视频渲染器,并设置给底层的 Media Engine。
 实时通讯过程中,SDK 通常会启动默认的视频渲染器进行视频渲染。 ARVideoSinkProtocol 可以自定义视频渲染器,再通过调用 设置本地视频渲染器 setLocalVideoRenderer 和 设置远端视频渲染器 setRemoteVideoRenderer 接口,改变并控制默认的视频渲染器。
 ARVideoSinkProtocol 由以下方法组成:
 - 初始化渲染器(shouldInitialize)
 - 启动渲染器 (shouldStart)
 - 停止渲染器 (shouldStop)
 - 释放渲染器 (shouldDispose)
 - 获取 Buffer 类型 (AgoraVideoBufferType)
 - 获取像素格式 (AgoraVideoPixelFormat)
 - (可选) 输出视频像素 Buffer (renderPixelBuffer)
 - (可选) 输出视频裸数据 (renderRawData)
 Note: ARVideoSinkProtocol 接口中定义的所有方法都是回调方法,Media Engine 内部维护着状态机,并使用这些方法将自定义视频源及渲染器的状态传给 Media Engine。因此请避免直接在 App 中直接调用这些接口。 下面这个例子给出了自定义 video sink 的步骤:
 - 调用 bufferType 和 AgoraVideoPixelFormat 方法设置视频帧的 Buffer 类型和像素格式。
 - 实现 shouldInitialize、shouldStart、shouldStop 和 shouldDispose 管理自定义的 Video Sink。
 - 根据 ARVideoFrameConsumer 实现 buffer 类型和像素格式。
 - 创建 ARVideoFrameConsumer 自定义的 Video Sink 对象。
 - 调用 setLocalVideoRenderer 和 setRemoteVideoRenderer 方法设置本地和远端视频渲染器。
 - Media Engine 会根据内部状态调用 ARVideoSinkProtocol 接口中的方法。
 */
@protocol ARVideoSinkProtocol <NSObject>
@required
/** 初始化渲染器
 Media Engine 初始化渲染器的时候调用这个方法。开发者可以在这个方法中做渲染器的初始化工作。如果是耗时操作,也可以提前初始化好,然后在这个方法中通过返回值告知 Media Engine 自定义渲染器已初始化好。 该方法需要开发者手动输入 YES 或 NO,告知 Media Engine 自定义渲染器的状态。
 @return - YES: Media Engine 会认为自定义的渲染器已经初始化好
 - NO: Media Engine 会认为自定义的渲染器初始化失败,不继续往下运行
 */
- (BOOL)shouldInitialize;
/** 启动渲染器
 Media Engine 在开启渲染功能的时候会回调这个方法。开发者可以在这个方法中启动渲染器。 该方法需要开发者手动输入 YES 或 NO,Media Engine 会根据输入值做对应的动作:
 - YES: Media Engine 继续进行渲染
 - NO:Media Engine 认为出错而停止渲染器的功能
 */
- (void)shouldStart;
/** 停止渲染器
 Media Engine 在停止渲染功能的时候会回调这个方法。开发者可以在这个方法中停止渲染。
 */
- (void)shouldStop;
/** 释放渲染器
 Media Engine 通知开发者渲染器即将被废弃。在 shouldDispose 返回之后,开发者就可以释放掉资源了。
 */
- (void)shouldDispose;
/** 获取 Buffer 类型
 用于在自定义渲染器的时候,需要指定 Buffer 类型,通过返回值告知引擎。Media Engine 会调用这个方法并检查返回值类型。
 @return  Buffer 类型
 */
- (ARVideoBufferType)bufferType;
/** 获取像素格式
 @return 用于自定义渲染器的时候,还需要指定视频数据的像素格式。
 */
- (ARVideoPixelFormat)pixelFormat;
@optional
/** (可选)输出视频的 PixelBuffer
 @param pixelBuffer 视频的 PixelBuffer
 @param rotation   视频像素的顺时针旋转角度, ARVideoRotation
 */
- (void)renderPixelBuffer:(CVPixelBufferRef _Nonnull)pixelBuffer rotation:(ARVideoRotation)rotation;
/** 输出视频裸数据
 @param rawData RawData 格式的视频
 @param size     视频的尺寸
 @param rotation 视频的顺时针旋转角度, ARVideoRotation
 */
- (void)renderRawData:(void * _Nonnull)rawData size:(CGSize)size rotation:(ARVideoRotation)rotation;
@end