媒体智能-淘宝直播流媒体互动实践 | D2 分享视频+文章
背景:今天给大家带来的分享主题是《媒体智能-淘宝直播流媒体互动实践》,内容分为5个部分,首先看看在淘宝直播的直播间里主播可以怎样给用户拜年;然后具体讲如何制作一个手势拜年的特效;接着介绍我们媒体智能整体的方案设计以及其中核心的工作之一,MediaAI Studio这样一款编辑器的实现;最后讲讲我们后续的建设方向。
目录
今天给大家带来的分享主题是《媒体智能-淘宝直播流媒体互动实践》,内容分为5个部分,首先看看在淘宝直播的直播间里主播可以怎样给用户拜年;然后具体讲如何制作一个手势拜年的特效;接着介绍我们媒体智能整体的方案设计以及其中核心的工作之一,MediaAI Studio这样一款编辑器的实现;最后讲讲我们后续的建设方向。
直播间里怎么拜年?
马上又要过年了,每次过年我们都会给亲朋好友拜年。那在直播间里,主播怎么给用户拜年呢?今年年初春节,我们做了一个项目,就是让主播可以在直播间里给自己的粉丝拜年,然后在直播间里出一些春节的氛围特效。
具体的设计方案就是主播在直播的过程中,实时识别主播的拜年手势,来触发一些春节氛围特效的渲染,同时实时识别主播的脸部,来跟随渲染一些人脸道具。
可以看到上面的几个效果示意,比如主播可以通过做一个爱心或者拜年的手势,来触发直播间的花字、对联或者礼花,也可以给主播的面部加上财神帽等人脸道具,增强直播间里的节日氛围。
制作手势拜年特效
那么要在直播的过程中做到这些效果,需要怎么来制作呢。接下来就详细介绍如何在直播间里制作这样一个手势拜年的特效。
大体上分为4个步骤,第一步是设计师通过一些设计软件制作好静态或动态的素材,比如财神帽及相关的微动效,交付物可以是一个序列帧动画;第二步是设计师在我们自研的MAI编辑器里制作完整的素材包,在这个编辑器里可以做画幅的适配、人脸识别跟随、设置手势触发条件,实时的本地效果预览等;编辑好素材之后打包上传到内容素材平台;最后是前台的使用,也就是我们的主播在推流端选择开启一些素材玩法包,然后推流的过程中实时识别和渲染合流,分发给用户端观看。
比如在编辑器里设置识别一个手势,来触发特定的特效,大概的操作流程是这样的:首先添加一个素材贴纸,上传替换素材图片,可以是一个序列帧,然后调整贴纸的位置和大小,播放效果里选择触发条件,通过拜年手势触发。怎么看效果呢?在右侧的预览效果里选择我们预制好的视频,就可以看到通过拜年手势触发了一个花字特效:
再比如我们想给主播戴一个财神帽,大概的操作流程是这样的:首先还是添加素材贴纸,选择财神帽的序列帧动画,调整大小和位置,在跟随位置里选择跟随人脸的前额部位。预览效果,选择我们预制好的视频,可以看到主播在点头的时候,财神帽也会跟着移动,这样就像是给主播戴上了帽子:
素材制作好之后,后面就是上传、分发、使用,我们可以看看在直播间里最终的实际效果:

媒体智能方案设计
前面我们介绍了一个单点的case,那我们定义的媒体智能流媒体玩法到底是什么,接下来我们具体介绍下媒体智能整体的方案设计。我们再来看一个case:

直播间里传统的红包雨互动,是在视频流上盖了一层普通的H5页面,和流内容是割裂的;我们想做的媒体智能流媒体互动,是在视频流中渲染素材,并且主播可以通过手势来控制红包雨的发放,将直播内容和互动深度结合,提升直播的互动率和停留时长。
我们定义的媒体智能,就是在直播和视频流上,结合AI/AR玩法,形成新型的流媒体互动。作为前端,我们的目标是构建从生产到消费的媒体智能方案,同时形成工程化链路,将流媒体互动的生产周期提效至「7+3+1」的模式,即7天算法开发、3天玩法编写、1天素材制作就可以上线一个全新的玩法。比如今年双11花「7+3+1」开发一个全新的玩法,在明年的日常,我们只需要1天制作新素材,或者花3天改一下玩法逻辑,就能变种出一个新的玩法。
接下来我们对方案进行了链路拆解,包括4个步骤,玩法生产、玩法管理、玩法使用和玩法展示。
生产者通过编辑器来生产玩法,通过素材平台来管理素材包,打通ALive平台做组件管理,主播通过多媒体生产端来使用玩法,在中控台做玩法配置和开启,在推流端做玩法执行和合流输出,同时通过SEI关键帧传输素材的位置、热区等信息,在直播间里通过直播容器来监听SEI和互动响应。
媒体智能的方案设计分为两个方面,智能素材和互动玩法。智能素材是面向产品、运营和设计师的,提供一站式的智能素材制作平台,互动玩法是面向开发者的,提供一个支持代码编写、调试、预览、部署的流媒体互动IDE。
什么是智能素材,比如钉钉的Real如我,通过MediaAI Studio生产了大量的智能素材,给用户拍摄场景提供了很多人脸道具;今年春节我们也生产了一些春节氛围应用在直播场景,比如直播间顶部和底部的这些春节氛围动效,以及通过识别主播的拜年手势来触发的特效。
智能素材的技术方案其实比较简单,核心是约定了一套JSON协议的模块配置,底层依托人脸检测、手势检测、物体识别等算法能力,在配置层抽象出模块,包括滤镜、贴纸、美颜美型、文字模板等,每个模块会做一些配置,包括样式、播放效果、动画等等,最后在终端上进行素材下载,完成配置解析,底层的渲染计算引擎根据配置做渲染计算,最后合流输出。
下面是我们定义的模块JSON配置的案例,可以看到里面有编辑器版本、画幅、模块类型配置,以及素材的资源、位置大小信息、播放设置、触发设置、动画设置等。
什么是互动玩法,比如今年双11在淘宝直播里的一些案例,左边是小米超大杯挑战赛,可以看到主播通过身体来控制超大杯的移动,来接收屏幕上方掉落的道具,右边是泡泡玛特的出道挑战赛,可以看到主播通过脸部来控制小人的运动,经过一些碰撞检测可以获得道具积分,来完成一些游戏逻辑。

要在直播过程中实现这样一套流媒体互动玩法,大致的技术方案是这样的。结合前面提到的红包雨的case,我们做一下链路串联。首先通过MediaAI
Studio这样一款编辑器来生成玩法素材和脚本,然后在ALive里新建一个红包雨组件并绑定玩法,主播通过中控台开启玩法,推流端下载、执行玩法脚本,把红包素材合在流里,用户播放端通过流里的SEI关键帧信息获取红包的位置,在ALive组件里消费这次互动,通过绘制热区响应用户操作。

编辑器 MediaAI Studio
前面多次提到了玩法编辑器,在媒体智能的链路里我们的核心工作之一就是要构建一个玩法生产的编辑器。
基于Electron我们打造了MediaAI Studio这样一个玩法生产的编辑器,底层依赖客户端的跨平台渲染计算引擎RACE,RACE集成了算法推理框架MNN和算法平台PixelAI,提供了基础的算法识别、渲染计算的能力。
Electron的主进程负责窗口管理、升级服务等,渲染进程里负责模块树等一些工具和编辑面板,以及实时渲染。同时渲染进程里开了一个worker线程,负责和RACE的node模块通信及一些图像处理。功能层面提供了工程管理、素材制作、玩法开发、账户管理等功能。
我们把RACE的c模块封装成一个.node的c扩展,通过N-API的方式做一些画幅解析、背景设置、渲染输出等功能,通过JSBinding调用c++模块实现js脚本能力。渲染部分会涉及大量的画布像素交换和输出,在渲染层抽象了worker层,包括背景更新、画幅更新、模块更新、Buffer更新等。worker和render之间是通过一些JSON协议和二进制的数据协议进行通信,来实现实时渲染的能力。
这是我们实现的编辑器效果,
从设计师视角可以生产智能素材,这里用到了底部的固定贴纸、头上的人脸贴纸,和手势触发的贴纸:

以及开发者视角可以在编辑器里编写玩法脚本,这个case里是通过脸部识别来控制小鸟运动轨迹,来实现的一个智能互动:
后续建设
媒体智能我们也才刚开始探索,目前主要是工具视角,核心通过MediaAI
Studio这款PC桌面端工具提供智能素材和互动玩法的生产,后续会更多的和平台打通,包括和算法平台、素材平台、发布平台的打通,比如我们的互动玩法里js脚本也需要符合前端安全生产的规范,所以在编辑器里需要和发布平台打通完成项目创建、调试、CR、发布部署等能力。最后是基于工具和平台,提供设计师和ISV生态,甚至是商业化运作,快速扩充直播流媒体互动的体量、丰富玩法类型。

后记:D2直播QA
Q1: 前端在玩法特效这块承担了哪些工作(除素材编辑平台)
A1: 玩法链路主要分为4个环节:玩法生产、玩法管理、玩法使用、玩法展示。玩法生产的核心是MediaAI
Studio这款编辑器,前端基于Electron打造的PC客户端;玩法管理主要是ALive平台;玩法使用是主播推流工具,我们提供了PC和APP两个场景的工具,其中PC推流工具我们也启动了Electron项目,把推流能力和特效玩法两部分更深度结合;玩法展示主要是直播间和短视频里的互动组件,这块整体的开放技术方案也是前端主导的。所以在各个环节,前端都承担了一些工作,其中生产、使用、展示环节前端承担了比较核心的工作。
Q2: 特效检测频率如何选取?
A2:
推流本身的性能消耗比较大,包括音视频采集、编码、美颜滤镜等等,所以在玩法特效的算法检测部分,我们做了两层频率控制:一是整个玩法包的开启和关闭,只有当主播或助理明确开启某个玩法时,才会做相应的算法检测;二是不同的算法也有不同的检测设置,算法内部也分检测帧和跟随帧,来尽量减少玩法检测的性能开销。
Q3: 识别、合流分别在哪个端实现的? 流用的是什么技术和协议?
A3: 识别、合流目前都是在主播推流端实现的,包括PC和APP。流就是传统的直播技术和协议,推流rtmp、拉流hls和http-flv。
Q4: 直播有延迟,合流是否会增加延时?怎么保障推流画面和用户交互之间的数据延迟?
A4:
合流不会增加直播延时,如果算法执行太慢,一帧处理不完,会导致直播帧率变低,对于用户体感就是画面变卡。这里问的用户交互我理解是C端用户的交互,一般C端用户的交互和响应都是在C端完成的,目前没有碰到C端用户交互后还需要推流端实时响应的case。如果是答题这类对流画面和内容同步度要求很高的场景,我们会通过SEI+CDN的方案来保障画面和数据的同步。
Q5: 能推荐下手势监听的开源库吗?
A5: Google Research 开源的MediaPipe
https://github.com/google/mediapipe
Q6: 识别会不会显著增加前端包的大小?
A6: 不会,前端包的大小主要是素材资源和js脚本,算法模型和识别能力是在端侧的,不会打到前端的包里。
Q7: 编辑器里的算法部分具体是用什么实现的?TFjs吗?
A7: 不是TFjs,算法的能力是MNN推理框架和PIXAI算法平台的能力,跨平台渲染计算框架RACE集成的也是这部分的能力。
Q8: 红包雨中,红包位置是不是随机的吗?如何预定义热区呢?
A8: 是随机的,推流端脚本执行后将红包绘制的位置、大小、形变等信息通过SEI关键帧传到播放端,播放端经过SEI解析后,前端还原出相应的热区,来响应用户操作事件。
Q9: 游戏部分的代码执行效率如何保证?
A9: 目前游戏部分是将RACE
c++代码通过jsbinding的方式供js调用,游戏画面由客户端进行渲染,而且RACE底层会做JS调用优化机制,因此执行效率上接近原生。但是目前提供的api较少,随着业务复杂度越来越高,游戏的开发效率倒是成了瓶颈,接下来我们在考虑通过RACE
canvas提供的WebGL协议接口,适配淘内主流H5游戏引擎,借助H5游戏完善的互动能力和引擎生态,再结合多媒体互动特有api,进行流媒体互动开发,实现一次开发,多渲染引擎运行。
作者:林晚
本文为阿里云原创内容,未经允许不得转载
媒体智能-淘宝直播流媒体互动实践 | D2 分享视频+文章的更多相关文章
- Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享 支付宝十年账单上的数字有点吓人,但它统计的项目太多,只是想看看到底单纯在淘宝上支出了多少,于是写了段脚本,统计任意时间段淘宝订单的消费情况,看 ...
- 基于电商直播SDK快速实现一个淘宝直播APP【内附源码】
现在各大互联网APP都标配电商直播带货了,没有直播带货开发经验都感觉自己跟不上技术的进步.今天快速基于Java实现一个安卓端电商直播APP,深入理解整个电商直播开发流程.我们最终实现效果如下: 按照惯 ...
- 推荐系统[八]算法实践总结V1:淘宝逛逛and阿里飞猪个性化推荐:召回算法实践总结【冷启动召回、复购召回、用户行为召回等算法实战】
0.前言:召回排序流程策略算法简介 推荐可分为以下四个流程,分别是召回.粗排.精排以及重排: 召回是源头,在某种意义上决定着整个推荐的天花板: 粗排是初筛,一般不会上复杂模型: 精排是整个推荐环节的重 ...
- 淘宝App直播宝贝数据采集
淘宝App直播宝贝数据采集 前段时间,有人问我关于淘宝app直播频道宝贝如何采集?我尝试了下可以获取的到,模拟器登录不了淘宝,这里有一个坑就是,模拟器有时候会跳到登录页面,登录不了淘宝: 一.用A ...
- 写一个类似淘宝的ios app需要用到哪些技术?
写一个类似淘宝的ios app需要用到哪些技术? 让我想起了有人私信我,说不缺钱,做个类似知乎的东西,包括加运营,需要多少钱. 扯淡结束,正好最近看了一点这方面的东西,也许对题主来说有点帮助. 手机淘 ...
- 关于手机淘宝3.25bug我的一些思考与建议
这两天被手淘ios版3.25bug刷屏了,影响还是挺大的,仅3.25日当天截止到下午5点在微博上的话题阅读量,已经突破8000万.给广大网友带来一次吃瓜盛宴.我们先简单回顾下这个bug的故事线: 我查 ...
- 让淘宝链接在微信中分享,GO
老婆开了个淘宝店,小卖家的心理大家都知道,一开始的小店总是没有光顾,吸引流量成了重中之中. 所以她到处发链接,微信里发了好多条,可是没过多久有好友微她,问她发的时什么,为什么都是打不开的.结果直接傻眼 ...
- facebook海量图片存储系统与淘宝TFS系统比较
本篇论文的原文可谓通俗易懂.行云流水.结构清晰.图文并茂……正如作者所说的——"替换Facebook的图片存储系统就像高速公路上给汽车换轮子,我们无法去追求完美的设计……我们花费了很多的注意 ...
- Java系的大网站架构-LinkedIn和淘宝
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- no.2淘宝架构背后——零售业务中台架构设计探讨及实践读后感
2017年8月12日,袋鼠云首席架构师正风在“网易博学实践日:大数据与人工智能技术大会”进行<淘宝架构演进背后——零售业务中台架构设计探讨及实践>演讲分享.传统零售行业如何选择应对新经济模 ...
随机推荐
- Android 获取设备的亮度百分比
一般的屏幕亮度都是0-255,而小米手机的高版本不一样 为了使亮度调节更加细腻, MIUI对原生亮度级别进行了扩展, 由原有的255级调整根据不同屏幕分别支持255/1023/2047/4095级.开 ...
- 一个简易的ORM框架的实现(二)
框架目标 什么是框架,框架能做到什么? 把一个方向的技术研发做封装,具备通用性,让使用框架的开发者用起来很轻松. 属性: 通用性 健壮性 稳定性 扩展性 高性能 组件化 跨平台 从零开始-搭建框架 建 ...
- 逆向通达信Level-2 续九 (无帐号打开itrend研究版)
此itrend研究版的版本比较旧. 本篇演示三图,用例进程同为0x4970. 1. itrend不支持脱机,游客登陆.没有帐号不能打开.现在以无帐号打开. 2. itrend支持高清,当打开主界面就会 ...
- 结构体、共用体与C++基础
结构体.共用体与C++基础 1.结构体 结构体是C编程中一种用户自定义的数据类型,类似于Java的JavaBean //Student 相当于类名 //student和a 可以不定义,表示结构变量,也 ...
- Djaong 运行报错:ValueError: Unable to configure handler 'default'
一.前提条件 1.Django 项目接入了 log 日志模块 二.解决方案 启动项目或者项目运行中,遇到如下报错 File "C:\Python38\lib\logging\config.p ...
- [LeetCode] 2045. 到达目的地的第二短时间
一.摘要 本文介绍了一种使用BFS求无向图中第二短的距离的算法,本文算法参考自Python3 BFS找出第二短路径.通过使用BFS求出题目中给出的路径图(无向联通图)从节点1到节点n的第二短的路径,再 ...
- [极客大挑战 2019]web部分题解(sql部分已完结,其他部分正在更新,出去吃个饭先)
[极客大挑战 2019]BabySQL 打开环境后有登录界面◕‿◕ 一眼注入,后先试试万能密码: username:admin' or '1'='1 password:1 GG,出大问题,我就会这一招 ...
- 爬虫实战:从HTTP请求获取数据解析社区
在过去的实践中,我们通常通过爬取HTML网页来解析并提取所需数据,然而这只是一种方法.另一种更为直接的方式是通过发送HTTP请求来获取数据.考虑到大多数常见服务商的数据都是通过HTTP接口封装的,因此 ...
- 记录--CSS 滚动驱动动画 scroll()
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 CSS 滚动驱动动画 scroll() animation-timeline 通过 scroll() 指定可滚动元素与滚动轴来为容器动画提 ...
- 《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南 - 第6章
本章勘误: 暂无,等待细心的你告诉我哦. 本章注解: 暂无 本章释疑: 暂无,等待你的提问 致谢: MVP 林德熙 MVP 吕毅 sPhinX 相关链接 试读记录