移动直播(Mobile Live Video Broadcasting,MLVB)SDK 是云直播服务(LVB)在移动场景的延伸。相比于主要面向云对接的直播(LVB) 服务,移动直播既提供了基于 TXLiteAVSDK 的“快速集成方案”,也提供了云直播(LVB)、云点播(VOD)和即时通信(IM)等云端服务的“一体化解决方案”。
一、集成SDK
1. 如何快速集成?
快速入门:https://cloud.tencent.com/document/product/454/7876
官方Demo体验:https://cloud.tencent.com/document/product/454/6555
官方Demo及SDK下载:https://cloud.tencent.com/document/product/454/7873
版本历史:https://cloud.tencent.com/document/product/454/7878
2. 如何获取和修改 SDK 本都输出日志?
Android:SDK 默认会将 log 写到 /sdcard/Android/data/应用包名/files/log/tencent/liteav/ 下
iOS:SDK 默认会将 log 写到当前 App 的 Documents/logs 文件夹下,后缀为.xlog。
参考:https://cloud.tencent.com/developer/article/1502366?from=10680
3. 如何查看当前 SDK 版本号?
- Android端:
String sdkver = TXLiveBase.getSDKVersionStr();
Log.d("liteavsdk", "liteav sdk version is : " + sdkver); - iOS端:
NSLog(@"SDK Version = %@", TXLiveBase getSDKVersionStr);
4. 移动直播SDK有没有适配Android 10?
TXLiteAVSDK 在6.9版本对Android 10做了兼容支持,若之前的版本在 Android Studio 中将工程编译脚本 build.gradle 配置参数 targetSdkVersion 设定为 28 或以下就可以在android 10.0的机器上运行。(29 为 Android 10)。
5. 移动直播 TXLiteAVSDK 开发环境要求?
- Android端:
Android Studio 2.0+;Android 4.1(SDK API 16)及以上系统。 - iOS端:
Xcode 9.0+;iOS 9.0 以上的 iPhone 或者 iPad 真机;项目已配置有效的开发者签名。
6. Xcode编译 TXLiteAVSDK 报错解决方法?
一般容易遇到undefined symbols、duplicate symbol、bcm.o和rsa.o等错误。参考:https://cloud.tencent.com/developer/article/1499960
7. iOS升级 TXLiteAVSDK 6.6.7559及之后版本编译报错,报错在CocosDenshion.o?
新版本音频做了优化,需要添加openAL依赖库,软3A的处理依赖于这个库,参考:https://cloud.tencent.com/developer/ask/228567/answer/347719
8. TXLiteAVSDK 用 Xcode 8编译运行报错?
SDK3.9之后的版本需要xcode9.0的版本去编译,3.7版本及之前的是可以用xcode8,因为3.9 SDK是用xcode9构建的。
9. 移动直播 Android 端如何动态加载 so 库?
参考:https://cloud.tencent.com/developer/article/1420952
10. 移动直播SDK的精简版和全功能专业版的主要区别是?
- 精简版只包含直播推流个基础播放功能,包的体积更小;专业版包含移动直播、点播、短视频、实时音视频所有功能。
- 精简版SDK用的系统播放器,只支持硬编码和硬解码,点播不支持FLV格式;专业版SDK用的ijk播放器,硬编硬解和软编软解都支持。
11. 移动直播 SDK 的功能特性如下表:
产品 | 功能 | 功能特性 | Android | iOS |
---|---|---|---|---|
移动直播 | 推流 | |||
RTMP 协议推流 | ✔ | ✔ | ||
H.264 和 AAC 编码 | ✔ | ✔ | ||
实现主播端的屏幕推流功能(游戏直播) | ✔ | ✔ | ||
后台摄像头推流 | ✔ | ✔ | ||
后台垫片推流 | ✔ | ✔ | ||
纯音频推流 | ✔ | ✔ | ||
静音推流 | ✔ | ✔ | ||
本地预览镜像(主播) | ✔ | ✔ | ||
视频编码镜像(观众) | ✔ | ✔ | ||
硬件编码 | ✔ | ✔ | ||
自动调整码率 | ✔ | ✔ | ||
自动调整分辨率 | ✔ | ✔ | ||
自定义推 YUV、PCM 数据 | ✔ | ✔ | ||
视频(TextureId)和音频(PCM)数据回调 | ✔ | ✔ | ||
推流质量监控(事件回调) | ✔ | ✔ | ||
推流断流重连机制(支持自主配置) | ✔ | ✔ | ||
推流会就近选择服务器(针对腾讯云) | ✔ | ✔ | ||
背景混音 | ✔ | ✔ | ||
前后摄像头动态切换 | ✔ | ✔ | ||
摄像头缩放操作(Zoom) | ✔ | ✔ | ||
闪光灯 | ✔ | ✔ | ||
自动/手动对焦 | ✔ | ✔ | ||
基础美颜(磨皮、美白、红润) | ✔ | ✔ | ||
高级美颜(设置大眼、瘦脸、V脸、下巴调整、短脸、小鼻效果) | ✔ | ✔ | ||
动效贴纸(添加变形、覆盖贴纸挂件等效果) | ✔ | ✔ | ||
清新、唯美、怀旧、日系等滤镜 | ✔ | ✔ | ||
截流录制(推流过程中本地录制出视频) | ✔ | ✔ | ||
视频截图 | ✔ | ✔ | ||
添加静态水印 | ✔ | ✔ | ||
视频流中添加文本信息(如歌词进度) | ✔ | ✔ | ||
视频流中插入时间戳(直播答题方案能力支持) | ✔ | ✔ | ||
支持 BitCode(iOS提供的体积优化方案) | ✖ | ✔ | ||
直播 | ||||
支持 HTTP-FLV、RTMP、HLS 协议的流媒体播放 | ✔ | ✔ | ||
支持 HTTPS-FLV、HTTPS-HLS 的播放 | ✔ | ✔ | ||
播放没有域名限制(支持播放其他云产商的流) | ✔ | ✔ | ||
硬件解码 | ✔ | ✔ | ||
播放器秒开 | ✔ | ✔ | ||
静音播放 | ✔ | ✔ | ||
画面预览模式调整(调整填充模式、渲染角度) | ✔ | ✔ | ||
播放器延时调节 | ✔ | ✔ | ||
视频(YUV)和音频(PCM)数据回调 | ✔ | ✔ | ||
自定义渲染视频数据 | ✔ | ✔ | ||
截流录制(观众截取直播的流到文件中) | ✔ | ✔ | ||
屏幕截图 | ✔ | ✔ | ||
清晰度无缝切换 | ✔ | ✔ | ||
直播回看(腾讯云特有) | ✔ | ✔ | ||
拉流质量监控(事件回调) | ✔ | ✔ | ||
拉流断流重连机制(支持自主配置) | ✔ | ✔ | ||
点播 | ||||
支持 FLV、MP4、HLS、本地视频文件播放 | ✔ | ✔ | ||
支持 HTTPS 的点播地址播放 | ✔ | ✔ | ||
硬件解码 | ✔ | ✔ | ||
画面预览模式调整(调整填充模式、渲染角度) | ✔ | ✔ | ||
静音播放 | ✔ | ✔ | ||
变速播放 | ✔ | ✔ | ||
循环播放 | ✔ | ✔ | ||
本地缓存 | ✔ | ✔ | ||
预加载 | ✔ | ✔ | ||
贴片广告 | ✔ | ✔ | ||
播放加密文件 | ✔ | ✔ | ||
多码率切换(腾讯云特有) | ✔ | ✔ | ||
离线下载视频 | ✔ | ✔ | ||
视频截图 | ✔ | ✔ | ||
点播质量监控(事件回调) | ✔ | ✔ |
12. iOS端怎么关闭 TXLiteAVSDK 控制台输出的log?
在AppDelegate里面调用下面接口:
TXLiveBase sharedInstance.delegate = nil;
TXLiveBase setConsoleEnabled:NO;
13. iOS端编译 TXLiteAVSDK 报重复的符号错误?
问题描述:编译SDK报duplicate symbols错误,冲突的符合为bcm.o和rsa.o
解决方案:
Xcode 工程配置 other linker flags 需要设置 -ObjC,Dead Code Stripping 设置成YES。
二、直播推流
1. 直播拉流报错Q通道接收失败,返回码-3是什么原因?
一般是推流还没有成功就去拉流就会报该错误,请保证推流成功后再去拉流。注意推流端能看到预览画面并不一定代表推流就成功了,可以在控制台查询流状态或者换腾讯云提供的测试Demo推流。
2. iOS端移动直播Licence校验失败报-5错误码?
6.5版本的LiteAVSDK,设置移动直播 Licence 必须用 TXLiveBase,设置短视频 Licence 必须用 TXUGCBase,如果弄混了会出现校验失败.
[TXLiveBase setLicenceURL:@"http://license.vod2.myqcloud.com/license/v1/df2203aa377aad6f1e48912abc264e4a1/TXLiveSDK.licence" key:@"61736d7c5fb27e24480d5a1af99871"];
[TXUGCBase setLicenceURL:@"http://license.vod2.myqcloud.com/license/v1/df2203aa377aad6f1e48912abc264e4a1/TXUgcSDK.licence" key:@"61736d7c5fb27e24480d5a1af99871"];
3. 直播水印为什么不显示,应该怎么添加?
水印只能在观众端看到,在主播端看不到的。
水印的添加方式有两种:
注意 不推荐控制台上传水印,会额外引入播放延迟。
4. 怎么确保在推流或者播放过程中不会熄屏?
iOS端在 Controller 里面调用 UIApplication setIdleTimerDisabled:用于控制自动锁屏,SDK内部并无修改系统锁屏的逻辑
5. 推流过程中报视频编码失败错误?
如果使用的精简版SDK,并且测试的机型为 iOS 8版本的系统,那么有可能遇到这个问题。
原因是ios 8版本的系统对硬编码支持的不是很好,因此我们SDK内部做了保护措施是当硬编码失败会切换成软编码,但是精简版为了减小体积所以不支持软编码的方式。解决方案是换成专业版SDK,使用软编码。
6. 推流时音频采集怎么实现多个mic之间的切换?
SDK 默认是不支持采集音频过程中切换 mic 的,如果需要切换 mic,可以使用自定义采集音视频数据,可以在业务层自行实现。
7. 推流的音频降噪要怎么做
SDK 对于 32000Hz 的音频数据是支持降噪的,现在 SDK 都是 48000Hz 采样率的了,基于采集效果提升的考虑,将降噪接口去掉了。
噪音太大通常原因是采集端和播放端距离过近造成的声音循环采集,可以将两台设备离远一些(3m 以上),或是更换几个不同手机直播,不同手机在音频采集上的处理不同。
8. 移动直播TXLiteAVSDK有没有引入B帧?
目前 iOS 端不支持,Android 端支持在编码中增加 B 帧。如需要开启,可以将 enableVideoHardEncoderMainProfile()
设置为 True。
// 设置硬件编码支持MainProfile(增加 B 帧)
mLivePushConfig.enableVideoHardEncoderMainProfile(True);
mLivePusher.setConfig(mLivePushConfig);
引入 B 帧的好处是让画质更佳,但也是增加延时。因为增加 B 帧会导致每个 GOP 中每帧画面的 PTS 和 DTS 不对齐,从而增加编码和解码耗时。
9. 动态切换纯音频推流问题?
动态切换纯音频推流会出现主播端画面闪屏?播放端卡在最后一帧?动态切换纯音频和音视频,会出现短暂音画不同步问题?
- sdk不支持动态切换纯音频推流,如果需要动态切换,闪屏问题可以业务逻辑处理一下,切换时用其他view遮挡或者隐藏,或者结束推流,重新走推流;
- 观众端问题,可以通过聊天自定义消息,当主播需要切换纯音频时,发一条自定义消息,播放端隐藏画面或其他图片代替;
- 动态切换短暂音画不同步问题,这个是正常的,sdk在纯音频推流的时候,会缓存大量的音频数据,当还没有播放完成,主播端切换为音视频,观众端拉到视频和音频,造成音频的延迟大于视频,sdk会有追时延功能,保证音画同步,过一段时间就会恢复,但如果不能满足用户需求,请主播端重新走推流逻辑,或者主播端通过自定义消息通知观众端,走重新拉流逻辑,解决此类问题。
10. iOS端切换前后台报错编码失败?
目前iOS系统,硬编码器进入后台后会停止工作,导致编码失败。解决办法是采用硬编码的方式进入后台一定要调用后台推流接口pausePush或者换成软编码方式也不会有这个问题。
11. SDK分辨率设置的540_960实际输出的分辨率是544_960?
在有些预处理shader,以及编码器需要width height为16的倍数,否则会出现绿边的现象。
12. 移动直播 TXLiteAVSDK,本地仪表盘指标数据怎么看?
参考:https://cloud.tencent.com/developer/article/1399314
三、直播拉流
1. PLAY_TYPE_LIVE_RTMP_ACC连麦低延时播放,报错获取“加速流地址失败”?
低延时拉流播放需要满足以下条件:
1、购买了低延时播放套餐,或者appid在后付费名单中;
2、防盗链鉴权参数必须正确;
3、UDP协议没有被封锁,尤其是UDP的443和8080端口;
4、需要用 TXLiteAVSDK 推拉流才支持。
2. 直播可以看到画面,但是没有声音
可以按以下步骤进行检查:
- 将拉流地址分别使用第三方播放器(如 VLC、ffplay 等)以及Demo播放器进行播放
- 如果都没有声音:确认是否调用了静音接口
setMute(true)
- 如果第三方播放有声音而 Demo 播放没有:检查音频文件格式,SDK 音频解码支持 AAC 格式,建议在推流端推流时修改成 AAC 格式。
3. 直播可以听到声音,但是没有画面
对比一下Demo的播放效果
如果demo和客户工程都没画面,打开手机gpu渲染再试,并联系腾讯技术支持。
如果demo正常而客户工程没画面,检查客户工程的回调事件能否打印出2003 PLAY_EVT_RCV_FIRST_I_FRAME 渲染首个视频数据包(IDR)。如果渲染首个I帧一直失败,请检查代码层是否关闭了 GPU 渲染功能。
注意 SDK默认是需要GPU渲染的。Android 4.3之前的几个版本,手机gpu性能还不怎么好,要求app开发者在代码层指定gpu渲染功能的开或关,4.3 之后的版本都是默认打开的,也就不需要再指定gpu的开关了,但是一些比较老的工程迭代过来,会保留有关闭gpu的代码,开发者找到它们,注释掉即可。
4. 直播看到的画面左右相反怎么办?
参考 API 文档镜像接口setMirror
5. 拉流播放时怎么做到听筒与扬声器切换?
播放时可以使用setAudioRoute
接口实现听筒与扬声器切换。
6. 移动直播是否支持H265
- 移动直播SDK推流暂时不支持H265编码;
- 腾讯云服务端支持H265编码的码流,需要提工单配置;
- 腾讯云直播配置完成推上H265的流之后,播放地址后面加_h265后缀就能播放了;
- 移动直播SDK支持H265硬解码方式播放。
7. 直播精简版播放器是否支持缓存?
精简版sdk不支持缓存,其它版本支持缓存功能;
- 精简版sdk跟其他版本sdk点播使用的底层播放器不一样,精简版使用系统exoplayer播放器;
- ijkplayer播放器的库比较大,精简版sdk没有使用所以体积较小。
四、MLVBLiveRoom连麦互动
1. RoomService中,房间和群组是什么关系?
移动直播sdk、即liteAVSDK,最基本的能力是:推流、拉流。
推流:是指将音视频数据采集编码之后,推送到您指定的视频云平台上。组件是LivePusher。
拉流:是从云服务器上面获取到音视频数据,在本地渲染播放。组件是LivePlayer。
可见,移动直播sdk是没有提供房间管理的功能的,这部分由客户自己完成。腾讯云研发团队提供了房间管理的开源代码,即后台roomservice、终端liveRoom/rtcRoom。
RoomService中引入了云通信SDK的群组、消息功能。
房间与群组的关系:终端createRoom请求到后台,后台创建roomid(只是一个字符串)、同时调用云通信restAPI创建im群组,roomid字符串与groupid字符串相同,这就是我们说的真正的房间。
所有人进入直播间,都要加入群组:调用joinGroup加入groupid。大小主播要开始推流了,要加入到roomid:调用addPusher加入roomid。
所以:房间可以理解成直播间,包括roomid和groupid,groupid里面的是直播间里的所有人,roomid里面的都是推流者。
2. 创建房间接口doCreateRoom
调用成功,但是查询房间接口getRoomList
查询不到房间的信息
参考 Demo 按顺序调用doCreateRoom()
->addPusher()
->startHeartbeat()
时才会激活房间,只调用doCreateRoom()
的话房间并未激活,因此会查询不到。
注意roomService 后台逻辑:
客户端调用doCreateRoom()
接口请求到后台,后台调用 restAPI 创建 IM 群组,把 IM 群 ID 返回给客户端;当客户端调用addPusher()
加入 IM 群组时,激活房间。startHeartbeat()
用于进程检测机制。
doCreateRoom(roomID, roomInfo, new BaseRoom.CreateRoomCallback() {
@Override
public void onError(int errCode, String errInfo) {
callback.onError(errCode, errInfo);
}
@Override
public void onSuccess(final String newRoomID) {
//5.请求CGI:add_pusher,加入房间
addPusher(newRoomID, pushURL, new AddPusherCallback() {
@Override
public void onError(int errCode, String errInfo) {
callback.onError(errCode, errInfo);
}
@Override
public void onSuccess() {
mCurrRoomID = newRoomID;
//6.调用IM的joinGroup,加入群组
jionGroup(newRoomID, new JoinGroupCallback() {
@Override
public void onError(int errCode, String errInfo) {
callback.onError(errCode, errInfo);
}
@Override
public void onSuccess() {
mHeartBeatThread.startHeartbeat(); //启动心跳
callback.onSuccess(newRoomID);
}
});
}
});
}
});
3. 房间在什么条件下会关闭,可以通过哪个接口关闭?
房间关闭的条件:
- 主播主动离开房间时,关闭房间
- 主播心跳断开 20s,关闭房间(判断机制是基于 roomService 的后台逻辑,开发者可自行修改)
- 调用关闭房间的接口
destroyRoom
注意前两个条件,是roomservice后台的默认触发条件,客户如果没有开启心跳,20S后业务后台会关闭房间。所以要修改前两个条件,请修改后台代码。第三个条件是对外暴露的接口,因为有前两个条件的存在,覆盖了大部分场景,所以我们终端demo中没有调用
destroyRoom
。
4. 连麦中观众列表该怎么做,RoomService 提供的三个接口可用吗?
不能直接使用 RoomService 提供的观众管理接口:addAudience
、delAudience
、getAudiences
。
原因:这几个接口设计之初只是为了 Demo 的界面观众展示,出于方便数据直接存放在内存里,最多存储 30 个人(可修改)。
开发者的直播 APP 在处理观众管理时通常会有一些业务实现,如头部观众优先显示,而且实际线上运行时存储量大,不推荐使用内存存储。
建议开发者自行搭建数据库存储观众信息,使用 roomid 与直播间进行关联,观众列表可以参考腾讯视频云自由开播后台服务进行实现。
5. 移动直播连麦时,大小画面的位置可变吗?
可变。
主播端/连麦端的大小画面是在客户端本地进行渲染叠加的,UI 上的位置显示开发者可自行改变。
普通观众端看到的大小画面是云端混流后的画面,可以通过修改云端混流时的大小画面参数来进行配置,具体参数请参考文档云端混流进行配置。
6. 连麦时有回音?
可以开启回音消除。
setVideoQuality设置参数:大主播推流VIDEO_QUALITY_LINKMIC_MAIN_PUBLISHER、小主播推流VIDEO_QUALITY_LINKMIC_MAIN_PUBLISHER。内部自动实现回音消除。
enableAEC(true)是回音消除接口,如果连麦没有采用上面两种模式,就需要手动调用这个接口。
注意回音消除要配对使用,假如客户用了三方推流设备连麦,回音消除有可能无效。
注意建议连麦时,两台设备保持3米以上。开启了回音消除,会过滤掉手机喇叭播放出的声音。但是两台手机离的过近,两端的麦克风同时录入了两端的声音,这种回音会伴随有蜂鸣声,只能从使用场景上规避。
7. 纯音频连麦,要怎么做?
- 把音视频推流换成纯音频推流。
- 云端混流换成纯音频混流,混流的包体如下所示:
- 可在liveroom方案上修改,改动量不大。也可自研。注意 开发者如果启动纯音频推流,但是通过 rtmp/flv/hls 方式的播放地址拉不到流,请提工单联系我们。
{
"timestamp":int(time.time()), # UNIX时间戳,即从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数
"eventId":int(time.time()), # 取随机数即可,标识一次网络请求
"interface":
{
"interfaceName":"Mix_StreamV2", # 固定取值"Mix_StreamV2"
"para":
{
"app_id": 9527, # 填写直播APPID
"interface": "mix_streamv2.start_mix_stream_advanced", # 固定取值
"mix_stream_session_id" : "5000_enson", # 填大主播的流ID
"output_stream_id": "5000_enson11", # 填大主播的流ID
"output_stream_type": 0, # 填输出流类型
"input_stream_list":
[
# 大主播:背景画面
{
"input_stream_id":"5000_enson11", # 流ID
"layout_params":
{
"image_layer": 1 # 图层标识号:大主播填 1 ;
"input_type": 4 # 标记混入纯音频
}
},
# 小主播按照顺序填写2、3、4、5、6
# 小主播1
{
"input_stream_id":"5000_enson22", # 流ID
"layout_params":
{
"image_layer": 2, # 图层标识号
"input_type": 4 # 标记混入纯音频
}
},
]
}
}
}
四、直播录屏
1. iOS 端录屏推流时播放端听不到麦克风采集的音频?
在 App 内调用录屏扩展来推流时,需要启用麦克风:RPScreenRecorder sharedRecorder.microphoneEnabled = YES;
2. iOS端使用SDK摄像头推流正常,录屏推流失败?
有种场景是6.3版本之后TXLiteAVSDK需要校验licence成功才能推流。licenceURL默认是http的,如果iOS工程里面没有配置ATS,那么就无法下载到移动直播licence带着校验失败。
解决办法:
1、licenceURL使用https;
2、或者工程配置NSAllowsArbitraryLoads=YES。
五、直播云端混流和录制
1. 直播怎样录制纯音频的视频?
指定房间录制是通过在推流地址后面带上推流参数:
纯音频:record_type=audio;视频:record_type=video;如果视频和纯音频都需要,可以先录成视频,后续再在点播里边转码成纯音频。
2. 直播后台录制Live_Tape_Start只能录制30分钟吗,如果要录制2小时甚至更长,怎么办呢?
是的,实时视频录制任务时长支持最大为 30 分钟,如果传入任务结束时间与当前时间差大于 30 分钟,则按 30 分钟计算。录制时长建议控制在 5 分钟以内。需要多次调用满足长时间录制。
注意这个录制功能提供出来,是为了满足录制精彩片段的需求。如果有长时间录制、全程录制的需求,请使用全局录制或指定流id录制
3. 主播使用纯音频推流,为什么点播控制台没有视频文件?也没有收到录制文件落地的回调?
如果主播使用纯音频推流,需要在推流的 Url 地址后面添加参数 record_type=audio ,这样才能保证有录制文件生成。值得注意的是:建议推流地址由服务端生成,然后下发给客户端。客户端只是在 Url 地址后面增加录制纯音频参数。
如果你想了解更多直播录制的信息,可以阅读 如何录制并回看
六、高级功能
1. 移动直播TXLiteAVSDK自定义采集数据支持哪些数据格式?
iOS自定义采集:
sendVideoSampleBuffer,硬编支持NV12和BGRA格式,软编只支持yuv420p格式。且必须在config里设置分辨率。
Android自定义采集:
sendCustomVideoData,只支持i420格式。
2. 移动直播 SDK 如何实现自定义采集?
iOS端参考:https://cloud.tencent.com/developer/article/1403024
Android端参考:https://cloud.tencent.com/developer/article/1402828
3. 移动直播 SDK 如何实现自定义渲染?
Android端参考:https://cloud.tencent.com/developer/article/1470377
4. 移动直播直播播放如何获取YUV数据?
Android端参考:https://cloud.tencent.com/developer/article/1470373
5. 动效版本SDK调用了动效接口不生效?
- 检查YTFaceSDK.licence 命名是否正确
- 检查licence是否过期(下载查询工具或则联系我们的开发同学)
- 检查pitu资源是否添加正确,尤其要注意 handdetect,handtrack,res18_3M三个文件要以folder refrence形式添加,最简单的方法就是比对自己工程添加的动效文件是否和我们demo添加的完全一致
- 如果更新了licence,请确保使用的是最新的licence,如果不确定,可以查下licence的有效期(下载查询工具或则联系我们开发同学),另外如果工程更换了licence,请先clean工程,删除本地安装包,重新编译。
七、Service服务端
1. 使用自由开播、直播连麦解决方案,如何比较统计直播间的观看人数?
1). 腾讯云直播提供统计 API,开发者可以通过调用 查询统计信息 接口来查询某条直播流的统计信息的观看人数。
2). 如果开发者项目工程中有使用到 云通信 组件,可以调用 IM 群人数统计接口。
目前方案 1) 和 2) 都统计出来的人数不是很准确,如果开发者对在线人数要求不高,可以直接上述方案。
如果开发者需要很准确的统计在线人数,最好自己服务器实现统计逻辑。
- 增加观众数(Client -> Server)
当有新的观众加入时,意味着某个房间的观众数要 + 1,可以让 App 的观众端在进入房间时向 Server 发送一次累加请求。 - 减少观众数(Client -> Server)
当有观众退出房间时,意味着某个房间的观众数要 - 1,可以让 App 的观众端在退出房间时向 Server 发送一次累减请求。
2. 直播后台回调错误码有哪些?
- 用户手动断流code为1;杀死app code为3;
- controller鉴权失败,拒绝推流code为18;
- 服务器70s没有收到数据code为20;
- 强制断流code为 21(21表示客户调用接口断流或者关闭流,亦或者是客户控制台点击流关闭按钮)。
3. 编译 Java 版本的 RoomService 和 WebRTC 的最佳步骤
编译 roomservice_server_java 或者 webrtc_server_java 的 war 包。最好按照这种方式 本地 run 起来,顺便编译出 war 包 来编译包。这样就能确保 能正常编译出包
八、点播
1. iOS端超级播放器集成,pod 'SuperPlayer'报错?
如果pod报下列错误,可能是本地仓库比较旧,可以尝试执行:
1). pod repo remove master
2). pod setup
3). pod install
2. TXVodPlayer点播flv格式视频缓冲时间比较长?
flv没有类似mp4的索引表,不能精确网络请求数据,现在的做法是一直往下读,所以会比较慢。建议优先用mp4或m3u8做点播。
3. 点播播放的seek方法(设置进度)怎么用?为什么播放时设置了进度值,却一直在开始点加载?
要在播放成功事件(PLAY_EVT_PLAY_BEGIN)之后调用TXVodPlayer.seek()才有效。播放器没有播放成功,无数据源信息,设置播放器进度是无效的。seek会重复触发播放事件的PLAY_EVT_PLAY_BEGIN事件,请注意不要反复seek。
注意 客户做点播,请使用TXVodPlayer,不要使用TXLivePlayer。SDK早期版本只有 TXLivePlayer 一个 Class 承载直播和点播功能,但是由于点播功能越做越多,我们最终在 SDK 3.5 版本开始,将点播功能单独分离出来,交由 TXVodPlayer 来负责。但是为了保证编译通过,您在 TXLivePlayer 中依然可以看到类似 seek 等点播才具备的功能。
4. 推流地址怎样指定任务流参数设置录制文件视频封面?
在推流地址后拼参数 &procedure=QCVB_SimpleProcessFile(1, 1,10,10) 可以对视频文件截图,得到的截图会回调给点播控制台设置的回调地址。
其中 QCVB_SimpleProcessFile 有四个参数,分别是:转码、设置水印、使用截图设置视频封面、采样截图。
参数说明:
1、若填写1,说明按默认模板处理。
2、若填写0,则不进行处理。
3、若填写10,说明按照10模板号处理。
4、转码参数那里,可以选定具体格式转。
5. 精简版和专业版SDK在点播播放器的区别?
iOS精简版点播播放器用的系统AVPlayer,Android端精简版用的EXOPlayer。专业版基于ijkplayer。
九、更多
移动直播的基础知识【直播、点播、协议】
视频卡顿怎么办【卡顿、延时】
画质差怎么办【曝光、美颜、滤镜、马赛克、FPS、耗电量】
直播看不了怎么办【播放、防火墙】
怎么实现秒开【GOP、延迟修正】
怎么获取URL【流id、频道、房间、直播间】
怎么开通各项云服务【appid、bizid、key、回调、点播、云通信、sdkappid、cos、服务器】
如何联系我们【工单、技术支持】
事件通知码【回调】