LVS 《视频生产环境下的播放体验》专题PPT反稿

上周六讲完了,官方录像、会场记录还没出。先放PPT和简单的演讲大纲。反正我自己的场,不太涉及版权问题。但是肯定没人家官方记录的好。
Que一下官网:https://www.livevideostack.cn/ 大家可以实时关注下新的动态。下一场大会在旧金山。估计你们也去不了(反正我也去不了)。
PS: 斗鱼《HEVC Web解码》和B站的《视频质量评价》专题也非常有趣。可惜B站的PPT确定不公开了。至于B站圆桌专题。。并不是很技术。有兴趣当CTO的可以康康。

言归正传




用户上传音频/视频文件,邀请协同人员。审查片子。修改片子。上传更新版本
核心功能点
版本管理/流程控制
协作:审看、批注
传输/存储/转码/加密


用户工作流
用户工作流存在共通点和机会。在制作环节切入,需要尽量符合他们在工作栈上的使用习惯和要求。
高度依赖工作栈、同步工具不能完全取代工作栈。就像Git无法取代IDE和编程语言。
不同行业在使用过程中,工作流程差别较大。


视频工作栈
要求:精准控制到帧
下半部分:标注、时间轴控制区
上半部分:资源管理区、视频播放区、参数调整区(主视角)


音频工作栈:
单轨:波形图、电平、频谱
多轨:轨道、轨道波形、轨道电平和轨道效果
右侧:(主视角)
左侧:参考视频、资源、特效资源

其他类型工作栈
……
字幕:字幕环节
特效处理:视频制作环节
文档处理:剧本创意环节

用户对播放器的要求:
使用习惯不同、不可以有专业性术语错误。
音频、视频需要更精准的控制:精确到帧、快速seek到有语音的时间点、波形判断是否符合交片要求(重要)
支持音视频和音视频以外所有相关格式的播放。如字幕、文档、特效等。

与传统播放器的区别
传统播放器:
用户可见部分:看、播放控制、弹幕等
用户不可见部分:缓存控制、解封装、解码、播放日志等
协作播放器
用户可见部分:看、精准播放控制、批注展示
用户不可见部分:缓存控制、解封装、解码、音频视频参数解析、格式支持、播放日志等




内核层
视频解析控制
HLS
私有解密模块(WASM/NodeAddon)
音频解析控制
私有解密模块(WASM/NodeAddon)
波形图分析模块
PDF、Image、Subtitle 解析模块
时间轴管理模块
单文件
多文件:虚拟时间轴
批注模块
批注渲染模块
批注编辑模块


界面层:
主展示区
音频、视频、PDF、字幕、图片、特效(预留,暂时没做)
进度条、批注条
控制条

Ext层:主要负责批注展示、音视频基础信息展示、批注输入发送


之前是记录了PTS进行逐帧播放
出现问题
可变帧率一般是在转码(用户管它叫压制)环节产生、实际在制作中工作栈都是不可变帧率进行制作。用户习惯上其实是需要时间间隔相同的逐帧播放
一个例子:
蝴蝶的一个运动曲线,在制作环节,并不是匀速运动,而是做的一个贝塞尔曲线,让蝴蝶更为生动。
审看环节,特效师剪辑师再检查问题时,逐帧播放看的是运动位置间隔是否正确。先距离短、再距离长、再距离短。
可变帧率的模式下,会对用户的判断造成一定影响
按照目标FPS等时seek


音频:波形图采样
最初是我们比较习惯的降低采样率做的一个小的wave文件读取渲染。
问题:
音频采样是还原音波。而工作栈中,缩小后展示的是波峰波谷的数值,一边用户更好的判断响度值。而直接降低采样无法还原到工作栈的显示效果
解决:
服务端魔改FFMPEG取区段最大值
前端取区段最大值


上线后发现在播放过程中有的时候会模糊
问题成因
WebGL渲染区间在[-1,1],而单个线的判断实际是个小数的[x.y]对应到实际渲染时,不一定刚好是那个像素点完整展示单个线。造成实际渲染时,显卡给出的显示是算了两条线的色彩均值,造成模糊。
解决
根据实际像素,调整渲染


注展示:
位置差异:服务端压缩时候可能会改变分辨率,需要记录的是百分比。
时间差异:部分视频本身有个 StartTime、转码后HLS的音频StartTime 和视频StartTime不一致,为了降低首帧时间,取得他俩的最小值,这里需要重新找准。目前是以首个视频帧的时间


总结展望
还有些模块没写:如特效模块、
还有些问题没有解决:
字幕渲染时候,字体不一定存在。还原的效果就和字幕工具中的不一致。
字幕特效(ASS)取的绝对定位。渲染大小可能产生差异。需要取源文件的宽高重新算比例。


最后 群:711929228
进群问题:OpenGL shader最常用的两个Shader ?
vertext fragment (一个算顶点的,一个算颜色的。)
PS:有问题的话,麻烦私戳我时候,给个报错信息,以及源文件~谢谢啦~