移动直播(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. 直播可以看到画面,但是没有声音

可以按以下步骤进行检查:

  1. 将拉流地址分别使用第三方播放器(如 VLC、ffplay 等)以及Demo播放器进行播放
  2. 如果都没有声音:确认是否调用了静音接口setMute(true)
  3. 如果第三方播放有声音而 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

  1. 移动直播SDK推流暂时不支持H265编码;
  2. 腾讯云服务端支持H265编码的码流,需要提工单配置;
  3. 腾讯云直播配置完成推上H265的流之后,播放地址后面加_h265后缀就能播放了;
  4. 移动直播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、服务器】

如何联系我们【工单、技术支持】

如何适配苹果ATS

事件通知码【回调】


文章来源于腾讯云开发者社区,点击查看原文