特效直播

智能视频SDK VideoCreatingSDK

  • 智能视频SDK开发者个人信息保护合规指引
  • 智能视频SDK隐私政策
  • 功能发布记录
  • 播放器SDK
    • SDK&Demo下载
    • 产品简介与下载
    • ios播放器
      • SDK集成
      • 快速开始
      • 简介
      • 版本更新记录
      • 接口速查
      • 快速进阶
      • 功能列表
      • 高级版功能接入
        • 端上超分功能接入
        • VR功能接入
        • 绿幕抠图功能接入
        • 投屏功能接入
        • 全景声功能接入
        • HDR功能接入
        • 超低延时直播功能接入
    • Unity播放器
      • SDK集成
      • 快速开始
      • 简介
      • 版本更新记录
      • 接口速查
      • 快速进阶
    • uniapp播放器
      • SDK集成
      • 快速开始
      • 简介
      • 版本更新记录
      • 快速进阶
    • HarmonyOS NEXT
      • SDK集成
      • 快速开始
      • 简介
      • 版本更新记录
      • 接口速查
      • 快速进阶
    • Andriod播放器
      • SDK集成
      • 快速开始
      • 简介
      • 版本更新记录
      • 接口速查
      • 快速进阶
      • 高级版功能接入
        • 端上超分功能接入
        • VR功能接入
        • 绿幕抠图功能接入
        • 投屏功能接入
        • 全景声功能接入
        • HDR功能接入
        • 超低延时直播功能接入
    • Web 播放器
      • license指引
      • 简介
      • 使用指南
      • 版本更新记录
      • 开发指南
      • 接口速查
        • 事件响应接口
        • 控制接口
  • 图片加载SDK
    • SDK&Demo下载
    • SDK集成
    • 快速开始
    • 版本更新记录
    • 接口速查
    • 产品简介
    • 快速进阶
  • 短视频SDK
    • 产品描述
      • 名词解释
      • 功能说明
      • 产品简介
      • 核心优势
    • SDK体验
      • 能力限制
      • DEMO体验
      • SDK下载
    • 使用指南
      • License申请
    • 常见问题
      • 内容制作类问题
      • 开发类问题
      • 常见问题总览
      • 常见错误码
    • 购买指南
      • 欠费说明
      • 如何购买
      • 产品定价
    • 开发指南
      • IOS开发说明
        • 录制
        • 编辑
        • 字幕
        • 转场
        • 合成
        • 快速接入
        • IOS版本开发接入文档
      • 视频指导
        • 视频指南
      • Android开发说明
        • 录制
        • Android版本开发接入文档
        • 字幕
        • 转场
        • 合成
        • 快速接入
        • 概述
  • 移动直播SDK
    • 产品描述
      • 名词解释
      • 功能说明
      • 产品简介
      • 核心优势
    • SDK体验
      • demo体验
      • SDK下载
    • 使用指南
      • 接入教程
      • License申请
      • License续费
    • 常见问题
      • 内容制作类问题
      • 开发类问题
      • 常见问题总览
      • 常见错误码
    • 购买指南
      • 欠费说明
      • 如何购买
      • 产品定价
    • 开发指南
      • IOS开发说明
        • 互动直播
        • 特效直播
        • 拉流
        • IOS接入概述
        • 超低延迟直播
        • 直播推流
      • Android开发说明
        • 超低延时直播
        • 互动直播
        • 普通直播
        • 特效直播
        • 拉流
        • Android接入概述
        • 推流参数配置
所有文档
menu
没有找到结果,请重新输入

智能视频SDK VideoCreatingSDK

  • 智能视频SDK开发者个人信息保护合规指引
  • 智能视频SDK隐私政策
  • 功能发布记录
  • 播放器SDK
    • SDK&Demo下载
    • 产品简介与下载
    • ios播放器
      • SDK集成
      • 快速开始
      • 简介
      • 版本更新记录
      • 接口速查
      • 快速进阶
      • 功能列表
      • 高级版功能接入
        • 端上超分功能接入
        • VR功能接入
        • 绿幕抠图功能接入
        • 投屏功能接入
        • 全景声功能接入
        • HDR功能接入
        • 超低延时直播功能接入
    • Unity播放器
      • SDK集成
      • 快速开始
      • 简介
      • 版本更新记录
      • 接口速查
      • 快速进阶
    • uniapp播放器
      • SDK集成
      • 快速开始
      • 简介
      • 版本更新记录
      • 快速进阶
    • HarmonyOS NEXT
      • SDK集成
      • 快速开始
      • 简介
      • 版本更新记录
      • 接口速查
      • 快速进阶
    • Andriod播放器
      • SDK集成
      • 快速开始
      • 简介
      • 版本更新记录
      • 接口速查
      • 快速进阶
      • 高级版功能接入
        • 端上超分功能接入
        • VR功能接入
        • 绿幕抠图功能接入
        • 投屏功能接入
        • 全景声功能接入
        • HDR功能接入
        • 超低延时直播功能接入
    • Web 播放器
      • license指引
      • 简介
      • 使用指南
      • 版本更新记录
      • 开发指南
      • 接口速查
        • 事件响应接口
        • 控制接口
  • 图片加载SDK
    • SDK&Demo下载
    • SDK集成
    • 快速开始
    • 版本更新记录
    • 接口速查
    • 产品简介
    • 快速进阶
  • 短视频SDK
    • 产品描述
      • 名词解释
      • 功能说明
      • 产品简介
      • 核心优势
    • SDK体验
      • 能力限制
      • DEMO体验
      • SDK下载
    • 使用指南
      • License申请
    • 常见问题
      • 内容制作类问题
      • 开发类问题
      • 常见问题总览
      • 常见错误码
    • 购买指南
      • 欠费说明
      • 如何购买
      • 产品定价
    • 开发指南
      • IOS开发说明
        • 录制
        • 编辑
        • 字幕
        • 转场
        • 合成
        • 快速接入
        • IOS版本开发接入文档
      • 视频指导
        • 视频指南
      • Android开发说明
        • 录制
        • Android版本开发接入文档
        • 字幕
        • 转场
        • 合成
        • 快速接入
        • 概述
  • 移动直播SDK
    • 产品描述
      • 名词解释
      • 功能说明
      • 产品简介
      • 核心优势
    • SDK体验
      • demo体验
      • SDK下载
    • 使用指南
      • 接入教程
      • License申请
      • License续费
    • 常见问题
      • 内容制作类问题
      • 开发类问题
      • 常见问题总览
      • 常见错误码
    • 购买指南
      • 欠费说明
      • 如何购买
      • 产品定价
    • 开发指南
      • IOS开发说明
        • 互动直播
        • 特效直播
        • 拉流
        • IOS接入概述
        • 超低延迟直播
        • 直播推流
      • Android开发说明
        • 超低延时直播
        • 互动直播
        • 普通直播
        • 特效直播
        • 拉流
        • Android接入概述
        • 推流参数配置
  • 文档中心
  • arrow
  • 智能视频SDKVideoCreatingSDK
  • arrow
  • 移动直播SDK
  • arrow
  • 开发指南
  • arrow
  • IOS开发说明
  • arrow
  • 特效直播
本页目录
  • 1.1初始化推流参数并配置
  • 1.2 初始化视频直播控制
  • 1.3连接音视频数据源和推流器
  • 1.4 设置推流状态监听
  • 1.5 开始推流
  • 1.6 结束推流
  • 1.7 断网重连
  • 1.8 开始动态码率
  • 1.9 关闭动态码率
  • 1.10 开关静音直播
  • 1.11 自定义图片推流(后台推流)
  • 1.12 发送Metadata
  • 1.13 获取直播上行速度
  • 1.14 获取直播上行帧率
  • 1.15 获取视频编码码率
  • 1.16 获取推流缓冲区数据占比
  • 1.17 获取往返延迟RTT
  • 1.18 获取预估上行带宽
  • 1.19 获取交互延迟

特效直播

更新时间:2025-08-22

直播模块不含音视频采集功能,我们需要使用拍摄器模块进行音视频的采集。当然我们也可以参考直播Demo中的 ‘BDCloudExternalCapture.m’文件实现外部采集后讲数据传递给直播模块。

示例代码:

Plain Text
11.	// 1. 开起相机
22.	– (void)start {
33.	    if (self.isRunning) {
44.	        return;
55.	    }
66.	    // 拍摄配置
77.	    BDCloudAVStreamSettings *settings = [BDCloudAVStreamSettings defaultSettings];
88.	    // 视频帧率
99.	    settings.videoFrameRate = self.setting.frameRate;
1010.	 	   // 视频分辨率
1111.	    settings.dimensions = self.setting.caputreDimension;
1212.	    // 视频横屏设置
1313.	    settings.enablelandscapeLeftRecord = self.setting.enablelandscapeLeftRecord;
1414.	    settings.stabilizationMode = AVCaptureVideoStabilizationModeStandard;
1515.	    // 直播状态配置(非常关键)
1616.	    settings.enableLive = YES;
1717.	    // 根据相机配置初始化相机
1818.	    self.captureSession = [[BDCloudAVRecordSession sharedInstance] initWithCaptureConfig:settings];
1919.	    // 拍摄代理
2020.	    self.captureSession.delegate = self;
2121.	    if (self.setting.enablelandscapeLeftRecord) {
2222.	        self.captureSession.view.transform = CGAffineTransformMakeRotation(-M_PI_2);
2323.	    }
2424.	    self.captureSession.view.frame = self.preView.bounds;
2525.	    
2626.	    // 直播支持后台推流
2727.	    [self.captureSession autoPauseAudioBackground:NO];
2828.	    // 水印
2929.	    if (self.setting.enableWatermark) {
3030.	        [self setWatermark:[UIImage imageNamed:@"pushlogo"]];
3131.	    }
3232.	    
3333.	    // 创建特效控制UI(等相机开启回调后添加到preview)
3434.	    self.captrueControlView = [[BDCloudCaptureView alloc] initWithFrame:[UIScreen mainScreen].bounds
3535.	                           session:self.captureSession];
3636.	    self.captrueControlView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
3737.	    self.isRunning = YES;
3838.	    
3939.	    // 注意 captureSession 内含接受手势的view,会添加在 self.captureSession.view 的父view上。
4040.	    [self.captrueControlView insertSubview:self.captureSession.view atIndex:0];
4141.	    [self.preView insertSubview:self.captrueControlView atIndex:0];
4242.	}
4343.	// 2. 美颜相机配置
4444.	- (void)captureCameraStarted {
4545.	    // 添加特效效果(基础美颜)
4646.	    [self.captureSession applyBeautyBaseVideoFx];
4747.	    [self.captureSession adjustBeautyWhiteLevel:0.7];
4848.	    [self.captureSession adjustBeautyBlurLevel:0.7];
4949.	    
5050.	    // 横屏的UI没有适配暂不开放,客户可以在configBaseUI内进行UI适配后开放此开关。
5151.	    if (!self.setting.enablelandscapeLeftRecord) {
5252.	        // 保证AR手势View在最下,防止AR手势View当住了captrueControlView的一些操作。
5353.	        [self.captrueControlView configBaseUI];
5454.	    }

1.1初始化推流参数并配置

这里我们以直播Demo ‘BDCloudLiveContextHelper.mm’文件为例.
示例代码:

Plain Text
11.	// 1. 创建并初始化
22.	BDCloudAVLiveParameter *par = [[BDCloudAVLiveParameter alloc] init];
33.	// 2. 配置音频默认编码参数
44.	par.audioSettings = [BDCloudAVAudioOutputSettings defaultSettings];
55.	// 3. 配置视频默认编码参数
66.	par.videoSettings = [BDCloudAVVideoOutputSettings defaultSettings];
77.	// 4. 修改视频编码分辨率
88.	par.videoSettings.dimension =  self.settings.dimension;
99.	// 5. 修改视频编码码率。
1010.	par.videoSettings.bitRate = self.settings.bitRate * 1000;
1111.	// 6. 修改视频编码帧率
1212.	par.videoSettings.frameRate = self.settings.frameRate;
1313.	// 7. 修改推流协议
1414.	par.streamType = BDCloudAVLiveTypeNormal;
1515.	// 8. 设置推流地址
1616.	par.url = [NSURL URLWithString:[settings pushUrl]];
1717.	if (settings.pushType == BDCloudPushSettingTypeLowerLatency) {
1818.	    par.streamType = BDCloudAVLiveTypeLowerLatency;
1919.	    par.url = [NSURL URLWithString:[settings pushUrl]];
2020.	    // test ip and domain mixer
2121.	    if (!par.url) {
2222.	        par.c_url = [settings pushUrl]; 
2323.	   }
2424.	}

1.2 初始化视频直播控制

类型:方法
参数:BDCloudAVLiveParameter 推流参数
返回值:BDCloudAVLiveContext实例

  • (instancetype)initWithLiveParameter:(BDCloudAVLiveParameter*)parameter;

示例代码:

Plain Text
11.	_liveContext = [[BDCloudAVLiveContext alloc] initWithLiveParameter:par];

1.3连接音视频数据源和推流器

示例代码:

Plain Text
11.	// 1. BDCloudPushLiveController.mm 文件
22.	// 连接 BDCloudAVRecordSession 和 BDCloudLivePushViewModel
33.	[self.captureViewModel addBufferListener:self.pushViewModel];
44.	
55.	// 2. BDCloudLivePushViewModel.mm 文件
66.	// 连接 BDCloudLivePushViewModel 和 BDCloudAVLiveContext  
77.	self.videoOutput = [[BDCloudAVOutput alloc] initWithMediaType:AVMediaTypeVideo];
88.	self.audioOutput = [[BDCloudAVOutput alloc] initWithMediaType:AVMediaTypeAudio];
99.	[self.videoOutput addTarget:self.liveHelper.liveContext];
1010.	[self.audioOutput addTarget:self.liveHelper.liveContext];
1111.	
1212.	// 3. BDCloudLivePushViewModel.mm 文件
1313.	// 数据传输
1414.	- (void)frame:(CMSampleBufferRef)frame type:(NSString *)type {
1515.	    if ([type isEqualToString:AVMediaTypeVideo]) {
1616.	        [self.videoOutput raiseFrame:frame];
1717.	    } else if ([type isEqualToString:AVMediaTypeAudio]) {
1818.	        [self.audioOutput raiseFrame:frame];
1919.	    }
2020.	}

可以直接数据源(BDCloudAVRecordSession)和推流器(BDCloudAVLiveContext)
示例代码:

Plain Text
11.	// 伪代码
22.	[recordSession addBufferListener: liveContext]

1.4 设置推流状态监听

推流状态监听必须在开始推流前设置。
类型:属性
默认值:nil
@property(nonatomic, weak) id delegate;

示例代码:

Plain Text
11.	_liveContext.delegate = self;

1.5 开始推流

类型:方法
返回值:是否开起成功。当重复调用时返回NO。

  • (BOOL)start;

示例代码:

Plain Text
11.	[self.liveContext start];

1.6 结束推流

类型:方法
返回值:是否关闭成功。当重复调用时返回NO。

  • (BOOL)stop;

示例代码:

Plain Text
11.	[self.liveContext stop];

1.7 断网重连

断网重连我们通常是根据代理回调的错误码根据自身业务情况判断是否进行重连。 重连方法必须在开始推流后才能调用。

类型:方法
返回值;重连是否成功。(异步重连,返回值不作为重连的真实结果,真实结果以代理回调为主)

  • (BOOL)reconnect;

示例代码:

Plain Text
11.	// 1. 重连函数
22.	- (void)reconnect {
33.	    [self.liveContext reconnect];
44.	}
55.	// 2. 根据回调代理的错误码判断是否应该重连。
66.	- (void)liveContextError:(RtmpSocketErrorCode)code {
77.	    dispatch_async(dispatch_get_main_queue(), ^{
88.	        if (self.liveContextStatusChange) {
99.	            self.liveContextStatusChange(NO, code);
1010.	        }
1111.	    });
1212.	    if (code == ErrorCodeLicenseInvalid) {
1313.	        NSLog(@"鉴权失败,请检查自己的license文件!!!");
1414.	        return;
1515.	    } else if (code == -5) {
1616.	        NSLog(@"SRT 发送失败...开始重连");
1717.	        [self reconnect];
1818.	    } else {
1919.	        [self reconnect];
2020.	    }
2121.	}

1.8 开始动态码率

动态码率的本质是在推流过程中,通过数据监控判断当前的网络状态是否满足当前的码率进行数据上传,动态的调整当前视频编码的码率,使音视频数据可以高质量的上传到Server。
动态码率主要应用于网络状态不稳定的一些场景,例如户外直播等。
动态码率在开始推流前不生效,但设置后内部会在推流连接成功以后自动开启。

类型:方法
参数:
Sensibility:检测频次,检测频次与动态码率灵敏度成反相关。
maxBitRate: 动态码率的最大码率。
minBitRate: 动态码率的最小码率。
返回值:是否开启成功。当maxBitRate < minBitRate 时返回失败。

  • (BOOL)startQOS:(NSUInteger)sensibility maxBitRate:(NSUInteger)maxBitRate minBitRate:(NSUInteger)minBitRate

示例代码:

Plain Text
11.	self.liveContext startQOS:5
22.	maxBitRate:self.settings.maxbitRate * 1000
33.	minBitRate:self.settings.minbitRate * 1000];

1.9 关闭动态码率

类型:方法

  • (void)stopQOS;

示例代码:

Plain Text
11.	[self.liveContext stopQOS];

1.10 开关静音直播

BDCloudAVLiveContext类中的开关静音方法实际上是通过改变传入的音频数据实现的,如果对于传入的音频数据还需要二次使用,必须慎用。

示例代码:

Plain Text
1 ‘BDCloudARCaptrue.mm’文件中	
21.	- (void)switchAudioSilent:(BOOL)isSilent {
32.	    [self.captureSession switchBufferListenerAudioSilent:isSilent];

1.11 自定义图片推流(后台推流)

自定义图片推流是使用指定图片进行推流,此时相机传入的视频数据失效。推流将自定义的图片进行编码打包后上报。
应用场景通常是APP进入后台后,相机无法采集数据时为了让视频数据更加的连贯和反馈给观众端的一种方法。
我们推荐如果APP长时间(超过一个gop时长)退到后台时是一定需要设置的,否则观众拉流可能会因为拉取不到视频帧导致解码器未正确初始化,推流端回到前台后拉流端仍然无法恢复。

示例代码:

Plain Text
1 ‘BDCloudARCaptrue.mm’文件中	
21	// 退到后台时输出固定图像。
32	- (void)onAppEnterBackground:(NSNotification *)notification {
43	    [self.captureSession setBufferListenerImageOutput:[UIImage imageNamed:@"pusbackground"]];
54	}
65	// 回到前台时回复相机图像。
76	- (void)onAppWillEnterForeground:(NSNotification *)notification {
87	    [self.captureSession setBufferListenerImageOutput:nil];
98	}

1.12 发送Metadata

主播在直播流中可以发送metadata消息。可由百度云播放器解析并通过通知发送给每一个观众用户。常用于直播答题、直播换装等需要由主播添加进实时流内的消息功能。
发送metadata之前需要校验权限,此时就是需要配置该参数。

类型:方法
参数:BDCloudAVLiveMetadataConfig 鉴权及播放流信息
返回值:本地校验是否成功。当本地校验失败时返回NO(本地校验主要针对参数是否非法)

  • (BOOL)setConfig:(BDCloudAVLiveMetadataConfig *)config

示例代码: 1. [self.liveContext setConfig:self.metadataPushServer.config]

Metadata发送信息 类型:方法
参数:
NSDictionary:需要发送的json信息。
Block:发送结果和错误码

  • (void)pushInfoToMetadata:(NSDictionary )info complete:(void(^)(BOOL success, NSError error))complete

示例代码:

Plain Text
12.	[self.liveContext pushInfoToMetadata:define
23.	                            complete:^(BOOL success, NSError *error) {
34.	    NSLog(@"asyncPushUserDefine error = %@", error);
45.	}];

1.13 获取直播上行速度

直播上行速度是指每秒的传送到服务端的数据量。通常用来和视频编码的码率作为对比判断当前的网速和编码码率是否匹配。
类型:参数
默认值:0
@property(nonatomic, readonly) double realtimeUploadSpeed; 示例代码;

Plain Text
11.	double realtimeUploadSpeed = liveContext.realtimeUploadSpeed

1.14 获取直播上行帧率

直播上行帧率是指每秒的传送到服务端的视频帧数。通常用来和视频编码的帧率作为对比判断当前的推流卡顿程度。
类型:参数
默认值:0
@property(nonatomic, readonly) double realtimeUploadFPS; 示例代码:

Plain Text
11.	double realtimeUploadFPS = liveContext.realtimeUploadFPS

1.15 获取视频编码码率

视频编码码率是指视频编码时真实每秒产出的视频数据量大小。尽管我们编码设置了目标码率,但是并不是真实产生的编码数据量的大小。通常我们会通过比较真实的编码码率和真实的上行速度来判断当前的网络宽带是否够用。
类型:参数
默认值:0
@property(nonatomic, readonly) double realtimeBitrate;

示例代码:

Plain Text
11.	double realtimeBitrate = liveContext.realtimeBitrate

1.16 获取推流缓冲区数据占比

音视频数据编码打包后进入推流缓冲区,推流协议模块有序从推流缓冲区取出数据进行上传。推流缓冲区能够体现网络延迟和当前上行不满足当前码率等问题。
推流缓冲区占比数据当前仅适用于RTMP协议。
类型:参数
默认值:0
@property(nonatomic, readonly) double packetCacheRate; 示例代码:

Plain Text
11.	double packetCacheRate = liveContext.packetCacheRate

1.17 获取往返延迟RTT

在使用SRT传输协议时,可以实时获取往返延迟数据。
RTT参数当前仅适用于SRT协议。
类型:参数
默认值:0
@property(nonatomic, readonly) double msRTT; 示例代码:

Plain Text
11.	double msRTT = liveContext.msRTT

1.18 获取预估上行带宽

在使用SRT传输协议时,可以实时获取预估的上行带宽。需要注意区分预估带宽和真实上行的区别。
预估上行带宽参数当前仅适用于SRT协议。
类型:参数
默认值:0
@property(nonatomic, readonly) double mbpsBandwidth;

示例代码:

Plain Text
11.	double mbpsBandwidth = liveContext.mbpsBandwidth

1.19 获取交互延迟

在使用SRT传输协议时,可以实时获取交互延迟。
交互延迟参数当前仅适用于SRT协议。
类型:参数
默认值:0
@property(nonatomic, readonly) double peerlatency; 示例代码:

Plain Text
11.	double peerlatency= liveContext.peerlatency

上一篇
互动直播
下一篇
拉流