dstFrame.textureId
设置为新纹理的 ID。- (void) onProcessVideoFrame:(V2TXLiveVideoFrame _Nonnull)srcFrame dstFrame:(V2TXLiveVideoFrame _Nonnull)dstFrame{GLuint dstTextureId = renderItemWithTexture(srcFrame.textureId, srcFrame.width, srcFrame.height);dstFrame.textureId = dstTextureId;}
- (void) onProcessVideoFrame:(V2TXLiveVideoFrame _Nonnull)srcFrame dstFrame:(V2TXLiveVideoFrame _Nonnull)dstFrame{thirdparty_process(srcFrame.textureId, srcFrame.width, srcFrame.height, dstFrame.textureId);}
/*** @brief 在自定义视频采集模式下,将采集的视频数据发送到SDK。<br/>* 在自定义视频采集模式下,SDK不再采集摄像头数据,仅保留编码和发送功能。* 您可以把采集到的 SampleBuffer 打包到 V2TXLiveVideoFrame 中,然后通过该API定期的发送。** @note 需要在 [startPush](@ref V2TXLivePusher#startPush:) 之前调用 [enableCustomVideoCapture](@ref V2TXLivePusher#enableCustomVideoCapture:) 开启自定义采集。** @param videoFrame 向 SDK 发送的 视频帧数据 {@link V2TXLiveVideoFrame}** @return 返回值 {@link V2TXLiveCode}* - V2TXLIVE_OK: 成功* - V2TXLIVE_ERROR_INVALID_PARAMETER: 发送失败,视频帧数据不合法* - V2TXLIVE_ERROR_REFUSED: 您必须先调用 enableCustomVideoCapture 开启自定义视频采集。*/- (V2TXLiveCode)sendCustomVideoFrame:(V2TXLiveVideoFrame *)videoFrame;
dstFrame.textureId
设置为新纹理的 ID。private class MyPusherObserver extends V2TXLivePusherObserver {@Overridepublic void onGLContextCreated() {mFURenderer.onSurfaceCreated();mFURenderer.setUseTexAsync(true);}@Overridepublic int onProcessVideoFrame(V2TXLiveVideoFrame srcFrame, V2TXLiveVideoFrame dstFrame) {dstFrame.texture.textureId = mFURenderer.onDrawFrameSingleInput(srcFrame.texture.textureId, srcFrame.width, srcFrame.height);return 0;}@Overridepublic void onGLContextDestroyed() {mFURenderer.onSurfaceDestroyed();}}
@Overridepublic int onProcessVideoFrame(V2TXLiveVideoFrame srcFrame, V2TXLiveVideoFrame dstFrame) {thirdparty_process(srcFrame.texture.textureId, srcFrame.width, srcFrame.height, dstFrame.texture.textureId);return 0;}
/*** @brief 在自定义视频采集模式下,将采集的视频数据发送到SDK。 <br/>* 在自定义视频采集模式下,SDK不再采集摄像头数据,仅保留编码和发送功能。** @note 需要在 {@link V2TXLivePusher#startPush(String)} 之前调用 {@link V2TXLivePusher#enableCustomVideoCapture(boolean)} 开启自定义采集。** @param videoFrame 向 SDK 发送的 视频帧数据 {@link V2TXLiveVideoFrame}** @return 返回值 {@link V2TXLiveCode}* - V2TXLIVE_OK: 成功* - V2TXLIVE_ERROR_INVALID_PARAMETER: 发送失败,视频帧数据不合法* - V2TXLIVE_ERROR_REFUSED: 发送失败,您必须先调用 enableCustomVideoCapture 开启自定义视频采集*/public abstract int sendCustomVideoFrame(V2TXLiveVideoFrame videoFrame);
@interface V2TXLivePlayer : NSObject/*** @brief 设置播放器回调。<br/>* 通过设置回调,可以监听 V2TXLivePlayer 播放器的一些回调事件,* 包括播放器状态、播放音量回调、音视频首帧回调、统计数据、警告和错误信息等。** @param observer 播放器的回调目标对象,更多信息请查看 {@link V2TXLivePlayerObserver}*/- (void)setObserver:(id<V2TXLivePlayerObserver>)observer;
/*** @brief 视频帧信息。* V2TXLiveVideoFrame 用来描述一帧视频画面的裸数据,它可以是一帧编码前的画面,也可以是一帧解码后的画面。* @note 自定义采集和自定义渲染时使用。自定义采集时,需要使用 V2TXLiveVideoFrame 来包装待发送的视频帧;自定义渲染时,会返回经过 V2TXLiveVideoFrame 包装的视频帧。*/@interface V2TXLiveVideoFrame : NSObject///【字段含义】视频帧像素格式///【推荐取值】V2TXLivePixelFormatNV12@property(nonatomic, assign) V2TXLivePixelFormat pixelFormat;///【字段含义】视频数据包装格式///【推荐取值】V2TXLiveBufferTypePixelBuffer@property(nonatomic, assign) V2TXLiveBufferType bufferType;///【字段含义】bufferType 为 V2TXLiveBufferTypeNSData 时的视频数据@property(nonatomic, strong, nullable) NSData *data;///【字段含义】bufferType 为 V2TXLiveBufferTypePixelBuffer 时的视频数据@property(nonatomic, assign, nullable) CVPixelBufferRef pixelBuffer;///【字段含义】视频宽度@property(nonatomic, assign) NSUInteger width;///【字段含义】视频高度@property(nonatomic, assign) NSUInteger height;///【字段含义】视频帧的顺时针旋转角度@property(nonatomic, assign) V2TXLiveRotation rotation;///【字段含义】视频纹理ID@property (nonatomic, assign) GLuint textureId;@end@protocol V2TXLivePlayerObserver <NSObject>@optional/*** @brief 自定义视频渲染回调** @note 调用 [enableCustomRendering](@ref V2TXLivePlayer#enableCustomRendering:pixelFormat:bufferType:) 开启自定义渲染之后,会收到这个回调通知** @param videoFrame 视频帧数据 {@link V2TXLiveVideoFrame}*/- (void)onRenderVideoFrame:(id<V2TXLivePlayer>)playerframe:(V2TXLiveVideoFrame *)videoFrame;@end
public abstract void setObserver(V2TXLivePlayerObserver observer)
public final static class V2TXLiveVideoFrame{/// 视频像素格式public V2TXLivePixelFormat pixelFormat = V2TXLivePixelFormat.V2TXLivePixelFormatUnknown;/// 视频数据包装格式public V2TXLiveBufferType bufferType = V2TXLiveBufferType.V2TXLiveBufferTypeUnknown;/// 视频纹理包装类public V2TXLiveTexture texture;/// 视频数据public byte[] data;/// 视频数据public ByteBuffer buffer;/// 视频宽度public int width;/// 视频高度public int height;/// 视频像素的顺时针旋转角度public int rotation;}public abstract class V2TXLivePlayerObserver {/*** 自定义视频渲染回调** @param player 回调该通知的播放器对象* @param videoFrame 视频帧数据 {@link V2TXLiveVideoFrame}*/void onRenderVideoFrame(V2TXLivePlayer player, V2TXLiveVideoFrame videoFrame);}
本页内容是否解决了您的问题?