LiteAVSDK
腾讯云音视频 SDK ,服务于数万家企业客户的高可用组件,致力于最大限度地节省您的研发成本。
V2TXLivePusher

详细描述

腾讯云直播推流器。
主要负责将本地的音频和视频画面进行编码,并推送到指定的推流地址,支持任意的推流服务端。

推流器包含如下能力:


结构体说明

◆ V2TXLivePusher-p

protocol V2TXLivePusher-p

构造函数

(void) - setObserver:
 
(V2TXLiveCode- setRenderView:
 
(V2TXLiveCode- setRenderMirror:
 
(V2TXLiveCode- setEncoderMirror:
 
(V2TXLiveCode- setRenderRotation:
 
(V2TXLiveCode- startCamera:
 
(V2TXLiveCode- startCamera:
 
(V2TXLiveCode- stopCamera
 
(V2TXLiveCode- startMicrophone
 
(V2TXLiveCode- stopMicrophone
 
(V2TXLiveCode- startVirtualCamera:
 
(V2TXLiveCode- stopVirtualCamera
 
(V2TXLiveCode- startScreenCapture:
 
(V2TXLiveCode- stopScreenCapture
 
(V2TXLiveCode- pauseAudio
 
(V2TXLiveCode- resumeAudio
 
(V2TXLiveCode- pauseVideo
 
(V2TXLiveCode- resumeVideo
 
(V2TXLiveCode- startPush:
 
(V2TXLiveCode- stopPush
 
(int) - isPushing
 
(V2TXLiveCode- setAudioQuality:
 
(V2TXLiveCode- setVideoQuality:
 
(TXBeautyManager *) - getBeautyManager
 
(TXAudioEffectManager *) - getAudioEffectManager
 
(TXDeviceManager *) - getDeviceManager
 
(V2TXLiveCode- snapshot
 
(V2TXLiveCode- setWatermark:x:y:scale:
 
(V2TXLiveCode- enableVolumeEvaluation:
 
(V2TXLiveCode- enableCustomVideoProcess:pixelFormat:bufferType:
 
(V2TXLiveCode- enableCustomVideoCapture:
 
(V2TXLiveCode- sendCustomVideoFrame:
 
(V2TXLiveCode- enableCustomAudioCapture:
 
(V2TXLiveCode- sendCustomAudioFrame:
 
(V2TXLiveCode- sendSeiMessage:data:
 
(void) - showDebugView:
 
(V2TXLiveCode- setProperty:value:
 
(V2TXLiveCode- setMixTranscodingConfig:
 

函数文档

◆ enableCustomAudioCapture:()

- (V2TXLiveCode) enableCustomAudioCapture: (BOOL)  enable

开启/关闭自定义音频采集。
在自定义音频采集模式下,SDK 不再从麦克风采集声音,只保留编码和发送能力。

开启/关闭自定义音频采集

注意
需要在 startPush 前调用才会生效。
参数
enabletrue: 开启自定义采集; false: 关闭自定义采集。【默认值】: false
返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功

◆ enableCustomVideoCapture:()

- (V2TXLiveCode) enableCustomVideoCapture: (BOOL)  enable

开启/关闭自定义视频采集。

在自定义视频采集模式下,SDK 不再从摄像头采集图像,只保留编码和发送能力。

注意
需要在 startPush 之前调用,才会生效。
参数
enableYES:开启自定义采集;NO:关闭自定义采集。【默认值】:NO
返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功

◆ enableCustomVideoProcess:pixelFormat:bufferType:()

- (V2TXLiveCode) enableCustomVideoProcess: (BOOL)  enable
pixelFormat: (V2TXLivePixelFormat pixelFormat
bufferType: (V2TXLiveBufferType bufferType 

开启/关闭自定义视频处理。

注意
RTMP 协议下仅支持 OpenGL 纹理格式的回调。
参数
enableYES: 开启; NO: 关闭。【默认值】:NO
pixelFormat指定回调的像素格式,【注意】:RTMP 协议下仅支持 V2TXLivePixelFormatTexture2D
bufferType指定回调的数据格式,【注意】:RTMP 协议下仅支持 V2TXLiveBufferTypeTexture
返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功
  • V2TXLIVE_ERROR_NOT_SUPPORTED: 不支持的格式

◆ enableVolumeEvaluation:()

- (V2TXLiveCode) enableVolumeEvaluation: (NSUInteger)  intervalMs

启用采集音量大小提示。

开启后可以在 onMicrophoneVolumeUpdate 回调中获取到 SDK 对音量大小值的评估。

参数
intervalMs决定了音量大小回调的触发间隔,单位为 ms,最小间隔为 100ms,如果小于等于0则会关闭回调,建议设置为 300ms。【默认值】:0,不开启
返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功

◆ getAudioEffectManager()

- (TXAudioEffectManager *) getAudioEffectManager

获取音效管理对象 TXAudioEffectManager

通过音效管理,您可以使用以下功能:

  • 调整麦克风收集的人声音量。
  • 设置混响和变声效果。
  • 开启耳返,设置耳返音量。
  • 添加背景音乐,调整背景音乐的播放效果。

◆ getBeautyManager()

- (TXBeautyManager *) getBeautyManager

获取美颜管理对象 TXBeautyManager

通过美颜管理,您可以使用以下功能:

  • 设置”美颜风格”、”美白”、“红润”、“大眼”、“瘦脸”、“V脸”、“下巴”、“短脸”、“小鼻”、“亮眼”、“白牙”、“祛眼袋”、“祛皱纹”、“祛法令纹”等美容效果。
  • 调整“发际线”、“眼间距”、“眼角”、“嘴形”、“鼻翼”、“鼻子位置”、“嘴唇厚度”、“脸型”。
  • 设置人脸挂件(素材)等动态效果。
  • 添加美妆。
  • 进行手势识别。

◆ getDeviceManager()

- (TXDeviceManager *) getDeviceManager

获取设备管理对象 TXDeviceManager

通过设备管理,您可以使用以下功能:

  • 切换前后摄像头。
  • 设置自动聚焦。
  • 设置摄像头缩放倍数。
  • 打开或关闭闪光灯。
  • 切换耳机或者扬声器。
  • 修改音量类型(媒体音量或者通话音量)。

◆ isPushing()

- (int) isPushing

当前推流器是否正在推流中。

返回
是否正在推流
  • 1: 正在推流中
  • 0: 已经停止推流

◆ pauseAudio()

- (V2TXLiveCode) pauseAudio

静音本地音频。

静音本地音频后,SDK 不会继续采集麦克风的声音 与 stopMicrophone 不同之处在于 pauseAudio 并不会停止发送音频数据,而是继续发送码率极低的静音包 由于 MP4 等视频文件格式,对于音频的连续性是要求很高的,使用 stopMicrophone 会导致录制出的 MP4 不易播放 因此在对录制质量要求很高的场景中,建议选择 pauseAudio,从而录制出兼容性更好的 MP4 文件

返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功

◆ pauseVideo()

- (V2TXLiveCode) pauseVideo

暂停推流器的视频流。

返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功

◆ resumeAudio()

- (V2TXLiveCode) resumeAudio

取消静音本地音频。

返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功

◆ resumeVideo()

- (V2TXLiveCode) resumeVideo

恢复推流器的视频流。

返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功

◆ sendCustomAudioFrame:()

- (V2TXLiveCode) sendCustomAudioFrame: (V2TXLiveAudioFrame *)  audioFrame

在自定义音频采集模式下,将采集的音频数据发送到SDK,SDK不再采集麦克风数据,仅保留编码和发送功能。

在自定义音频采集模式下,将采集的音频数据发送到SDK

注意
需要在 startPush 之前调用 V2TXLivePusher#enableCustomAudioCapture(boolean) 开启自定义采集。
参数
audioFrame向 SDK 发送的 音频帧数据 V2TXLiveAudioFrame
返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功
  • V2TXLIVE_ERROR_REFUSED: 发送失败,您必须先调用 enableCustomAudioCapture 开启自定义音频采集

◆ sendCustomVideoFrame:()

- (V2TXLiveCode) sendCustomVideoFrame: (V2TXLiveVideoFrame *)  videoFrame

在自定义视频采集模式下,将采集的视频数据发送到SDK。

在自定义视频采集模式下,SDK不再采集摄像头数据,仅保留编码和发送功能。 您可以把采集到的 SampleBuffer 打包到 V2TXLiveVideoFrame 中,然后通过该API定期的发送。

注意
需要在 startPush 之前调用 enableCustomVideoCapture 开启自定义采集。
参数
videoFrame向 SDK 发送的 视频帧数据 V2TXLiveVideoFrame
返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功
  • V2TXLIVE_ERROR_INVALID_PARAMETER: 发送失败,视频帧数据不合法
  • V2TXLIVE_ERROR_REFUSED: 您必须先调用 enableCustomVideoCapture 开启自定义视频采集。

◆ sendSeiMessage:data:()

- (V2TXLiveCode) sendSeiMessage: (int)  payloadType
data: (NSData *)  data 

发送 SEI 消息

播放端 V2TXLivePlayer 通过 V2TXLivePlayerObserver 中的 onReceiveSeiMessage 回调来接收该消息。

参数
payloadType数据类型,支持 5、242。推荐填:242
data待发送的数据
返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功

◆ setAudioQuality:()

- (V2TXLiveCode) setAudioQuality: (V2TXLiveAudioQuality quality

设置推流音频质量。

参数
quality音频质量 V2TXLiveAudioQuality
  • V2TXLiveAudioQualityDefault 【默认值】: 通用
  • V2TXLiveAudioQualitySpeech: 语音
  • V2TXLiveAudioQualityMusic: 音乐
返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功
  • V2TXLIVE_ERROR_REFUSED: 推流过程中,不允许调整音质

◆ setEncoderMirror:()

- (V2TXLiveCode) setEncoderMirror: (BOOL)  mirror

设置视频编码镜像。

注意
编码镜像只影响观众端看到的视频效果。
参数
mirror是否镜像
  • NO【默认值】: 播放端看到的是非镜像画面
  • YES: 播放端看到的是镜像画面
返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功

◆ setMixTranscodingConfig:()

- (V2TXLiveCode) setMixTranscodingConfig: (V2TXLiveTranscodingConfig *)  config

设置云端的混流转码参数

如果您在实时音视频 控制台 中的功能配置页开启了“启用旁路推流”功能, 房间里的每一路画面都会有一个默认的直播 CDN 地址

一个直播间中可能有不止一位主播,而且每个主播都有自己的画面和声音,但对于 CDN 观众来说,他们只需要一路直播流 所以您需要将多路音视频流混成一路标准的直播流,这就需要混流转码

当您调用 setMixTranscodingConfig 接口时,SDK 会向腾讯云的转码服务器发送一条指令,目的是将房间里的多路音视频流混合为一路, 您可以通过 mixUsers 参数来调整每一路画面的位置,以及是否只混合声音,也可以通过 videoWidth、videoHeight、videoBitrate 等参数控制混合音视频流的编码参数

【画面1】=> 解码 ====> \
                        \
【画面2】=> 解码 =>  画面混合 => 编码 => 【混合后的画面】
                        /
【画面3】=> 解码 ====> /
【声音1】=> 解码 ====> \
                        \
【声音2】=> 解码 =>  声音混合 => 编码 => 【混合后的声音】
                        /
【声音3】=> 解码 ====> /

参考文档:云端混流转码

注意
关于云端混流的注意事项:
  • 云端转码会引入一定的 CDN 观看延时,大概会增加1 - 2秒
  • 调用该函数的用户,会将连麦中的多路画面混合到自己当前这路画面或者 config 中指定的 streamId 上
  • 请注意,若您还在房间中且不再需要混流,请务必传入 nil 进行取消,因为当您发起混流后,云端混流模块就会开始工作,不及时取消混流可能会引起不必要的计费损失
  • 请放心,您退房时会自动取消混流状态
参数
config请参考 V2TXLiveDef.h 中关于 V2TXLiveTranscodingConfig 的介绍。如果传入 nil 则取消云端混流转码
返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功
  • V2TXLIVE_ERROR_REFUSED: 未开启推流时,不允许设置混流转码参数

◆ setObserver:()

- (void) setObserver: (id< V2TXLivePusherObserver >)  observer

设置推流器回调。

通过设置回调,可以监听 V2TXLivePusher 推流器的一些回调事件, 包括推流器状态、音量回调、统计数据、警告和错误信息等。

参数
observer推流器的回调目标对象,更多信息请查看 V2TXLivePusherObserver

◆ setProperty:value:()

- (V2TXLiveCode) setProperty: (NSString *)  key
value: (NSObject *)  value 

调用 V2TXLivePusher 的高级 API 接口。

注意
该接口用于调用一些高级功能。
参数
key高级 API 对应的 key。
value调用 key 所对应的高级 API 时,需要的参数。
返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功
  • V2TXLIVE_ERROR_INVALID_PARAMETER: 操作失败,key 不允许为空

◆ setRenderMirror:()

- (V2TXLiveCode) setRenderMirror: (V2TXLiveMirrorType mirrorType

设置本地摄像头预览镜像。

本地摄像头分为前置摄像头和后置摄像头,系统默认情况下,是前置摄像头镜像,后置摄像头不镜像,这里可以修改前置后置摄像头的默认镜像类型。

参数
mirrorType摄像头镜像类型 V2TXLiveMirrorType
  • V2TXLiveMirrorTypeAuto 【默认值】: 默认镜像类型. 在这种情况下,前置摄像头的画面是镜像的,后置摄像头的画面不是镜像的
  • V2TXLiveMirrorTypeEnable: 前置摄像头 和 后置摄像头,都切换为镜像模式
  • V2TXLiveMirrorTypeDisable: 前置摄像头 和 后置摄像头,都切换为非镜像模式
返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功

◆ setRenderRotation:()

- (V2TXLiveCode) setRenderRotation: (V2TXLiveRotation rotation

设置本地摄像头预览画面的旋转角度。

注意
只旋转本地预览画面,不影响推流出去的画面。
参数
rotation预览画面的旋转角度 V2TXLiveRotation
  • V2TXLiveRotation0【默认值】: 0度, 不旋转
  • V2TXLiveRotation90: 顺时针旋转90度
  • V2TXLiveRotation180: 顺时针旋转180度
  • V2TXLiveRotation270: 顺时针旋转270度
返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功

◆ setRenderView:()

- (V2TXLiveCode) setRenderView: (TXView *)  view

设置本地摄像头预览 View。

本地摄像头采集到的画面,经过美颜、脸形调整、滤镜等多种效果叠加之后,最终会显示到传入的 View 上。

参数
view本地摄像头预览 View
返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK:成功

◆ setVideoQuality:()

- (V2TXLiveCode) setVideoQuality: (V2TXLiveVideoEncoderParam *)  param

设置推流视频编码参数

参数
param视频编码参数 V2TXLiveVideoEncoderParam
返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功

◆ setWatermark:x:y:scale:()

- (V2TXLiveCode) setWatermark: (TXImage *)  image
x: (float)  x
y: (float)  y
scale: (float)  scale 

设置推流器水印。默认情况下,水印不开启。

参数
image水印图片。如果该值为 nil,则等效于禁用水印
x水印的横坐标,取值范围为0 - 1的浮点数。
y水印的纵坐标,取值范围为0 - 1的浮点数。
scale水印图片的缩放比例,取值范围为0 - 1的浮点数。
返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功

◆ showDebugView:()

- (void) showDebugView: (BOOL)  isShow

显示仪表盘。

参数
isShow是否显示。【默认值】:NO

◆ snapshot()

- (V2TXLiveCode) snapshot

截取推流过程中的本地画面。

返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功
  • V2TXLIVE_ERROR_REFUSED: 已经停止推流,不允许调用截图操作

◆ startCamera:() [1/2]

- (V2TXLiveCode) startCamera: (BOOL)  frontCamera

打开本地摄像头。

注意
startVirtualCamera,startCamera,startScreenCapture,同一 Pusher 实例下,仅有一个能上行,三者为覆盖关系。例如先调用 startCamera,后调用 startVirtualCamera。此时表现为暂停摄像头推流,开启图片推流
参数
frontCamera是否为前置摄像头
  • YES 【默认值】: 切换到前置摄像头
  • NO: 切换到后置摄像头
返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功

◆ startCamera:() [2/2]

- (V2TXLiveCode) startCamera: (NSString *)  cameraId

打开本地摄像头。

注意
startVirtualCamera,startCamera,startScreenCapture,同一 Pusher 实例下,仅有一个能上行,三者为覆盖关系。例如先调用 startCamera,后调用 startVirtualCamera。此时表现为暂停摄像头推流,开启图片推流
参数
cameraId摄像头标识
返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功

◆ startMicrophone()

- (V2TXLiveCode) startMicrophone

打开麦克风。

返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功

◆ startPush:()

- (V2TXLiveCode) startPush: (NSString *)  url

开始音视频数据推流。

参数
url推流的目标地址,支持任意推流服务端
返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 操作成功,开始连接推流目标地址
  • V2TXLIVE_ERROR_INVALID_PARAMETER: 操作失败,url 不合法
  • V2TXLIVE_ERROR_INVALID_LICENSE: 操作失败,license 不合法,鉴权失败
  • V2TXLIVE_ERROR_REFUSED: 操作失败,RTC 不支持同一设备上同时推拉同一个 StreamId

◆ startScreenCapture:()

- (V2TXLiveCode) startScreenCapture: (NSString *)  appGroup

开始全系统的屏幕分享(该接口支持 iOS 11.0 及以上的 iPhone 和 iPad)。

注意
该接口支持共享整个 iOS 系统的屏幕,可以实现类似腾讯会议的全系统级的屏幕分享。
需要通过 iOS Broadcast Upload Extension 来开启屏幕采集, 然后设置 enableCustomVideoCapture 开启自定义采集支持。 最后通过 sendCustomVideoFrame 把 Broadcast Upload Extension 中采集到的屏幕画面送出去。
startVirtualCamera,startCamera,startScreenCapture,同一 Pusher 实例下,仅有一个能上行,三者为覆盖关系。例如先调用 startCamera,后调用 startVirtualCamera。此时表现为暂停摄像头推流,开启图片推流
参数
appGroup主 App 与 Broadcast 共享的 Application Group Identifier,可以指定为 nil,但按照文档设置会使功能更加可靠。
返回
返回值 V2TXLiveCode
  • V2TXLIVE_ERROR_NOT_SUPPORTED: 功能不支持

◆ startVirtualCamera:()

- (V2TXLiveCode) startVirtualCamera: (TXImage *)  image

开启图片推流。

参数
image图片
注意
startVirtualCamera,startCamera,startScreenCapture,同一 Pusher 实例下,仅有一个能上行,三者为覆盖关系。例如先调用 startCamera,后调用 startVirtualCamera。此时表现为暂停摄像头推流,开启图片推流
返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功

◆ stopCamera()

- (V2TXLiveCode) stopCamera

关闭本地摄像头。

返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功

◆ stopMicrophone()

- (V2TXLiveCode) stopMicrophone

关闭麦克风。

返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功

◆ stopPush()

- (V2TXLiveCode) stopPush

停止推送音视频数据。

返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功

◆ stopScreenCapture()

- (V2TXLiveCode) stopScreenCapture

关闭屏幕采集。

注意
iOS 端暂不支持通过此接口关闭屏幕采集。
可以直接在 iOS 系统的屏幕录制界面上关闭屏幕录制, 也可以通过 enableCustomVideoCapture 关闭自定义采集支持。
返回
返回值 V2TXLiveCode
  • V2TXLIVE_ERROR_NOT_SUPPORTED: 功能不支持

◆ stopVirtualCamera()

- (V2TXLiveCode) stopVirtualCamera

关闭图片推流。

返回
返回值 V2TXLiveCode
  • V2TXLIVE_OK: 成功