基于WebAssembly的H265播放器

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 基于WebAssembly的H.265播放器器 腾讯前端⾼高级⼯工程师 陈映平(程序猿⼩小卡) 1
2. 陈映平 (程序猿⼩小卡) 腾讯⾼高级⼯工程师,IVWEB团队负责⼈人之⼀一 对前端性能优化、Node.js、⽹网络协议等有较为深⼊入的理理解。 活跃于技术社区,多次参与⾏行行业技术⼤大会分享,著有开源电⼦子 书《Nodejs学习笔记》。 2
3. 分享⼤纲 1. ⽅方案背景介绍 2. ⽅方案选型 3. 播放器器架构设计 4. 线上实践 5. 未来展望
4. ⽅案背景介绍 4
5. 直播⾏业概况 语⾳音直播 2003 2008 秀场直播 2011 PC聊天室 ⼤大混战 移动直播 2015 2014 2016 垂类直播 直播元年年
6. 直播⾏业成本⽀持 内容 带宽 薪酬
7. ⾼昂的带宽成本 流量量计费⽅方式:峰值带宽计费 假设业务峰值带宽20G,⼀一年年带宽费⽤用 ≈ 0.58 * 20 * 1024 * 365 = 435W
8. ⾼昂的带宽成本 带宽⽀支出(百万) 220 同⽐比增⻓长率(%) 66.8% 210.5 70% 195.7 174 161.6 165 169 52.5% 42.1% 110 35% 21.5% 21% 55 17.5% 8.3% 0% 2018 Q3 2018 Q4 2019 Q1 ⻁虎⽛牙直播带宽⽀支出情况(百万) 2019 Q2 2019 Q3
9. 需要什么直播⽅案 延迟 成本 性能 扩展性
10. ⽅案选型 10
11. 常见直播协议 RTMP HLS HTTP-FLV RTMP HTTP HTTP FLV H264 AAC .m3u8 .ts H264 AAC FLV H264 AAC 延迟 是否私有协议 插件⽀支持 HTTP-FLV 2~5S(适中) 否 flv.js √ HLS 10S+(⾼高) 否 hls.js X RTMP 1~3S(低) 是 flash X { 流媒体协议 { 编解码器器
12. 视频编码简述 视频的构成 视频 视频帧 视频帧 视频帧 视频帧 切⽚片 视频帧 视频编码 视频帧 分块 视频切⽚片 视频切⽚片 视频切⽚片 视频切⽚片 压缩 视频帧 (压缩后) 视频帧
13. 为什么视频编码很重要 例例⼦子:540*960 的视频,每秒15帧,1分钟的数据量量 540 * 960 * 8 * 3 * 15 * 60 / 8 / 1024 / 1024 = 1334Mb ⼀一帧 ⼀一秒 ⼀一分钟(bit)
14. 为什么视频编码很重要 1、视频编码主要做什什么 : 压缩视频尺⼨寸 编码类型 视频原始尺⼨寸 压缩后尺⼨寸 压缩率 H264 1334Mb 11Mb 120倍 2、带宽费⽤用: < 1%
15. 视频编码技术的发展 ISO/IEC 废弃,没有发布 ISO/IEC + ITU-T ISO/IEC + ITU-T MPEG-1 MPEG-3 H.264 H.265 1992 1994 ? 1998 2003 2012 MPEG-2 MPEG-4 VP9 ISO/IEC ISO/IEC Google H.264/AVC:MPEG-4 Part 10 H.265/HEVC:MPEG-H Part 2 2013 MPEG:ISO/IEC Moving Picture Experts Group VCEG:ITU-T Video Coding Experts Group JVT:Joint Video Team
16. 为什么选择H.265 H265特点 视频画质更更⾼高 压缩效率更更⾼高 码率要求更更低 同⼀一个视频流量量对⽐比 MPEG-4 H.264 H.265 10 20 30 40
17. 为什么H.265压缩⽐更⾼ H.265 H.264
18. H.265问题 浏览器器⽀支持情况差
19. ⽅案参考 1、业界⽅方案参考 ⽅方案 流媒体协议 解码⽅方式 ⽀支持⾳音频 ⽀支持H.264 ⽀支持H.265 是否打算⽀支持H.265 flv.js HTTP-FLV MSE 是 是 否 不不打算⽀支持 libe265.js ⽆无 WASM 否 否 是 已⽀支持 2、解码⽅方案对⽐比 复⽤用现有能⼒力力 性能 可维护性 MSE 需实现解码算法 ⼀一般 差 X WASM 复⽤用现有能⼒力力(FFmpeg) 中 好 √
20. ⽅案选型 1、最终⽅方案: FLV + WebAssembly + FFMpeg + H.265 2、FFMpeg:跨平台的⾳音视频录制、转码解决⽅方案 3、WebAssembly:可在浏览器器运⾏行行的⾼高性能模块; 4、WebAssembly浏览器器⽀支持情况
21. 播放器器架构设计 21
22. 直播通⽤架构 RTMP ⾳音视频服务 流媒体封装 FLV(H264/ACC) ⾳音视频编码 H264/ACC ⾳音视频采集 主播(开播) HTTP + FLV(H264/ACC) 流媒体解封装 H264/ACC ⾳音视频解码 YUV / PCM ⾳音视频播放 观众(收看)
23. FFmpeg核⼼编解码流程 IO Demux Decoder Filter Encoder Mux
24. H.265播放器解析、播放流程
25. 播放器整体架构 Renderer - Main Thread 视频渲染 ⾳音频播放 Utilities - Main Thread 播放⼯工具栏 媒体⾯面板 性能统计 性能/异常监控 Decoder (WebAssembly + FFmpeg +C) 解码缓存 解复⽤用 FLV 视频解码 ⾳音频解码 H265 / … AAC / … Decoder Thread IO Thread 解码器器加载 解码调度 流加载 流缓存 控制器器 ⾳音画对⻬齐 IO控制器器 流检测 Player - Main Thread 播放器器实例例 线程调度 数据中转 统⼀一控制
26. 线上实践 26
27. 数据验证 测试机器器:MacBook Pro (2017)  处理理器器 4.2 GHz Intel Core i7  内存 16 GB 2400 MHz DDR4 实验1:播放15分钟,CPU和内存占⽤用 平均内存占⽤用 平均CPU占⽤用 CPU波动 内存占⽤用波动 181.96MB 34.98% 19% - 59% 122.4M - 236.23M 实验2:同⼀一个直播间,H265 vs H264,播放15分钟 编码类型 播放时⻓长 流量量⼤大⼩小 H265 15min 138MB H264 15min 197MB ——流量量减少30%
28. 问题:FLV规范如何 ”⽀持” H.265 FLV Header FLV File Body PreviousTagSize0 Tag1 PreviousTagSize1 Tag2 CodeID:0x12 . . . 标准规范:Video File Format Specification Version 10
29. 问题:⾳画不同步 偏移过⼤大会导致 『⾳音画不不同步』 解码播放流程 视频解码 视频帧(pts) 视频流 播放器器 时间戳同步 ⾳音频解码 播放 ⾳音频帧(pts) 潜在问题:PTS(视频)、PTS(⾳音频) 偏移导致⾳音画不不同步 • 考标准:Rec. ITU-R BT.1359-1 • 参考值:Diff值 = pts(⾳音频) - pts(视频) 可以感知 ⽆无法忍受 可以感知 ⽆无法感知 ⽆无法忍受 Diff值 -185ms -125ms +45ms +90ms
30. 问题:⾳画不同步 ⽅方案:视频对⻬齐⾳音频 • ⼈人⽿耳对流式的⾳音频更更敏敏感,容易易察觉到不不连贯 • ⼈人眼对视频帧的刷新相对不不敏敏感,不不易易察觉 A A A A A pts(⾳音频) Master Clock (m-clock) diff = pts(视频) - m-clock Shipin min < diff < max P P p p pts(视频) 参考:播放器器技术分享(3):⾳音画同步 min- <= diff <= min sleep(diff - min) 渲染 diff < -min || diff > max 丢弃
31. 未来展望 31
32. 未来展望 ⼀一、完善的WEB⾳音视频播放能⼒力力 1.⽀支持直播、录播; 2.⽀支持多种流媒体协议:flv、hls、webrtc等; 3.⽀支持多种编码格式:h264、h265、vp9、AV1等; 4.⽀支持扩展选项:截图、滤镜等; ⼆二、定制化能⼒力力 1.可根据使⽤用场景选择、组合播放能⼒力力; 2.抹平不不同流媒体协议API之间的差异,开发者实现⽆无缝切换播放⽅方案
33. Thanks 33

Accueil - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-15 09:51
浙ICP备14020137号-1 $Carte des visiteurs$