新微视短视频之路上的技术挑战及应对

微风

2019/03/24 发布于 技术 分类

文字内容
1. 新微视短视频之路路上的技术挑战及应对 钟⾬雨 腾讯微视Android端技术负责⼈人
3. 个⼈人介绍 钟⾬雨 2011 Web Qzone 2014 2018 Android Qzone 腾讯微视 • 实习⽣生⼊入职 • 点播、直播技术负责⼈人 • Qzone V8版本 • 聚焦在⾳音视频领域 • Android端技术负责⼈人
4. • 监控系统:各模块全链路路落地 • 运营质量量:播放秒开 • 沉浸式体验:实时⾳音量量均衡 • 终端ML初探:解决概率性问题
5. 业务背景 “新”微视? • 全新应⽤用:仅继承包名的全新App • ⾏行行业新兵:基础体验感官上的差距 • 创业团队:版本快速迭代,⼈人员快速扩充
6. “⼀一件事情没法评估就没法优化”
7. 第⼀一件事情:⼯工欲善其事,必先利利其器器 • 如何实时掌握外⽹网视频的播放质量量? • 如何定位视频播放相关的问题? • 如何衡量量优化效果?
8. 监控系统架构 视频播放流程 监控事件流 开始 客户端上报模块 后台数据收集 后台数据处理理 接收事件消息 数据分发 推荐系统 video_start_play 异步落地存储 防盗链 video_link_protect 消息队列列 运营系统 log对账 实时监控系统 下载 video_download_ret 缓存 ⽴立即上报 (推荐相关) 批量量上报 (5s 10条) 全链路路流⽔水 video_cache_file 播放 WNS⻓长链接通道 video_play_ret 缓冲 video_seek 结束 开始上报 • 关键步骤插桩 • 独⽴立上报线程 • 隐形发件箱防⽌止不不丢 • wns上报⻓长链接通道,99.9% ⽇日报统计系统
9. 质量量数据化 • 如何实时掌握外⽹网视频的播放质量量? 实时报表 • 如何定位视频播放相关的问题? 全链路路流⽔水&告警 • 如何衡量量优化效果? ⽇日报
10. 全链路路落地所有模块 • 视频⽣生产流程:拍摄,录制,合成,上传 • 资源下载:图⽚片,素材等 • 客观衡量量外⽹网质量量 • push:在线,离线 • 持续提升⽤用户体验 • ……
11. • 监控系统:各模块全链路路落地 • 运营质量量:播放秒开 • 沉浸式体验:实时⾳音量量均衡 • 终端ML初探:解决概率性问题
12. 播放器器架构 WSVideoManager 播放控制 播放回调 ⽹网络控制 数据上报 APP Logic • 播控逻辑,播放回调,数据上报 • 业务定制 • 接⼝口统⼀一 WSMediaPlayer XYZMediaPlayer FFSegmentMediaPlayer FFmpegMediaPlayer HLSMediaPlayer MediaPlayer … LocalProxy 预加载 错误处理理 m3u8分析 • ⽀支持H264,H265 • ⽀支持软硬解 http://127.0.0.1 防盗链 • 播放后处理理:⾳音量量均衡等 … LocalPorxy • 本地代理理架构 • 下载过程⽩白盒化:防劫持,植⼊入监控,调试&定位问题 • HLS优化:预解析m3u8,ts并⾏行行下载 CacheManager CacheKey 分⽚片存储 缓存扫描 分⽚片淘汰 CacheManager • ⾼高缓存命中率,⾼高空间利利⽤用率 • ⽀支持多进程 DataSource HTTPS HTTP MP4 h264 h265 File Assets DataSouce HLS m3u8 • ⽆无数据库依赖⽂文件式分⽚片缓存 TS 内部开源 • ⽀支持多数据源
13. 播放秒开:核⼼心流程 耗时点 • 视频数据下载时间 • 播控逻辑耗时 优化原则 • 尽快获取视频数据 播放中 • playing 结束播放 • release 开始 • videoData 初始化播放器器 • initMediaPlayer 下载数据 • 从CDN下载mp4⽂文件 准备播放 • OnPrepared ⾸首帧渲染 • MEDIA_INFO_VIDEO_RENDERING_START 合理理数据源&预加载 • 减少播控逻辑耗时
14. 数据源MP4的格式简介 -movflags faststart MP4⽂文件是由若⼲干“box”组成,每个box都有⻓长度 和类型,⼤大box中可以包含⼩小box MOOV • 包含所有的Metadata信息 • 初始化解码器器必须
15. 数据源moov是否合理理 MOOV在头部能够减少两次⽹网络请求 [1] rigor.com 1) ⾸首个range请求,拿到头部552KB内容,moov未 找到,reset请求,浏览器器仍然不不能开始播放 2) 第⼆二个range请求,直接探测最末尾的211KB字 节,这次包含moov,可以开始初始化播放器器。 3) 第三次再从头开始的range请求获取视频数据,边 下边播 1) ⾸首个range请求,头部探测即可拿到moov,开 始边下边播 解决⽅方案 • 后台统⼀一转码保证 • 客户端采集后转码保证 • 针对⽼老老数据头尾都做预下载
16. GOP:Group of pictures • I帧是关键帧,可独⽴立解码 • I帧体积约占整个GOP⼤大⼩小的30% GOP150 [1] GOP WiKi
17. 下载数据理理论耗时 Moov⽂文件⼤大⼩小 每秒512字节。按照现在微视视频2500Kbps,GOP150,帧率30的视频源,外 ⽹网平均1000KB/s的下载速度来算,播放⼀一个15s的短视频,关键帧下载时间的理理论值是: (0.5*15 + 2500/8*150/30*0.3) / 1000 = 0.570s ⾸首I帧⼤大⼩小 moov⼤大⼩小 下载速度 理理论下载时间 系统播放器器器器参数 • 7.0以上NUPlayer 关键帧 • 6.0及以下AwesomePlayer 5s AwesomePlayer.cpp 解决⽅方案 • 视频数据预下载
18. ⽤用户⾏行行为分析:⼆二元化明显 53.31% 55.0% 48.1% 41.3% 34.4% 27.5% 20.6% 15.48% 13.8% 7.78% 4.91% 6.9% 0.0% 0-10% 3.48% 3.22% 2.96% 2.67% 2.77% 3.41% 观看完整度 10%-20% 20%-30% 30%-40% 40%-50% 50%-60% 60%-70% 观看完整度:⼆二元化明显 70%-80% 80%-90% 90%-100%
19. 更更加激进的预下载策略略:梯度预下载 预下载策略略 • 梯度预下载视频数据:Mp4 • 预下载下⽅方的三个视频,分别是 7秒、5秒、3秒 • 参数配置化 当前播放feed N (待播放数据缓 存量量8s) 预下载开启 效果 N+1 (7秒) 386ms 227ms N+2 (5秒) N+3 (3秒)
20. 播控逻辑分配系统资源 ⽹网络资源 • 梳理理⽹网络请求:数据上报等 • ⽹网络资源下载:如减包带来的so异步下载 CPU资源 • 耗时逻辑异步线程:播放器器API操作,上报等放⼊入异步线程等 • 主线程耗时:空间换时间MD5,HttpParser结果缓存等 • 优化时序:与播放关联度不不⾼高的逻辑后移,缓存IO等 产品交互策略略 • loading条延迟500ms再出现 • 使⽤用⾸首帧封⾯面,减少闪动 效果 227ms 145ms
21. 播控逻辑的注意点 当前播放feed WSVideoView Looper队列列阻塞 依然很慢? 异步线程 mp.stop() mp.release() mp = null …… mp1.stop() mp1.release() mp = new mp() mp.prepare() mp.play() N+1 (WSVideoView) 解决⽅方案: 多MediaPlayer实例例 mp2.prepare() mp2.play()
22. 视频运营质量量 指标 腾讯微视 ⾸首次缓冲耗时 0.145s 播放成功率 99.9% 下载成功率 99.9%
23. • 监控系统:各模块全链路路落地 • 运营质量量:播放秒开 • 沉浸式体验:实时⾳音量量均衡 • 终端ML初探:解决概率性问题
24. ⾳音量量均衡背景(Audio normalization) 快速滚动视频的时, ⾳音量量忽⼤大忽⼩小, 频繁⼿手动调整⾳音量量 体验很差,怎么办? [1] WiKipedia
25. ⾳音量量如何定义与测量量呢? • ⼈人⽿耳对不不同⾳音频 频率敏敏锐度不不同 • • 频率也会影响⼈人对⾳音量量感受 加权调整 ⾳音压来定义⾳音量量? LKFS:Loudness,K-weighted,relative to Full Scale ; Loudne'' = −0.691 + 1012345 6 78 ∗ :8 8 N: ⾳音频通道数量量 i: 声道ID Zi:平均均⽅方⽔水平 Gi: 声道权重 <100Hz 越低频越感受不不到⾳音量量,所以测量量值减去更更多 100-1K Hz 重要性持平,维持原测量量⾳音量量值 >=1K Hz 放⼤大⾼高频⾳音量量值
26. ⾳音量量均衡:⾏行行业标准 • 优点: • 优点: • 平均⾳音量量相对峰值更更有代表性 • 结果较为拟合 • 逻辑简单 • 缺点: • 缺点: • 峰值不不代表整体 • 结果不不稳定 • 需预处理理获取平均⾳音量量 • 计算量量⽐比较复杂 • 存在爆表⾳音量量 需要做削锋处理理 • 对⽐比度有变化 Peak normalization Loudness normalization 电视和⼴广播领域的⾏行行业标准:EBU R128 LUFS:Loudness units, relative to Full Scale 0LUFS
27. ⼯工程落地:跨平台通⽤用转码⽅方案 原始PCM 测量量原始参数 EBU R128 + Loudness AGC True Peak Limiter •Input Integrated •Input True Peak •Input Loudness Range •Input Threshold 标准均衡处理理的基础上,加⼊入⾼高斯函数做线 性插值,能够更更加⾃自然处理理突然出现的⾼高⾳音 或低⾳音 真实峰值限定逻辑,使⽤用100ms前瞻预测, 保护持续峰值信息不不会爆表失真 新PCM [1] af_loudnorm.c
28. ⼯工程落地:客户端实时探测均衡⽅方案 原始PCM流 滑动窗⼝口 后续播放 ⽆无需实时探测 原始PCM 窗⼝口参数 •Input Integrated •Input True Peak •Input Loudness Range •Input Threshold 原始PCM 新PCM 新PCM EBU R128 + Loudness AGC 原始响度信息回传 后台存储 True Peak Limiter 新PCM • 历史视频再次转码开销⼤大 • 客户端实时探测均衡⽅方案 新PCM 新PCM 新PCM 新PCM 新PCM • 优点: • 纯客户端逻辑 • 众包节省后台机器器 • 缺点(仅⾸首次播放): • ⾸首个滑动窗⼝口⽆无均衡效果 • 越往后偏移效果越精准
29. ⾳音量量均衡:单体效果 处理理前:-36.4LUFS 处理理后:-15.2LUFS 处理理前:-10LUFS
30. ⾳音量量均衡:整体效果 -8.0 -9.7 -9.4 -10.8 -11.3 均衡前响度趋势 -12.2 -13.6 -14.4 -14.7 -15.0 -16.4-16.3 -16.3 -17.8-18.7 -18.6 -16.4 -16.3 -16.1 -15.6 -15.7 -15.7 -15.3 -15.1 -15.2 -16.3 -16.1 -17.9 -15.8 -15.6 均衡后响度趋势 -18.7 -19.2 -20.6 -21.2 -22.0 1 2 3 4 5 6 7 8 9 • 更更加沉浸式的体验 • 兼容⽼老老数据,节省资源 10 11 12
31. • 监控系统:各模块全链路路落地 • 运营质量量:播放秒开 • 沉浸式体验:实时⾳音量量均衡 • 终端ML初探:解决概率性问题
32. 终端ML尝试 • 终端开发过程中遇到很多概率性问题: • 预下载哪⼀一条视频呢? • 预下载逻辑不不灵活:固定下载中间视频 • 视频预下载后 点击率低 3.07%
33. ⽅方案⽐比较 主流后台⽅方案局限性: • 较⼤大的开发⼯工作量量 终端⽅方案的难点: • 收益⼩小 • 没有系统框架⽀支持:iOS Core ML • 多版本迭代 • 运⾏行行性能 • 包增量量⼤大⼩小 不不适⽤用与终端 • 模型更更新 • 学习成本⾼高
34. 模型选定 逻辑回归模型(LR,Logistic Regression) 多权值线性函数 引⼊入逻辑函数 逻辑回归模型 获取最优解 w x = w0 + w1 x1 + ! + wt xt t g ( w x) = t 1 1+ e t -w x Sigmoid f ( x) = p( y = 1 x, w) = g (w x) t 梯度下降 或者 ⽜牛顿法 等 •优点: • LR计算量量⼩小 • 消耗内存少 • 计算速度快 •缺点: • 仅解决分类问题 • 准确度不不如深度学习模型
35. 模型参数训练过程 开始训练 选择训练样本 迭代训练 获取参数 更更新模型 参数和模型验证 1) 获取样本数据 2) 70%数据在Tensorflow中进⾏行行模型训练,获 得参数的最优解。 3) 30%数据验证分类成功率,观测AUC值 4) 将LR模型通过NDK实现,参数可配置 否 分类成 功率 达标? 是 训练结束
36. 重点:数据分析处理理 数据和特征决定机器器学习的上限 特征清洗 预处理理 • 清洗异常样本 • 采样:样本不不均衡,样本权重 • 归⼀一化: ! − ! %&' ∗ ! = !%() − !%&' • 标准化: x = • one-hot: 性别 男 ⼥女女 未知 男 1 0 0 ⼥女女 0 1 0 未知 0 0 1 * x-µ s
37. 实际场景效果 效果对⽐比 4.18% 3.07% • 预加载命中率提升36.15% SDK性能 • ⼤大⼩小:80K, 插件下载; 测试集数据验证AUC=0.65 • 单次计算耗时:约0.06ms; • 内存消耗:没有明显变化。
38. 终端机器器学习⽅方案 业务场景 4 1 视频列列表 终端机器器学习模型 数据筛选收集 推荐BGM 客户端 … 数据DB存储 数据智能上报 SQL查询逻辑组装 脚本⾃自动转换SQL 2 服务端 更更新机器器学习插件 模型参数下发 新模型增加 开发者 上报参数脚本下发 TDW数据捞取 已有模型修改 模型训练 本地模型验证效果 模型数据调整 3 机器器学习模型搭建 特点 维度 终端⽅方案 接⼊入成本 低,⽆无额外消耗 接⼊入⼯工时 低,8⼈人天 实时性 ⾼高,本地计算 特征获取成本 低,直接获取 灵活性 中,热更更新 准确度 中,简单策略略