场景一:美女直播
Step 1:更新最新版 SDK
每一版 SDK 我们都或多或少的对美颜效果进行一定的提升,例如:
1.9.1 我们更新了新的美颜引擎,在前景侧重、算法优化、曝光改善等方面做了不少改进,同时性能也有很大的提升。
1.9.2 我们优化了降噪效果,使夜间的噪点大幅减少,人物的清晰度也有提升。
2.0.0 我们又为 iOS 增加了一些新的滤镜,解决肤色过黄的问题。
... ...
Step 2:设置画质级别
我们要知道直播端看到的画面跟观众端看到的画面是不一样的:
主播 VS 观众:主播看到的画面是经过采集后的视频直接渲染到了手机屏幕上,所以清晰度最高,该画面还要经过视频编码 > 网络传输 > 视频解码才能到达观众的手机屏幕,由于视频编码会导致画质的损失,所以观众看到的画面在清晰度上要逊于主播端。不合理的参数设置会导致画质损失严重,比较典型的一个错误配置就是 “高分辨率配低码率”,这样的配置会导致画面模糊,并且画面马赛克严重。
setVideoQuality
我在 1.9.1 版本的 TXLivePusher 中新加入的 setVideoQuality 函数,并给出了几个级别的设置,您选择高清模式即可达到最佳的美女直播效果,详情请关注 iOS 平台 & Android 平台。
Step 3:Android 增加手动曝光
同样美颜算法在不同的 Android 手机上差异可能很大,主要是曝光的差异产生了视觉感受的大不同。
在 iOS 平台我们采用了系统的自动曝光,但是 Android 机型差异太大,很多千元机的自动曝光效果一般,所以我们还是推荐在您的 UI 界面上提供一个自动曝光的操作滑竿,让主播可以自己调节曝光值大小,以符合他/她的预期。
Android 版 RTMP SDK 中的 TXLivePush::setExposureCompensation 接口提供了调节曝光的能力,参数 value 为 -1 到 1 的浮点数: 0 表示不调整, -1 是将曝光降到最低, 1 表示是将曝光加强到最高。
Step 4:增加色彩滤镜
滤镜也是很关键的一环,不同的色彩滤镜能够营造不同的氛围,主播配合衣服的颜色或者房间灯光选择合适的滤镜,会让整个画面的氛围有更好的效果。
1.9.1 版本的 RTMP SDK 开始支持颜色滤镜, TXLivePusher 中新加入的 setFilter 可以设置滤镜效果,我们设计师团队提供了八种素材,默认打包在了 Demo 中,您可以随意使用,不用担心版权问题。
Step 5:Android 马赛克严重
有些客户会发现 Android 版 RTMP SDK 推流出来的画面马赛克特别严重,尤其是在画面有运动时,这是 Android 硬件编码的常规表现,解决方案有两个:
比较关注耗电
如果您比较关注 App 耗电情况,那么可以考虑直接调大推流的码率,或者使用 setVideoQuality 的高清档位(如果设定的码率比较低,Android 的硬编码模块会通过大幅降低画质来确保码率稳定)。
比较关注带宽
如果您比较关注带宽成本,那么直接调高码率可能并不适合您的需求,这时您可以通过关闭硬件加速解决问题(关闭方法见 setHardwareAcceleration)。
Step 6:关闭网络自适应
TXLivePushConfig 中的 AutoAdjustBitrate 选项是网络自适应开关,开启后,当主播网络变差时,会通过降低画质来保证流畅性,但这一点并不适合美女秀场模式。网络自适应是适合游戏直播场景的技术,因为游戏直播场景中观众对流畅性的追求高于画质,如果在战斗时间主播网络有波动,画质可以差一点,但绝对不能卡,所以降低画质来保证流畅性(帧率)就是必选项。但美女秀场场景中,清晰度更加重要,不少客户反馈有些直播间画质很好,有些直播间画质很差,导致这个现象的一个高概率原因就是开启了网络自适应。
建议您关闭网络自适应,对于出现网络波动的情况,改用 主动提示 的方式进行优化,这种方式更加釜底抽薪。
场景二:游戏直播
Option 1:简单应对
在直播开始的界面上提供三种清晰度选项:标清、高清和超清,让主播自己选择,游戏主播一般相对比较偏专业,会自己摸索出适合自己当前在玩的游戏的效果,三种档位对应的配置如下:
档位 | 分辨率(Resolution) | FPS(FPS) | 码率(Bitrate) |
标清 | VIDEO_RESOLUTION_TYPE_360_640 | 20 | 800kbps |
高清 | VIDEO_RESOLUTION_TYPE_540_960 | 20 | 1000kbps |
超清 | VIDEO_RESOLUTION_TYPE_720_1280 | 20 | 1800kbps |
注意:
游戏直播场景,FPS 最低是 20 ,否则观众端的表现是卡顿感严重。
Option 2:专业应对
根据不同的游戏设置不同的分辨率和码率,例如:
皇室战争:这类画面变化幅度不大的游戏,推荐选择960 * 540的分辨率,800kbps - 1000kbps 的码率就可以输出不错的效果。
捕鱼达人:这类画面变化幅度较大的游戏,推荐选择960 * 540的分辨率,码率相对要高一点,例如1200kbps - 1500kbps。
神庙逃亡:这类画面变化幅度超大的游戏,推荐选择640 * 360的分辨率,码率也要很大,例如 2000kbps,否则妥妥的满屏马赛克。
音视频小科普
Point 1:720P 一定更清楚吗?
如果限定一个码率,例如 800kbps,那么分辨率越高就会让编码器越难做 。可以想象,编码器必须拆东墙补西墙,通过减少色彩信息或者引入马赛克这种“鱼目混珠”的手段来承载足够多的像素点,所以同样的是 2G 的一个电影文件,1080p 画质的版本可能不如 720p 画质的版本看起来更清晰。
同时,如果您的观众都是在小手机屏幕上观看视频,那么960 * 540 1000kbps同1280 * 720 1800kbps的差距其实也不明显,例如下面两张图片就是基于 airplay 技术的 iOS 录屏直播:
注意:
用 32 寸的 LCD 显示器全屏看,还是有差距的。
Point 2:帧率不要超过 24
如果限定一个码率,例如 800kbps,那么帧率越高,编码器就必须加大对单帧画面的压缩比,也就是通过降低画质来承载足够多的帧数。如果视频源来自摄像头, 24FPS 已经是肉眼极限,所以一般 20 帧的 FPS 就已经可以达到很好的用户体验。有些玩过 3D 游戏的朋友可能会说:“游戏的帧率越高越流畅吗?例如 60FPS, 120FPS?”
这里要注意一定不要混淆场景:游戏追求高帧率是渲染帧率,其目的是为了尽可能让 3D 模型渲染出来的运动效果更加接近真实运动轨迹,所以帧率越高越好,但采集帧率不需要这么高,例如手机摄像头,它采集的目标是真实世界的物体,真实世界的物体本来就是连续运动的,而不是用一阵阵画面刷新来模拟的,所以 20FPS 的采集就足以。
对于游戏直播,帧率达到 24FPS 当然最好,但也要考虑到系统编码开销,手机的温度和 CPU 占用等。