关于直播:微信小游戏直播在Android端的跨进程渲染推流实践

本文由微信开发团队工程师“virwu”分享。 1、引言近期,微信小游戏反对了视频号一键开播,将微信降级到最新版本,关上腾讯系小游戏(如跳一跳、欢畅斗地主等),在右上角菜单就能够看到发动直播的按钮一键成为游戏主播了(如下图所示)。 然而微信小游戏出于性能和平安等一系列思考,运行在一个独立的过程中,在该环境中不会初始化视频号直播相干的模块。这就意味着小游戏的音视频数据必须跨过程传输到主过程进行推流,给咱们实现小游戏直播带来了一系列挑战。 (本文同步公布于:http://www.52im.net/thread-35...) 2、系列文章本文是系列文章中的第5篇: 《直播零碎聊天技术(一):百万在线的美拍直播弹幕零碎的实时推送技术实际之路》《直播零碎聊天技术(二):阿里电商IM音讯平台,在群聊、直播场景下的技术实际》《直播零碎聊天技术(三):微信直播聊天室单房间1500万在线的音讯架构演进之路》《直播零碎聊天技术(四):百度直播的海量用户实时音讯零碎架构演进实际》《直播零碎聊天技术(五):微信小游戏直播在Android端的跨过程渲染推流实际》(* 本文)3、视频采集推流3.1 录屏采集?小游戏直播实质上就是把主播手机屏幕上的内容展现给观众,自然而然地咱们能够想到采纳零碎的录屏接口MediaProjection进行视频数据的采集。 这种计划有这些长处: 1)零碎接口,实现简略,兼容性和稳定性有肯定保障;2)前期能够扩大成通用的录屏直播;3)对游戏性能影响较小,经测试对帧率影响在10%以内;4)能够间接在主过程进行数据处理及推流,不必解决小游戏跨过程的问题。然而最终这个计划被否决了,次要出于以下思考: 1)须要展现零碎受权弹窗;2)须要审慎解决切出小游戏后暂停画面推流的状况,否则可能录制到主播的其余界面,有隐衷危险;3)最要害的一点:产品设计上须要在小游戏上展现一个评论挂件(如下图),便于主播查看直播评论以及进行互动,录屏直播会让观众也看到这个组件,影响观看体验的同时会裸露一些只有主播能力看到的数据。 转念一想,既然小游戏的渲染齐全是由咱们管制的,为了更好的直播体验,是否将小游戏渲染的内容跨过程传输到主过程来进行推流呢? 3.2 小游戏渲染架构为了更好地形容咱们采纳的计划,这里先简略介绍一下小游戏的渲染架构: 能够看到图中左半边示意在前台的小游戏过程,其中MagicBrush为小游戏渲染引擎,它接管来自于小游戏代码的渲染指令调用,将画面渲染到在屏的SurfaceView提供的Surface上。整个过程主过程在后盾不参加。 3.3 小游戏录屏时的状况小游戏之前反对过游戏内容的录制,和直播原理上相似,都须要获取以后小游戏的画面内容。 录屏启用时小游戏会切换到如下的模式进行渲染: 能够看到,MagicBrush的输入指标不再是在屏的SurfaceView,而是Renderer产生的一个SurfaceTexture。 这里先介绍一下Renderer的作用: Renderer是一个独立的渲染模块,示意一个独立的GL环境,它能够创立SurfaceTexture作为输出,收到SurfaceTexture的onFrameAvailable回调后通过updateTexImage办法将图像数据转换为类型是GL_TEXTURE_EXTERNAL_OES的纹理参加后续的渲染过程,并能够将渲染后果输入到另一个Surface上。 上面逐渐对图中过程进行解释: 1)MagicBrush接管来自小游戏代码的渲染指令调用,将小游戏内容渲染到第一个Renderer所创立的SurfaceTexture上; 2)随后这个Renderer做了两件事件: 2.1)将失去的小游戏画面纹理再次渲染到了在屏的Surface上;2.2)提供纹理ID给到第二个Renderer(这里两个Renderer通过共享GLContext来实现共享纹理)。3)第二个Renderer将第一个Renderer提供的纹理渲染到mp4编码器提供的输出SurfaceTexture上,最终编码器编码产生mp4录屏文件。 3.4 革新录屏计划?能够看到,录屏计划中通过一个Renderer负责将游戏内容上屏,另一个Renderer将同样的纹理渲染到编码器上的形式实现了录制游戏内容,直播其实相似,是不是只有将编码器替换为直播的推流模块就能够了呢? 的确如此,但还短少要害的一环:推流模块运行在主过程,咱们须要实现跨过程传输图像数据!如何跨过程呢? 说到跨过程:可能咱们脑海里蹦出的第一反馈就是Binder、Socket、共享内存等等传统的IPC通信办法。但认真一想,零碎提供的SurfaceView是十分非凡的一个View组件,它不通过传统的View树来参加绘制,而是间接经由零碎的SurfaceFlinger来合成到屏幕上,而SurfaceFlinger运行在零碎过程上,咱们绘制在SurfaceView所提供的Surface上的内容必然是能够跨过程进行传输的,而Surface跨过程的办法很简略——它自身就实现了Parcelable接口,这意味着咱们能够用Binder间接跨过程传输Surface对象。 于是咱们有了上面这个初步计划: 能够看到:第3步不再是渲染到mp4编码器上,而是渲染到主过程跨过程传输过去的Surface上,主过程的这个Surface是通过一个Renderer创立的SurfaceTexture包装而来的,当初小游戏过程作为生产者向这个Surface渲染画面。当一帧渲染结束后,主过程的SurfaceTexture就会收到onFrameAvailable回调告诉图像数据曾经筹备结束,随之通过updateTexImage获取到对应的纹理数据,这里因为直播推流模块只反对GL_TEXTURE_2D类型的纹理,这里主过程Renderer会将GL_TEXTURE_EXTERNAL_OES转换为GL_TEXTURE_2D纹理后给到直播推流编码器,实现推流过程。 通过一番革新:上述计划胜利地实现了将小游戏渲染在屏幕上的同时传递给主过程进行推流,但这真的是最优的计划吗? 思考一番,发现上述计划中的Renderer过多了,小游戏过程中存在两个,一个用于渲染上屏,一个用于渲染到跨过程而来的Surface上,主过程中还存在一个用于转换纹理以及调用推流模块。如果要同时反对录屏,还须要在小游戏过程再起一个Renderer用于渲染到mp4编码器,过多的Renderer意味着过多的额定渲染开销,会影响小游戏运行性能。 3.5 跨过程渲染计划纵观整个流程,其实只有主过程的Renderer是必要的,小游戏所应用的额定Render无非就是想同时满足渲染上屏和跨过程传输,让咱们大开脑洞——既然Surface自身就不受过程的束缚,那咱们罗唆把小游戏过程的在屏Surface传递到主过程进行渲染上屏吧! 最终咱们大刀阔斧地砍掉了小游戏过程的两个冗余Renderer,MagicBrush间接渲染到了跨过程传递而来的Surface上,而主过程的Renderer在负责纹理类型转换的同时也负责将纹理渲染到跨过程传递而来的小游戏过程的在屏Surface上,实现画面的渲染上屏。 最终所须要的Renderer数量从原来的3个缩小到了必要的1个,在架构更加清晰的同时晋升了性能。 后续须要同时反对录屏时,只有稍作改变,将mp4编码器的输出SurfaceTexture也跨过程传递到主过程,再新增一个Renderer渲染纹理到它下面就行了(如下图所示)。 3.6 兼容性与性能到这里,不禁有点放心,跨过程传输和渲染Surface的这套计划的兼容性会不会有问题呢? 实际上,尽管并不常见,然而官网文档外面是有阐明能够跨过程进行绘制的: SurfaceView combines a surface and a view. SurfaceView's view components are composited by SurfaceFlinger (and not the app), enabling rendering from a separate thread/process and isolation from app UI rendering. ...

June 21, 2021 · 2 min · jiezi

关于直播:直播点播窄带高清之-JND-感知编码技术

导语直播点播曾经与日常生活非亲非故,这个过程中大家最关注的是什么,是更低的播放老本?还是更高的画质?这就波及到了窄带高清技术,对于视频窄带高清技术,智能视频编码是其中最根底也是最重要的一个局部。 程玲 | 网易云信资深音视频引擎开发工程师 01 窄带高清技术概述窄带高清技术实际上是一套以人眼的主观感触最优为基准的视频编码技术,代表的是一种老本与体验最合理配置、最佳性价比的视频服务理念。窄带是指节俭不必要的比特,高清是把比特调配到更能产生价值的中央,从而实现在同样带宽条件下播种更加清晰优质的画质。 在疫情的影响下,直播从传统秀场渗透到各个领域,全民直播时代到来,对窄带高清技术的需要也越来越大。本文将首先介绍下业界一些比拟成熟的窄带高清计划,再分享网易云信在窄带高清技术上的摸索实际,最初再分享其关键技术点 JND 感知编码技术。 02 业界窄带高清计划简介业界曾经有比拟成熟的窄带高清技术的利用,上面将介绍一些典型的技术计划。 淘宝直播淘宝直播是采纳 HEVC 编码实现了 720p/25fps,800kbps 的压缩,且 PSNR>43db/VMAF>90。其视频窄带高清技术次要利用有三个方面: 音视频加强,采纳基于 AI 的图像增强、美颜和语音加强来进步生产品质感知解决,采纳信源信道联结自适应编码,包含 ROI 检测、依据场景分类设置不同的编码参数、智能码控等S265 编码器,S265 编码器是业界当先的 HEVC 编码器阿里窄带高清阿里的窄带高清计划是从人眼视觉模型登程,将编码器的优化指标从经典的“保真度最高”调整为“主观体验最好”。凭借独有算法,弱化人眼易漠视的区域,强化人眼关注的细节,修复人眼讨厌的内容,冲破当代视频编码器的能力下限,在节俭码率的同时,也能提供更加清晰的观看体验。 腾讯极速高清腾讯极速高清是采纳视频智能类(视频分成游戏、秀场、体育、户外、动漫、美食、影视剧等十几个大类几十个小类场景)、智能编码参数(不同场景配置不同最优编码参数)、前置解决 (锐化、软含糊、去块、降噪)等技术尽可能解决转码失真、低分辨率含糊、镜头抖动、噪声大、低码率锯齿块等转码中存在的问题,利用在斗鱼、企鹅电竞、CCTV、新英体育等。 03 NE264 窄带高清技术NE264 是网易云信自研的合乎 H.264 规范的视频编码器,目前已在 RTC、直播点播中利用。针对直播点播,NE264 指标是在现有架构下实现更低的带宽、更高的画质,即 NE264 窄带高清。上面咱们将简略介绍下视频编码技术和依据人眼视觉个性提出的视觉感知编码技术,在此基础上提出和实现了 NE264 窄带高清技术。 视频编码视频编码都是利用数据间的冗余来进行压缩。晚期视频编码依附优化空域冗余、时域冗余、频域冗余等带来压缩效率的晋升。从 MPEG-1 倒退到 MPEG-2,码率节俭约 50%,编码效率翻倍,复杂度增长为 5% 左右。 2003年推出的 H.264 是视频压缩协定的经典,在 H.264 推出后,传统的编码方式优化效率越来越低。从 H.264(AVC) 到 H.265(HEVC),尽管编码效率晋升了 40%,但其背地复杂度却增长了 5 倍,而从 H.265 到最新的 H.266(VVC) 规范,编码效率不到 40%,但复杂度减少了 10 倍以上。 随着编码标准的演进,收益越来越小。随着技术的倒退,技术冲破愈发艰难,因而迫切需要一种编码压缩的新思路。 人眼视觉零碎(HVS)随着对人眼视觉零碎(HVS)生理和心理钻研的倒退,咱们发现,其实人脑解决视觉时有十分多的信息冗余,利用人眼视觉个性能够显著的改善视觉压缩效率,这就是人眼感知压缩的原理。 人眼视觉零碎由眼球、神经系统及大脑视觉中枢三局部形成,当人眼凝视视频场景时,入射光首先由瞳孔和水晶体调节、聚焦,使风物在视网膜上成像,而后由视网膜上的神经元将光信号转化为神经信号并发送到视皮层,通过视皮层以及脑部其余区域的进一步解决后造成对视频场景的感知。 近几年来,在视觉心理学、生理学的领导下,通过对人眼的某些视觉景象的察看和钻研,人们发现了 HVS 的很多个性。目前在视觉感知编码中,个别利用到的 HVS 个性有视觉留神、视觉覆盖、视觉敏感、视觉统计学习机制等,HVS 的一些个性如下图: ...

May 26, 2021 · 1 min · jiezi

关于直播:如何解决移动直播下的耳返延迟问题

耳返是主持人或歌手在一些大型晚会现场会佩戴的一种电子设备。耳返其实是“应用耳机模式的返送”,它是包含耳机、无线接收器、无线发射器,混音器等一系列设施的总称,与之比照的是“地返”,是指装在舞台后方固定的用来返送的音响。 对于歌手而言,上演现场往往是个很大的空间,会有声音的提早或变质,当歌手在现场演唱时往往听不到本人的声音,或者听到伴奏时已产生提早,所以须要耳返把伴奏送到歌手耳边以保障他们不会唱错拍子或走音走调。 耳返存在的问题 通过后面的介绍咱们理解到,耳返的应用对延时性要求比拟高,如果延时大于 30ms,人听到的耳返声音就会有“错位”的感觉,如果大于 50ms 就会显著感觉到提早的存在。随着提早的一直增大,对于演奏者来说,岂但不能很好的通过耳返来及时调整演奏的节奏,甚至还会影响演奏的整体成果。 如上图,耳返延时也就是声音在设施上的往返提早: 音频信号进入挪动设施的输出组件,由利用处理器上运行的利用进行解决,而后从输入组件传出,这整个过程所破费的工夫就是声音的残缺往返工夫。影响耳机的往返提早次要体现在以下几方面: 1.挪动设施中应用的扬声器和麦克风因为设施类型多样及品质参差不齐,在有些设施上通常音效较差,所以会通过减少信号处理性能来改善音质。此类信号处理会引起提早。 2.对于同步输出和输入,每一侧将应用独自的缓冲区队列实现处理程序。即便两侧采纳雷同的采样率,也无奈保障这些回调的绝对程序或音频时钟的同步。利用该当缓存数据,并适当进行缓冲区同步,应用的数据缓存会引起提早。 3.在音频处理过程中因为音频采集和播放的采样率不对立或其余解决起因而进行的采样率转换,也会造成提早。 4.数据第一次在缓冲区退出队列后启动音频管道所需工夫的长短也会产生不同的提早。 挪动端对声音耳返的解决中,iOS 的体现显著优于 Android。Android 端提早的问题次要体现在: 零碎 API 在不同机型上提早体现存在多样性,有些机型甚至会达到 300ms 的提早,这样齐全不能满足耳返的性能需要。 耳返实现的形式 1.通过 Android 提供零碎 API 进行声音的采集和播放,其特点是应用简略。但因为是 Java 层的 API,无论是播放还是采集都须要将数据在 Java 层和 Native 层之间拷贝,影响性能且提早较大。不同型号设施间,因为厂商对系统层不同的批改也会导致声音提早体现差异较大,范畴大抵在 150ms-300ms 之间。 在 Android 设施上运行时,并不能确定通过任何门路的音频延迟时间,不过咱们能够通过对下列硬件性能标记,来理解硬件设施是否能为延迟时间提供保障。 2.android.hardware.audio.low_latency 批示 45ms 或更短的继续输入延迟时间。 3.android.hardware.audio.pro 批示 20ms 或更短的继续往返延迟时间。 能够通过如下代码检测: 为了最大限度的缩短延迟时间,咱们须要获取与设施最佳匹配的采样率和缓冲数据大小。 以下代码能够从 AudioManager 获得最佳采样率: 以下代码能够从 AudioManager 获取采纳与获得最佳采样率类似的形式获得最佳缓冲区大小。PROPERTY_OUTPUT_FRAMES_PER_BUFFER 属性示意 HAL(硬件形象层)缓冲区能够包容的音频帧数。如果应用正确数量的音频帧,会定期呈现回调,而这将缩小抖动。在不同的设施及不同的 Android build 中,HAL 缓冲区大小有所不同。 以上确定好设施的音频采集播放的最佳参数后,咱们就能够实现音频的采集和播放性能了。在 Android 零碎 API 中能够通过创立 AudioRecorder 和 AudioTrack 类实例来实现设施端的音频采集和音频播放。 ...

March 5, 2021 · 1 min · jiezi

关于直播:直播电商卖货系统如何买到正规安全的源码呢

直播卖货从这两年开始呈现爆发式的高速增长,该发展趋势带动大多数的商家进入直播电商卖货行业,极有可能会成为将来十年最大的电商商业模式,传统的电商转型到通过直播电商卖货须要借用直播电商零碎源码搭建开发的直播电商零碎,然而市面上这么多直播电商零碎源码,如何买到正规平安的源码呢?正规合同现如今随着软件开发相干法律日渐欠缺,软件相干购买或开发相干合同的法律效力一劳永逸,当然大家的维权意识也在不断加强,所以签订正规合同是十分有必要的,既能保障本人的权利也能防止遇到不良软件开发商。欠缺售后除了有正规的合同保障本人以外,还有抉择一家有欠缺售后服务零碎的软件开发商,这样能力保障您购买的直播电商源码在经营期间无后顾之忧。 能够说只有价格适合满足以上两点,所要前面直播电商零碎源码的公司根本遇坑的几率很小了,如果在价格上不晓得多少适合,我这边举荐一家有直播电商源码公司给你,价格我感觉也绝对比拟正当,你能够跟它们家的源码进行比照一下价格,公司名称是“东莞市梦幻网络科技有限公司”网址:www.menghuan68.com,如果还有什么不懂的,欢送大家留言,我会一一给大家解答我晓得的。

February 21, 2021 · 1 min · jiezi

关于直播:音视频传输协议众多-5G时代不同业务应该如何选择

摘要:音视频传输协定泛滥, 不同业务应该如何抉择? RTSP、RTMP、RTP/RTC、HLS、MSS、DASH、WEBRTC、RIST、SRT;在此咱们就从业务倒退的视角来了解各种流媒体协定,帮忙大家有更加清晰的了解,抉择时做出更感性的判断。音视频传输协定泛滥, 不同业务应该如何抉择? RTSP、RTMP、RTP/RTC、HLS、MSS、DASH、WEBRTC、RIST、SRT;在此咱们就从业务倒退的视角来了解各种流媒体协定,帮忙大家有更加清晰的了解,抉择时做出更感性的判断。 IPTVIPTV 是由运营商主导建设的一套零碎,他的次要对标对象是传统广电的数字电视。所以这套零碎首要解决的是大规模直播的问题,在此基础上还须要反对点播、时移、回看等新业务。运营商的劣势就是能够自建一套可治理的网络,所以直播就基于组播技术进行大规模散发。次要技术栈是RTP+TS over multicast,这个技术大大降低了直播峰值对流媒体服务器的压力。而点播、时移、回看业务因为必须应用单播传输,所以过后抉择的技术栈是应用RTSP 进行流媒体管制,应用RTP+TS over UDP(大量基于TCP)进行数据传输。 当初这套零碎服务了全国靠近1.7 亿多用户。这套技术栈面临的挑战和对应的解决方案次要包含几点:解决单播基于UDP 传输丢包的问题,丢包会导致用户观看花屏或爆音,咱们基于RTSP 协定扩大制订了一套标准,基于RTSP 的GET_PARAMETER扩大了重传数据报文的信令,次要是基于NACK 原理进行设计,告诉流媒体服务器哪个报文没有接管到,流媒体服务器依据申请中携带的RTP 序号进行重发。 解决组播传输丢包问题,组播报文丢包会导致直播花屏或爆音,咱们采纳了2 个伎俩解决这个问题: FECARQ通过FEC 技术减少等步长的冗余报文,能够解决随机丢包问题,然而无奈解决突发间断丢包问题,这个时候就须要ARQ 技术,咱们在零碎中减少一个RETServer,RET Server 也会退出组播组接管和机顶盒收到的雷同的组播报文,机顶盒在检测到丢包后,会向这台服务器发动NACK 报文,RET Server 收到申请后依据申请的RTP 须要将对应的报文发送给机顶盒。 解决组播传输下频道疾速启动问题,终端退出组播组的工夫是随机的,无奈保障每次退出组播组后接管到的报文就能够了解用于解码并显示,所以咱们通过在零碎中减少一个FCC Server,解决该问题,终端在起播观看一个频道的时候,优先向FCC Server 申请一条单播流,FCC Server 会以1.X 倍的速率将I 帧和解码所需的报文发给终端,配合终端快显技术能够实现300ms 以内的频道切换速度。 IPTV多屏随着挪动终端的倒退,运营商心愿在IPTV 业务根底上,倒退手机等多屏业务,开始反对HLS(支流)、MPEG DASH(局部海内运营商,反对MultiDRM)流媒体协定。这套零碎在流媒体协定层面临的问题是不同屏幕,不同DRM 格局,多种格局带来了存储空间成倍的回升,特地是NPVR 集体录制业务,对存储的需要十分大。次要解决思路就是JITP(Just In Time Package),即只有存储一份内容,依据用户观看的内容格局进行实时格局转换。 OTT点播随同着以Youtube,Netflix,爱奇艺,优酷,腾讯视频为代表的OTT 视频点播平台的崛起,以及苹果手机的遍及和HLS 协定的呈现,流媒体协定从HTTP渐进式下载倒退到ABR Streaming,HLS 是其中最为支流的一种ABR 协定,HLS 也成为了各个OTT视频平台的首选视频传输协定。这套零碎在流媒体协定层面临的问题和解决方案如下:1、 解决基于互联网的大规模散发问题。CDN 技术能够很好的解决这个问题,这也是OTT 流媒体协定基本上在设计之初就思考对CDN 敌对的起因。2、 Netflix 因为业务量的规模倒退到肯定规模,从最开始抉择第三方CDN,走向了自建CDN(Open Connect)的路线,然而他的技术栈仍旧是HLS 和DASH 这类对CDN 敌对的流媒体协定。 OTT 直播细分为事件类(新闻/ 赛事/ 演唱会)直播、集体(游戏/ 网红/ 秀场)直播。满足这类直播业务的流媒体协定层面临的问题和解决方案如下: ...

January 29, 2021 · 1 min · jiezi

关于直播:如何通过即构小程序组件实现直播带货功能

之前,咱们曾经介绍了即构小程序直播组件的性能、实用类目以及组件的集成办法,能够戳上面查看: 即构小程序组件性能及实用类目 即构小程序组件的集成指引 小程序直播性能可利用的场景十分宽泛,例如秀场直播、在线直播课、电商直播卖货等。针对不同的场景需要,即构小程序直播组件提供了个性化的性能,例如针对电商直播场景,提供了音视频直播、商家后盾治理、IM互动、商品列表推送、美颜、后盾治理等性能。 上面咱们来看,基于即构直播小程序组件,如何从零实现目前大热的电商直播性能。 一、初始化SDK 集成 SDK 后,若想应用 SDK 的性能,还须要对 SDK 进行初始化操作。 // 申明变量let { ZegoExpressEngine } = require("../lib/ZegoExpressMiniProgram-1.6.0");let zg;// 初始化实例zg = new ZegoExpressEngine(this.data.appID, this.data.server);// 配置必要参数zg.setLogConfig({ logLevel: 'debug', remoteLogLevel: 'debug', logURL: this.data.logUrl}) 如果要实现一个残缺的直播性能,还须要解决 SDK 的相干回调。回调只有在 SDK 生命周期内设置一次即可。 二、登录房间 1、设置房间相干回调 登录房间之前须要设置房间相干回调,便于登录房间胜利后接管房间相干的事件告诉,比方解决因网络中断退出房间等问题。 以房间状态回调为例: zg.on('roomStateUpdate', (roomID, updateType, err) => { console.log('>>>[liveroom-room] roomStateUpdate, updateType: ' + updateType + ', err: ' , err);}) 房间状态 updateType 分为 'DISCONNECTED','CONNECTING' 和 'CONNECTED'。 DISCONNECTED:示意未连贯状态,在登录房间前和退出房间后进入该状态。如果登录房间的过程呈现稳态异样,例如 AppID 和 AppSign 不正确,或者有雷同用户名在其余中央登录导致本端被 KickOut,都会进入该状态。 ...

January 16, 2021 · 3 min · jiezi

关于直播:即构小程序直播组件集成教程

即构直播助手是微信官网认证的微信小程序插件,可为开发者提供便捷、弱小的微信小程序音视频直播服务,让你疾速实现小程序直播、多人连麦互动等性能。上面一起来看看,如何疾速接入即构小程序直播插件。 一、筹备环境 请确保开发环境满足以下技术要求: 已装置微信开发者工具应用微信小程序根底库 2.3.0 及以上版本(否则不反对音视频播放、录制组件)二、集成SDK 集成即构小程序SDK有两种办法,大家能够任选一种: 办法一:从即构官网下载 1.点击这里下载SDK 2.将下载下来的文件包解压缩后拷贝到小程序我的项目所在文件夹下。 3.应用 require 将 SDK 集成到我的项目中即可: <script src="ZegoExpressWebRTC-x.x.x.js"></script> 留神:require需填写我的项目中 SDK 的理论文件门路。 办法二:应用npm获取 SDK 1.在终端运行装置命令 npm i miniprogram-zego 2.在开发者工具菜单栏中抉择“工具 > 构建 npm”,并勾选“应用 npm 模块”选项。 3.在我的项目中增加如下代码: let { ZegoExpressEngine } = require("zego-express-engine-miniprogram"); // 以npm的形式援用 三、集成小程序直播插件 1.申请插件 登录微信小程序后盾,在“设置>根本设置”中,确定小程序主体/类目为可接入直播性能的类目。 对于哪些类目可应用即构直播插件,请戳这里理解~ 2.增加插件 在小程序管理后盾的“设置-第三方设置”中抉择“增加插件”,在弹出的面板中搜寻“即构直播助手”,选中插件并增加,期待后盾审核。 插件名称:即构直播助手。 插件 AppID:wx2b8909dae7727f25。 插件最低版本限度:1.0.4。 3.在小程序中引入插件代码 插件申请审核通过后,应用插件前要在小程序工程的 app.json 中申明须要应用的插件,例如: { "plugins": { "zego-e-commerce": { "version": "1.0.4", "provider": "wx2b8909dae7727f25"}}} 4.应用小程序插件中的推拉流组件 1)在 page 或 component 的 .json 文件中定义须要引入的 zego-pusher 组件,应用 plugin:// 协定 ...

January 15, 2021 · 1 min · jiezi

关于直播:即构微信小程序直播组件是什么有哪些功能哪些小程序类目可以使用

即构直播助手是微信官网认证的微信小程序插件,为开发者提供便捷、弱小的微信小程序音视频直播服务。 即构直播助手除了蕴含微信小程序下的音视频推拉流能力,还反对iOS、Android、Windows、Web、H5等多平台互通,加上相干的组件,可助力开发者疾速构建具备音视频直播能力的小程序。 即构直播助手是一个“社交 > 直播” [](https://developers.weixin.qq.... 类目下的小程序插件,仅限注册主体为国内电商平台、教育类目标小程序应用。1.04版本的插件大小为156KB。 即构直播助手具备弱小的性能,能帮忙电商直播、秀场直播、在线课堂等企业实现在小程序直播的需要。 推流:可实现音视频推流性能,反对RTMP格局; 拉流:可实现音视频拉流性能; 连麦:反对切换为RTC模式,实现低提早的音视频通话、直播连麦性能; 多种分辨率切换:反对反对标清(SD)、高清(HD)以及超清(FHD)多种分辨率; 美颜:反对直播美颜、美白性能,可通过参数自定义设置美颜成果; 混响:反对KTV、大会堂、金属声、磁性等多种混响成果; 背景音:反对播放背景音,在秀场直播等场景下减少直播趣味性 有过微信小程序开发教训的都晓得,在申请企业小程序平台时有主体和类目要求,不同的类目下,所需的申请资质以及所能调用的平台组件都不雷同。在微信小程序中要实现音视频性能,例如直播、连麦、视频会议等,须要应用到微信官网平台的 live-player 组件和 live-pusher 组件。要调用live-pusher 和 live-player ,须要合乎以下类目能力应用。 但随着各行各业对直播的需要增大,有一些不是以上类目标行业和企业也急需在小程序上实现直播性能,例如:电商平台;往年直播带货有多火不必再多说了;另外还有一些行业自身就涵盖了多个利用场景,例如:教育;官网类目下,仅有“教育-在线视频教程”这一个类目能够开明直播性能。 因而,即构微信小程序直播组件“即构直播助手”除了反对官网的直播应用类目外,还额定反对以下类目: PS注意事项: 微信小程序的主体必须为非集体主体类型,否则无奈应用直播性能。本文仅提供参考,具体的微信小程序类目及申请资质要求需以微信最新的 微信非集体主体小程序凋谢的服务类目为准。

January 14, 2021 · 1 min · jiezi

关于直播:即构推出低延迟直播产品L3可将直播延迟降到1s

近日,寰球云通信服务提供商ZEGO即构科技推出低提早直播产品Low-Latency Live,简称L3。这款产品对传统CDN直播中“提早较大、弱网抗性差、观众端内容不同步”等问题进行了无效优化,将无效晋升“在线教育、电商直播、体育直播、秀场直播”场景中的提早高、弱网抗性差和内容不同步等问题。 L3具备与云商 CDN 雷同的高并发能力,但相比规范的 CDN直播产品,提早更低、同步性更强、弱网抗性更好,依附直播起家的即构科技,此次将直播提早低于1s,给用户带来了真正实时的直播体验。 “直播+”破圈减速进行,但痛点日渐突出2020年8月,人民网舆情数据中心公布了《 互联网平台“直播+”赋能钻研报告 》,《报告》深度剖析了当下直播新生态,如电商直播、在线教育、在线医疗、云游览和文化传承等利用现状。 现在的“直播”曾经不再是线上娱乐内容的生产工具,而是与商业场景越来越严密地联合,逐步演变为根底的业务工具。作为将来社会的新型基础设施,“直播+”将在全面推动社会经济、政治、文化倒退等方面大有可为。 但在有些场景,“直播+”还面临着很多痛点,传统 CDN 直播存在“观众提早大、弱网抗性差、观众端内容不同步”等弊病,间接影响用户体验。 而在其中,直播提早大的问题尤为突出,观众从收回评论,到看到主播给出反馈,个别要在5-10秒以上。而在有些场景,如果做不到实时同步,将很影响产品/平台的转化能力。 在线教育场景,学生提出一个问题,老师听到的时候可能曾经是下一个知识点了。电商直播场景,观众还没听到主播发红包,红包曾经收回来了。体育直播,隔壁寝室都在呐喊进球了,你看到的还是一个妙传,观看内容不同步。秀场直播,观众打赏/弹幕互动后,迟迟听不到主播的口播感激/弹幕响应。低提早直播产品L3:可将直播提早降到1s,让直播转化能力更强基于以上痛点,即构ZEGO推出了低提早直播产品L3。 在升高提早方面,即构L3产品负责人许键树介绍:“基于自研的 AVERTP媒体协定,L3只有1s提早,相比传统CDN直播计划5-10s的提早,最高升高 90% 以上。”提早问题解决了,直播场景的内容同步就不是问题。 针对弱网抗性,L3是基于即构的自研媒体协定,相比传统CDN直播弱网抗性更好。市面上实现低提早直播的计划大多应用WebRTC 技术,尽管是开源且残缺的协定,但存在一些局限性,WebRTC 协定最大反对30%丢包,弱网抗性能力比拟个别。 而即构团队是基于自研媒体协定 AVERTP ,在 ABC(码率自适应)的根底上,联合蕴含 FEC(前向纠错)、ARQ(丢包重传)和 PLC(谬误暗藏)的智能 QoS 信道策略,充分利用链路带宽,保障音视频传输的低提早、弱网抗性和多端的同步性。 即构团队耗时3个多月打造了这样一款低提早产品,利用即构自研协定灵便凋谢的劣势,让直播提早更低、内容同步性更强、互动更加高效无阻。 另外许键树还提到,L3的扩展性还很强。它不仅提供了“低提早的媒体服务”,也提供“房间及用户信息管理服务”, 也就是说,用户能够在连麦的同时进行低提早直播。而在此前,客户可能须要在两者之间2选1。L3的强扩展性给了开发者定制更多精品业务的可能,反对客户随时进行用户体验降级” L3不仅提早低、接入更简略,且更加灵便L3接入极其简略,客户只需一个SDK,即可领有全场景音视频能力,仅需调用 1 个 API ,就能够实现从“实时音视频”到“低提早直播”的切换,简略易用。 L3的灵活性体现在,其开发是基于 ZEGO 的实时音视频 SDK ,这使得L3能与实时音视频产品无缝互通,全面的 SDK 接口和齐全的配套插件/服务,同样适配。 L3充沛实用于在线教育、电商直播、一起看、在线竞拍等场景,让互动即刻达到L3实用于对“低提早、内容同时同步、强弱网抗性”要求比拟高的场景,比方在线教育的大班课、超级小班;泛娱乐畛域的“一起看”场景,一起看电影/上演/竞技较量等。同时,也实用于视频平台的“一起看”场景,因为只有每个人看到的片段是统一的,咱们才能够对一部电影发表点评。 在线教育场景中,大班课对低提早的要求很高。老师在讲课的时候,学生要发问,然而如果过了4-5s老师才听到,这时候老师都讲到下一个知识点了。即构低提早直播产品L3反对课堂的随问随答,让互动白板、文件共享等与音视频实时同步。除此之外,超低的提早还能够让在线课堂变换更多玩法,比方近期炽热的实时互动的在线自习室,低提早直播产品L3能够反对无缝切换直播和连麦,学生与老师实时互动。 电商直播、在线拍卖场景对“实时性、同步性”的要求更高。此前,为了放弃口播声音和红包同步,主播在口播之后须要期待大略3s才能够发红包。而在竞拍时刻,多一秒的提早用户都可能错过可爱之物。L3能够让主播与用户端更加同步,让用户少有“错过”体验,主播口播之后就能够收回红包,看到用户征询就能够即刻回复,无效缩小用户散失,帮忙晋升商家流动的转化率。 而在“一起看竞技/上演/电影”的场景,低提早直播产品L3能够让用户立即命中情绪热点,即刻表白观看体验。 ZEGO即构粗浅洞察客户需要,用极致服务晋升用户体验始终以来,即构科技都在贴近客户需要做产品和服务。2018年,即构为刚起步的叮咚课堂贴身定制了行业首套AI课堂解决方案,提前一年让叮咚的业务上线起量。疫情期间,即构的极致技术服务让叮咚的互动课堂失去稳固保障,叮咚抓住行业时机,业务取得飞速发展。 而这次的低提早直播产品L3,也是ZEGO即构在粗浅洞察客户需要的根底之上、为了针对性解决传统CDN的直播痛点而推出的。现在,守业5年的即构迈向“技术+服务”的2.0阶段,深刻理解和服务客户需要成为即构人每天都在钻研的议题。 将来,随着“直播+”日渐成为古代生存的常态,每个人身边正在产生的故事、每一份实时常识的传递、每一个场景的实时再现,都可能有直播在背地提供反对,因而更加高效的直播显得至关重要。许键树对此示意:“影响直播转化成果的往往有可能是那几秒的提早,和那转瞬即逝的卡顿。咱们不心愿这些产生,咱们心愿能够为将来更多场景、更多场高效直播提供相对靠谱的产品,和相对粗疏的服务”

January 12, 2021 · 1 min · jiezi

关于直播:即构推出低延迟直播产品L3功能全面全球高可用

以短视频、直播为代表的音视频互动,正成为互联网支流的交互方式。拿直播举例,它从一种娱乐模式,逐步交融于教育、娱乐、电商、游览等多种生态中。将来,直播还将成为像水、电一样的基础设施。 然而,仅仅可进行音视频互动是不够的,直播还须要与行业、场景、用户需要联合,实现体验更好、老本更低、扩展性更强的底层能力。而在这些能力中,低提早是影响用户体验至关重要的一项。 一、即构推出低提早直播产品Low-Latency Live 在大规模直播场景中,例如在线大班课、电商直播、秀场直播等,大部分是采纳传统的CDN直播技术。CDN直播采纳的是基于 TCP 的 RTMP/HTTP-FLV/HLS 等流媒体协定,自身就会引入「秒级」的零碎时延。在这些场景中,观众从评论完到看到主播给出反馈,个别在5-10秒左右,能显著感触到提早和不同步。 同时,传统 CDN 直播还存在弱网抗性差、观众端内容不同步等弊病,影响了用户的直播体验。 随着大规模直播在越来越多行业的利用,为了让用户取得更优质的直播互动体验,即构科技推出了低提早直播产品 Low-Latency Live,简称L3。 L3产品具备等同云厂商 CDN 直播的高并发能力,反对千万级并发拉流;同时相比 CDN 直播,能给用户带来「毫秒级」的直播体验;具备提早更低、同步性更优、弱网抗性更好的劣势。 即构低提早直播产品L3,是基于 ZEGO 实时音视频 SDK 开发,可能与RTC 产品及 CDN 直播产品无缝互通,用户只需集成一个 SDK ,即可领有全场景的音视频能力。 二、全链路降级,实现低提早互动寰球高可用 传统的CDN直播,受限于流媒体传输协定及散发架构,会引入3s以上的零碎延时。局部厂商的低提早直播计划,采纳的是 WebRTC 技术,尽管具备残缺的协定,然而在弱网抗性及音视频性能上存在局限性,比方编码格局的适配。 即构低提早直播产品L3,采纳的是自研的媒体协定 AVERTP,能大幅升高零碎提早,并进步流媒体传输的弱网抗性。同时基于即构自学习海量有序数据网络MSDN,可实现服务的寰球笼罩和高可用。 1.自研媒体协定AVERTP 即构自研媒体协定 AVERTP ,可将零碎提早降至1s以下。反对 H264,VP8、HEVC 等多种编码格局,开发者无需针对不同编码格局再做非凡优化适配。在码率自适ABC的根底上,联合蕴含前向纠错FEC、丢包重传ARQ和谬误暗藏PLC在内的智能 QoS 信道策略,充分利用链路带宽,保障音视频传输的低提早、弱网抗性和多端的同步性。 2.自学习海量有序数据网络MSDN MSDN 是即构基于音视频服务的个性,联合 SDN 架构,将不同供应商的 IDC、⽹络线路等资源整合成一张“虚构网络”。具备以下特点: 中立弹性:能够整合任意云厂商/运营商的节点、专线网络等资源,实现最佳的笼罩,防止单云商故障影响整体服务;最优门路:实时探测全网各链路的状况,抉择最优传输门路,尽可能防止网络提早和丢包;业务辨认:依据业务个性进行传输层协定的针对性优化,针对媒体大流量的个性进步重传效率,升高传输时延;灵便牢靠:具备精细化的路由管制,可基于特定区域/特定业务调整流量的传输门路,应答简单的业务场景和网络情况。基于自研媒体协定和MSDN,即构低提早直播产品L3进行了全链路降级,不仅解决了直播提早高,互动体验差的问题;还保障了在高并发、简单网络等状况下,服务的高可用。 三、即构低提早直播产品L3的劣势 除了低提早互动和寰球高可用外,即构低提早直播产品L3还具备集成简略、扩展性强、配套功能强大等劣势,让客户能够低门槛接入、多场景利用。 1.集成简略 L3是基于 ZEGO 实时音视频 SDK 开发的,开发者无需从新接入额定的 SDK(反对 LiveRoom SDK 和 Express SDK)就能领有低提早直播产品的能力,仅需调用 1 个 API 就能够实现实时音视频和低提早直播的切换,简略易用。 ...

December 30, 2020 · 1 min · jiezi

关于直播:酷瓜云课堂腾讯云版v122-发布

通过两周的迭代开发,初步实现酷瓜云课堂的 v1.2.2 版本。 减少登录账户微信揭示购买胜利微信揭示退款胜利微信揭示开始直播微信揭示征询回复微信揭示征询回复短信揭示修复创立章节,关联表数据没有生成创立群组,没有生成max_im_group_id缓存课程分类列表没有过滤掉帮忙分类的内容创立角色字段routes MySQL text 类型报错低品质视频无奈播放后盾脱漏的权限我的项目介绍酷瓜云课堂,依靠腾讯云根底服务架构,采纳C扩大框架Phalcon开发,GPL-2.0开源协定,致力开源网课零碎,开源网校零碎,开源在线教育零碎。 零碎性能实现了点播、直播、专栏、会员、微聊等 托管仓库gitee仓库github仓库在线体验情谊提醒: 系统配置低(1核 1G 1M 跑多个容器),切莫压测课程数据来源于网络(无本质内容),切莫购买治理后盾已禁止数据提交,私密配置已过滤演示帐号:13507083515 / 123456 (前后台通用) 桌面端演示: 前台演示后盾演示挪动端演示领取流程演示: MySQL晋升课程全面解说MySQL架构设计(0.01元)Nginx入门到实际Nginx中间件(0.01元)数据库与中间件的根底必修课(0.02元)Tips: 测试领取流程请用手机号注册一个新账户,这样能力接管到订单告诉,以及防止课程无奈购买 我的项目组件后盾框架:phalcon 3.4.5前端框架:layui 2.5.6, layim 3.9.5(已受权)全文检索:xunsearch 1.4.9即时通讯:workerman 3.5.22根底依赖:php7.3, mysql5.7, redis5.0装置指南运行环境搭建零碎服务配置开发计划桌面端:进行中挪动端:进行中小程序:待启动意见反馈在线反馈(举荐)通过这个我的项目能学到什么?我的项目布局,phalcon,缓存,JWT,即时通讯,全文检索docker,supervisor,devopsgit,linux,php,mysql,redis,nginx代码有加密吗?所有代码都公开(受权代码除外,例如layim),没有所谓的商业版和付费插件。 开源助力毫无保留的真开源不容易,如果对你有帮忙,请给咱们 STAR !!!

December 23, 2020 · 1 min · jiezi

关于直播:h5直播拉流页面调研

挪动端:https://cloud.tencent.com/developer/ask/24304 pc端:hls.js 反对m3u8 视频编码格局视频文件格式(容器格局)视频编解码器(视频编码格局)视频一开始由两个端采集,视频输出口、音频输出口。采集的数据会别离进行相干解决,简而言之就是:将视频/音频流通过肯定的伎俩转换为比特流并且压缩,最终,这里将比特流以肯定程序放到一个盒子里进行寄存,从而宣称咱们最终所看到的音视频格局。如:mp3/mp4/flv罕用直播协定协定原理传输协定播放器延时兼容RTMP每个时刻的数据收到后立刻转发TCPflash1-3s须要flash播放器,借助video.js 实现浏览器端播放(pc端)HLSHTTP Live Streaming ,汇合一段时间的数据m3u8,生成ts切片文件,播放完一个列表,在更新下一个列表HTTPvideo10-30s苹果公司实现 IOS 和 高版本 Android均反对, h5能够间接播放HTTP-FLVFLV 是专门针对 Flash 播放器的HTTP 1-3sh5反对(须要反对MSE的浏览器)mse兼容状况RTMP 全称 Real Time Messageing Protocol 即时消息传送协定Adobe 公司为flash播放器和服务器之间音视频传输开发的公有协定,工作在TCP之上的明文协定长处: RTMP是转为流媒体开发的协定,对底层优化比其余协定更加优良,同时他Adobe flash反对好,基本上所有的编码器(摄像头之类)都反对RTMP输入 RTMP由TCP长连贯协定,所以客户端向服务端推流这些操作而言,延时性很低。 pc 次要是 windows ,windows的浏览器根本都反对flash,另外 RTMP适宜长时间播放,最初RTMP的提早绝对较低,个别延时1-3s毛病: 基于TCP传输,非公共端口,可能会被防火墙拦挡 另一方面,RTMP为 Adobe公有协定,很多设施无奈播放,特地是在 ios 端,须要第三方解码器能力播放 无奈在ios的H5页面播放,但ios原生利用能够本人写解码去解析FLV (Flash Video) 是Adobe的另一种视频格式,是一种在网络上的流媒体数据存储容器格局长处: 格局绝对简略轻量,不须要很大媒体头部信息 flv 由 The FLV Header,The Flv Body以及其Tag组成。因而加载速度很快。采纳FLV格局封装的文件后缀为 .flv 咱们所说的HTTP-FLV即流媒体数据封装成FLV格局,而后通过HTTP协定传输给客户端 HTTP-FLV 依附MIME的个性,依据协定中的Content-Type来抉择相应的程序去解决相应的内容,使得流媒体能够通过HTTP传输 相较于 RTMP协定,HTTP-FLV 可能好的穿透防火墙,它是基于HTTP/80传输  flv.js 愿景:从flash视频时代残缺的适度到h5时代 原理:用js解析FLV格局的音视频数据,再通过 Media Source Extensions API 喂给原生HTML5标签(H5原生仅反对播放mp4、webm、ogg等,不反对flv) 兼容状况 [https://www.jianshu.com/p/c102ae2a319d](https://www.jianshu.com/p/c102ae2a319d) 参考:用flv.js做直播 [https://github.com/gwuhaolin/blog/issues/3](https://github.com/gwuhaolin/blog/issues/3) 原理:[https://www.zhihu.com/question/51997376](https://www.zhihu.com/question/51997376) Media Source Extensions 在没有MSE呈现之前,前端对 video 的操作,仅仅局限在对视频文件的操作,而并不能对视频流做任何相干操作 当初MSE提供一些列接口,是开发者能够间接提供 media stream 应用flv.js 疾速搭建html5网页直播:[https://zhuanlan.zhihu.com/p/94440420](https://zhuanlan.zhihu.com/p/94440420)HLS   它不是一下申请残缺流,由.m3u8文件和 .ts播放文件组成,服务器会将承受到的视频流进行缓存, 而后缓存到肯定水平后,会将这些视频流编码格式化同时会生成一份 .m3u8 文件和其余很多的.ts文件 客户端只有不停地按序播放从服务器获取到的文件,从而实现播放音视频 .m3u8 文件只是寄存了一些ts文件的配置信息和相干门路,当视频播放时 .m3u8 是动静扭转的,video 标签会解析这个文件 并找到对应的ts文件来播放,个别为了加快速度 .m3u8 放在web服务器上,ts放在cdn上m3u8 文件信息#EXTM3U # m3u文件头#EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:2133 # 第一个TS分片的序列号#EXT-X-TARGETDURATION:6 # 每个分片TS的最大时长#EXTINF:6.375, # 指定每个媒体段(ts)的持续时间,仅对前面的 URI 无效huputv-ali-live.arenacdn.com_SFlDeHJTSU51NTdV_pbk550-1587696415663.ts?auth_key=1587706605-0-0-10fedd520ec472c1a5dc39d0dcf2984f#EXTINF:6.375,huputv-ali-live.arenacdn.com_SFlDeHJTSU51NTdV_pbk550-1587696421958.ts?auth_key=1587706605-0-0-c8d8918ccba170a99f518b55aa2ea290#EXTINF:6.375,huputv-ali-live.arenacdn.com_SFlDeHJTSU51NTdV_pbk550-1587696428405.ts?auth_key=1587706605-0-0-f00ab35ac2c77091ac1e7ef693cde112#EXTINF:6.375,huputv-ali-live.arenacdn.com_SFlDeHJTSU51NTdV_pbk550-1587696434822.ts?auth_key=1587706605-0-0-08051ceb940b5d0a52292ab9c6e510dd#EXTINF:6.375,huputv-ali-live.arenacdn.com_SFlDeHJTSU51NTdV_pbk550-1587696441198.ts?auth_key=1587706605-0-0-fba4c6b281980017fa08a6139fc74a9d#EXTINF:6.375,huputv-ali-live.arenacdn.com_SFlDeHJTSU51NTdV_pbk550-1587696447480.ts?auth_key=1587706605-0-0-c3b335be3abe37b37af3339875610851  HLS协定的申请流程HTTP申请 m3u8的url(video 标签)服务端返回一个 m3u8的播放列表,这个播放列表(TS)是实时更新的客户端解析m3u8 的播放列表,再按序申请每一段url获取ts流编码:以H.264格局对图像进行编码,以mp3或者HE-AAC对声音进行编码,最终打包到MPEG-2 TS(Transport Stream)容器之中宰割:把编码好的TS文件等长切分成后缀为ts的小文件,并生成 .m3u8 的纯文本索引使用方便:客户端应用一个URL区下载m3u8文件(索引文件确保ts文件程序),而后开始下载ts文件,下载实现后即开始应用播放器播放长处:苹果公司开发的协定,ios全系列产品原生反对,不须要任何插件,Android 也反对穿透防火墙,基于HTTP/80传输,无效防止防火墙拦挡性能高。通过 HTTP传输,CDN反对良好,且自带码率自适应(Apple 在提出HLS时,就曾经思考了码率自适应问题)毛病:实时性差,提早高,HLS的提早根本在10s+以上1. TCP握手2. m3u8 文件下载3. m3u8 下的ts文件下载,每个ts文件大略寄存5-10s的时长,并且每个 m3u8 文件会寄存 3-8个ts文件如果把ts文件时长足够小,m3u8寄存文件足够少,则实践提早会升高,但会减少服务器压力同时直播会受网络稳定影响较大文件碎片,个性的双刃剑,ts切片较小,会造成海量文件,对存储和缓存都有肯定的挑战使用方便:<video controls autoplay> <source src="http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8" type="application/vnd.apple.mpegurl" /> <p class="warning">Your browser does not support HTML5 video.</p> </video>市面支流h5直播平台 ...

November 6, 2020 · 2 min · jiezi

关于直播:网红女主播直播带货奢侈品假货被抓涉案金额6000万

直播带货最近也摊上事了,最近一27岁网红女主播直播卖奢侈品假货,被警方抓获,涉案金额超6000万。 理解到,因为直播带货卖假货被抓的这个网红主播,算是国内首个直播带货被抓的主播。据悉该主播没抓之前,大略有百万粉丝群体,每天直播10个小时以上,日支出可达3-4万元,直播间观看人数简直都在在20万以上,每场直播销售额简直都冲破7位数,也算是一个实打实的实力带货主播。 惋惜在金钱背后没顶住,被一些搞假货的商家盯上,在巨额提成和巨额“出场费”双重利益引诱下跟这帮假货制造商混在了一起,搞起了混充侈靡品牌“LV”“JUCCI”" Moncler "等之类的品牌的盗版货的直播带货,直播过程中,她们不会提及这些混充侈靡商品的品牌名称,而是用代号代替,并且卖的商品也会有着某些奢侈品的专有设计和图案标识,这个懂得根本都懂,因为发售价格是副品店内的几十甚至几百分之一,并且是真货假货掺着卖,所以买的人还是有的。 至于被抓,也是很“现代化”,貌似是因为被其余服装企业提供线索举报被公安盯上,盯梢录拍直播间两个月,最初在浙江掀了5个假货制造商,查处窝点8处,当场缉获混充侈靡品牌箱包、服饰商品3000余件,涉案金额超6000万,该网红的直播公司团队也被一锅端,实锤证据背后,全副请去喝茶,彻底凉凉。 对于这波直播带货翻车有网友示意:直播带货根本曾经成为新电商趋势,后劲有限,然而随同巨额利益的更多的是利益陷阱,不论是线上还是线下商业品牌规定都是一条红线,被盯上注定被搞,所以对于各位有从事直播带货的站长或者自媒体创业者和主播,往后直播带货选品把控可要悠着点了,而且闹了这么一出因为假货直播带货翻车之后,整个直播带货行业会不会迎来大整改怕是也不好说! 起源;卢松松博客 欢送分享

October 16, 2020 · 1 min · jiezi

关于直播:直播程序源码抢占互联网市场很有发言权

虽说这两年泛娱乐直播平台逐步走上 “下坡路”,但游戏直播的发展趋势仿佛不减反增。为什么呢?因为网游到挪动端的偏移再加上流量资费下调,所以在挪动端观看游戏直播,早已成为游戏爱好者的必备消遣形式。换句话说,直播程序源码在互联网市场中仍旧具备短缺的“发言权”。直播程序源码是软件开发的基石,没有源码就无奈进行开发。然而又有多少人是真正理解开发时须要做好哪些筹备工作或者须要留神什么的呢?接下来就给大家简略 “扫扫盲”。 1.开发过程中必须的协定有哪些? 直播中须要用到一些流媒体协定的辅助能力实现开发,流媒体协定又称流式媒体,即采纳流式传输的形式在 Internet上播放的媒体格式。用视频传送服务器把节目当成数据包收回,传送到网络上,用户通过解压设施对这些数据进行解压,节目就会像发送之前一样显示进去。 2.开发过程中须要留神什么? 直播属于高流量多用户的利用场景,常常会呈现一个直播间有百万量级的用户同时进行观看,稍不留神零碎就会解体,这里就波及到了一个问题:高并发。什么是所谓的高并发呢?高并发就是互联网 分布式系统架构设计中必须思考的因素之一,它通常指通过设计保证系统可能同时并行处理很多申请。 服务层的程度扩大,是通过 “服务连接池”实现的。 站点层通过RPC-client调用上游的服务层RPC-server时,RPC-client中的连接池会建设与上游服务多个连贯,当服务成为瓶颈的时候,只有减少服务器数量,新增服务部署,在RPC-client处建设新的上游服务连贯,就能扩大服务层性能,做到实践上的有限高并发。这也是所有技术人员都十分头疼的一点。 3.直播程序源码怎么进行视频的采集和编码? ( 1 )视频传输技术次要以 HTTP协定为主,RTMP次要用于PC端视频播放,实时性较高。hls次要面对iOS终端。 ( 2 )播放端,能够是电脑、手机上的视频播放器,还能够是 H5的video标签等。目前以手机端的播放器为主。 ( 3) 视频服务器端,视频传输和播放用的流媒体服务器,通常是用 C或者C++语言开发实现,次要实现一对多的视频流公布性能。 ( 4 )内容散发零碎,很多人都晓得,波及到大规模内容散发都须要用到 CDN技术。市场上有很多提供CDN的服务公司,他们通过为用户提供内容的大范畴散发服务来盈利。一些大的经营公司都是通过自建CDN来撑持本人的业务经营,这方面的核心技术都是很业余的。 ( 5) 视频采集个别是电脑设备上的音视频输出设施和手机上的摄像头、麦克风。 以上内容只不过是简略总结了一下开发过程中须要和理解的内容,能够说只是冰山一角。如果大家直播程序源码和直播行业感兴趣,能够翻阅我之前公布过的文章,心愿可能给大家提供一些帮忙。本文转载自网络,感激(给你一杯奶茶)的分享,转载仅为分享干货常识,如有侵权欢送分割云豹科技进行删除解决

September 21, 2020 · 1 min · jiezi

关于直播:开发直播软件必须要用直播系统源码才行

大多数人在看到直播超强的变现能力之后,纷纷筹备退出其中,但实际上开发直播软件并没有设想中那么简略。最重要的一点就是:须要先领有一套直播零碎源码。而后能力开始后续的性能开发、搭建部署等一系列的流程,最初实现 APP上架经营。 一、直播零碎源码怎么实现直播软件开发业务? 1、随着技术和设施一直倒退和更新迭代,在领有源码的状况下进行开发绝对比拟容易。目前,在iOS端开发的话提供现成的 Video ToolBox框架 ,能够对摄像头和流媒体数据结构进行解决,然而这个框架只兼容 8.0以上的版本,以下的就须要用x264的库软编了。 2、在开发直播软件时,美颜、水印、点赞、滤镜等性能都能够实现,而且像是美颜这类的性能,当初市面上也有很多家服务商提供相应的SDK,购买之后拿过去放在程序里就能够间接应用。当然,这些性能也能够由技术团队原生开发,具体抉择哪种形式还要依据用户需要而定。二、直播零碎源码怎么优化直播 ? 对于直播业务来讲,最难克服的点就是怎么进步直播软件的首屏关上和播放工夫,还有对应的服务质量如何进步,比方怎么在丢包率 20%的状况下保障直播的稳固和晦涩进行。这个时候,就须要优质的直播零碎源码来“出一份力了”。 1、为解决首屏关上和播放工夫的问题,能够被动推送GOP。(即画面组,一个GOP就是一组间断的画面至边缘节点),边缘节点缓存GOP,则播放端就可能疾速加载,从而缩小回源提早。 2、在解决直播中最常见的延时景象之前,咱们须要先剖析起因是什么。个别状况下,直播中产生的延时都是因为网络抖动或者拥塞导致流媒体数据发送不进来,所以在GOP丢帧之后须要将所有的工夫戳进行批改,要不然客户端就会卡一个GOP的工夫。对于开发直播软件来讲,直播零碎源码既是外围也是根底。它的好坏间接影响着直播的品质,搭建部署是否能顺利进行也与源码无关。很多人为了省去一部分开发费用,从网上高价购买源码,后果不是搭建不起来就是程序 bug太多,无奈稳固运行。所以说,要想退出直播行业,最应该做的就是先去找一家业余的源码服务商购买源码,而后再进行后续的工作,这样才更靠谱一些。 本文申明原创,转载请注明出处及作者。 本文转载自网络,感激(给你一杯奶茶)的分享,转载仅为分享干货常识,如有侵权欢送分割云豹科技进行删除解决

September 18, 2020 · 1 min · jiezi

关于直播:搭建直播平台难吗自己开发须谨慎

这么说吧,搭建直播平台对于不懂技术的人来说那必定是 “难于上青天”,那么对于懂技术的大神来说,可能就只是写写代码的事件。直播置信大家都看过也玩过,如果真的本人开发这么一个直播平台,那可就不是说说这么简略了。所谓“术业有专攻”,不如就把业余的事件交给业余的人,比方直播平台开发公司。 目前来看,互联网畛域曾经有很多公司开始从事搭建直播平台,但其中也不乏有一部分公司是 “冒名顶替”,所以为了帮忙大家无效抉择靠谱的公司,集体总结了几点给大家做个参考。一、直播互动体验 秉着凡事都向最好的倒退的指标,须要抉择具备优质音视频品质的公司,这样能力保障用户失去最佳音视频成果体验,最好是可能反对同时收取6路语音,反对最高1080p的视频品质,实现高质量的音视频直播。 二、满足跨平台互通 搭建直播平台时为了保障开发进去的直播平台可能实用于绝大多数的机型和零碎,须要反对Android和iOS两大支流平台开播、观看、互通,后盾web端也应该跟前端互联,实现咱们常说的三端互通。 三、齐全开源 有这样一部分公司会独立研发可能商用的直播软件源码,次要是为不同的用户提供多种抉择,并且能够随便进行二次开发,相比起纯定制搭建直播平台的公司来说要不便省钱的多。 四、内容笼罩寰球 内容散发CDN节点有很多个并且能笼罩国内和国外的次要国家,欠缺智能接入零碎并且可能为用户抉择品质最佳的通道,以便直播内容能在寰球范畴内收看。 五、保障性价比平衡 运行零碎放弃晦涩稳固、平安兼容性强。 六、单干流量散发 能够与腾讯云、阿里云等多个出名商单干,品牌单干直播方面的品质有保障。提供对立大流量订购,流量资费更加优惠并且可能联合录播实现存储、转码等一系列操作。通过以上几点,咱们不难看出:搭建直播平台的确不简略,如果想要本人尝试开发的话,不仅须要思考技术问题,还须要思考后续的开发、测试、保护等为题,所以还是审慎点好。至于抉择公司的方面,以上几点仅做参考。 本文转载自网络,感激(给你一杯奶茶)的分享,转载仅为分享干货常识,如有侵权欢送分割云豹科技进行删除解决

September 17, 2020 · 1 min · jiezi

关于直播:直播平台软件开发过程中的云存储和备份

随着科技一直地倒退和提高,云技术的利用曾经开始大面积的遍及,云技术次要是指在广域网或局域网内将硬件、软件和网络等一系列资源对立起来,实现数据的计算、贮存、共享和解决的一种托管技术。当然,开发直播 app软件过程中也会须要这一技术的帮忙,明天次要给大家分享一下直播平台软件开发中的云贮存和云备份的相干常识。 一、什么是云存储? 1、直播平台软件开发中云贮存是一种网上在线存储模式,将数据寄存在通常由第三方托管的多台虚构服务器,而非专属的服务器上。简略点讲就是用户无论应用哪种设施,都能够随时随地地拜访文件或解决工作,就像是一款云USB。 2、然而云存储并没有任何的保障或者是检测,如果服务商某一处数据中心服务器呈现故障,可能就无奈再次找回存储的文件。云存储大部分的服务都有一个可供用户上传文件的web界面,所以文件只能在服务器端进行加密,从而使得文件在上传过程中存在肯定的安全隐患。须要留神的是,只有文件和文件夹能够进行存储,应用程序的数据无奈进行云存储。 二、什么是云备份? 1、直播平台软件开发中的云备份就是把集体数据的通讯录、短信、图片等材料通过云存储的形式备份在网络下面,当 “劫难”产生时,能够复原所有的数据。云备份通常是一款本地的客户端应用程序,现实状态可能够每天运行屡次,并且能够主动在后盾进行调度。 3、应用程序收集、压缩和加密数据之后,将数据传输到服务提供商的服务器。为了缩小带宽耗费和传输文件的工夫,服务供应商往往会在初始残缺备份后提供增量备份。 三、什么是同步和共享? 1、直播平台软件开发中同步和共享也属于一种云技术的利用,尽管许多同步和共享服务器商自认为是云存储户云 BURR提供商,但实际上他们的合约条款中会特地指明不许应用同步或共享服务作为备份。 2、事实上,直播平台软件开发中的同步和共享服务都是为了取代FTP和NAS共享服务。只须要在每台须要同步共享的设施上装置客户端软件。该软件容许文件在多台受权设施、用户和客户端等实现共享,而且还能够在很短的工夫内提供版本控制。然而该技术只能保留用户手动搁置到文件中的文件正本,并不能算是一项服务来主动执行所有备份工作,并且还要提供复原和还原的帮助。同步和共享虽是一项乏味的云技术,但并不是云存储或者云BURR。 由此看来,直播平台软件开发中的云存储和备份的利用曾经开始逐步渗透到行业中去了。就连开发直播 app软件的过程中,也须要借助云技术的帮忙,从而实现数据的存储和备份。而两者之间的区别能够总结为一个是利用另一个是拜访,至于如何抉择备份和存储形式,还要看集体如何抉择了。

September 16, 2020 · 1 min · jiezi

关于直播:直播平台软件开发中关于直播技术的架构问题

在直播平台软件开发中,须要关注的点有很多。然而咱们并不能把关注点只是放在客户端如何去采集音频数据,或者是客户端的推拉流的相干内容,而是应该先理解一下直播技术的架构问题。这样一来,对于直播技术的运行流程了解起来也就更加容易了。 一.简略的音视频直播架构 1、在直播平台软件开发中这种架构绝对比较简单,能够利用已有的CDN,比方阿里、腾讯、百度等,而后再本人搭建一个服务器并实现服务层的搭建。这个时候,能够先向这一服务器(咱们能够叫做信令服务器)发送共享音视频指令,而后通过摄像头采集相干的音视频数据,编码之后通过RTMP的协定将音视频流推送到CDN 。 2、接收端向信令服务器发送指令从而获取所共享的音视频流的名称,再通过这个名称从CDN中拉取音视频流,通过解码之后渲染在屏幕上。 二.实时交互的音视频直播架构 1、在直播平台软件开发中相比起下面的直播架构,这一种直播架构相对来说比较复杂。它们之间的次要区别就是:减少了自有网络。客户端通过UDP进行数据传输,这样能够大大的缩小因为网络和CDN构造所导致的音视频提早的问题。在共享音视频的时候,都是通过UDP协定上传到各自的网络服务器上,这时候如果有其他人要参加实时互动的话,参与者也会通过UDP连贯到这个网络,从而达到实时互动的成果。 2、其中,音视频数据上传到自有的网络上之后,还须要通过专门的服务将数据流转化成为RTMP流并推向CDN,这样一来,大多数不参加实时互动的用户就能够在CDN上间接获取音视频的数据了。这一架构的长处就是:既能够满足实时互动的需要,又能够满足少量用户只看不互动的需要。 三.解决高负载和并发问题 1、在直播平台软件开发中为了可能解决实时互动负载过大和高并发的问题,就须要减少资源管理服务器从而实时监测各个服务的资源。在共享音视频时,资源管理器能够调配最佳的服务器给用户应用,而且服务器的资源是能够依据需要来进行横向扩容的。为了减少它的执行效率,服务端通常会应用C或C++语言进行编写。 2、总体来看,在直播平台软件开发中实时互动直播曾经成为直播最次要的发展趋势。在直播开发的过程中,不仅须要理解客户端的采集、推拉流等方面的问题,还能够从直播技术的架构方面动手去具体理解直播运行过程中的相干问题。在理解直播架构问题之后,对于直播其余方面的常识绝对起来也就更加容易了解了。 本文转载自网络,感激(爱吃五花肉吗)的分享,转载仅为分享干货常识,如有侵权欢送分割云豹科技进行删除解决

September 14, 2020 · 1 min · jiezi

关于直播:腾讯云技术大咖如何做好大型直播活动的保障

往年疫情期间,直播行业异军突起,逐步成为生存、学习、交换,乃至生产和经营的重要形式,大型直播流动也进入了高速发展期。 咱们都晓得,直播背地的技术撑持,并非新话题。然而,面对陡然大增的用户,如何稳固、晦涩、清晰的保障好直播流动是十分大的挑战。 9月17日19:00,腾讯云联结msup,邀请到了腾讯云资深售前架构师张建生,他将从直播流动的挑战及技术实现等方面,为大家带来《如何做好大型直播流动的保障?》的议题分享。 点击此处:https://vip.msup.com.cn/index...,即可预约进入直播间,观看直播。 另外,茹炳晟老师为大家分享的《御剑航行:近程办公与合作的最佳实际》话题,以及肖贺老师为大家分享的《电商行业技术架构演进》话题,回放链接也已生成,大家扫描上方二维码,即可获取。

September 14, 2020 · 1 min · jiezi

关于直播:网易实践|千万级在线直播弹幕方案

导读:8月22日,TFBOYS「日光旅行」七周年演唱会落下帷幕,顶级流量的在线直播,海量弹幕、礼物刷爆屏幕,网易云信为这场直播流动提供直播弹幕技术计划。本文将围绕千万级在线场景论述直播弹幕的设计方案。 文|云信IM技术团队 8月22日,TFBOYS「日光旅行」七周年演唱会落下帷幕,36氪评估网易云音乐举办的这场线上演唱会“很可能会成为线上音乐上演正式走上历史舞台的一个标志性事件”。在这样一个突破吉尼斯世界纪录的“标志性事件”背地,是网易云信千万级在线直播间弹幕计划的技术支持。 弹幕技术计划 弹幕计划以云信聊天室服务为根底,提供登录直播间、发送弹幕、礼物音讯等能力;以千万级在线播送为指标,设计了基于CDN的弹幕播送服务。 直播间收发音讯(弹幕、礼物)的根本业务流程如下: 获取直播间接入地址登录直播间收发音讯(弹幕、礼物)下文将围绕以上三个阶段别离论述如何实现千万级在线直播弹幕能力。 获取直播间接入地址 为了提供稳固高可用的弹幕服务,须要通过GSLB服务给用户调配最佳的接入地址。GSLB服务须要从用户网络类型、机房网络容量、服务器负载、老本等维度综合思考。 用户网络类型和机房网络容量:为了用户可能疾速、稳固的登录直播间收发音讯,个别要依据用户所在地理位置以及网络运营商类型综合思考给用户分类接入服务器。机房个别提供BGP网络、三线网络两种接入计划,调配服务依据用户IP地址剖析用户的地区、运营商类型并调配最佳接入地址。个别优先按运营商类型调配三线地址(例如电信用户调配电信接入地址),如果是小运营商或无奈辨认的IP地址则调配BGP地址,两种接入形式用户都能够取得稳固的网络环境。 服务器负载:单台服务器可能承载的TCP长链接无限,尤其是在高并发进入直播间的状况下,握手协定须要实现链路加密工作,对系统的CPU资源耗费比拟大,因而须要实现一套良好的平衡调配策略。 云信实现了一套基于服务器负载平衡的调配策略。长链接接入服务器周期性上报以后服务器负载到负载平衡服务集群,负载信息存储在共享缓存中,接入调配服务依据负载信息动态分配接入地址。 个别状况下用户申请直播间地址,地址调配服务会查问负载平衡服务(或者间接查问负载缓存),而后依据获取到的信息调配以后负载最低的服务器。在千万级别的在线直播流动场景下,开播时大量用户并发进入直播间,调配服务可达50万到100万TPS,这么高的TPS下如果还用“个别调配”计划,负载平衡(缓存)服务的TPS和集群之间的机房网络带宽十分高,单台服务器亦可能因为负载信息滞后导致超负荷调配。为解决机房内带宽和超负载调配的问题,咱们对调配计划实现了以下优化: 长链接服务器上报负载的周期从1秒调整到5毫秒,负载平衡服务器能够更实时的同步负载信息“地址调配”服务不再按申请查问负载信息,而是开启独自的同步线程周期性(同样是5毫秒)同步负载数据,从而无效升高负责信息同步的TPS和网络开销。“地址调配”服务不在按最低负载调配,而是将服务接入地址按负载排序,单个接入地址调配肯定次数后按程序调配下一个接入地址(防止低负载服务器霎时被打爆)在理论计划落地中,须要联合负载、用户网络类型、机房线路容量等因素综合调配。 登录直播间 登录直播间次要有两项工作:握手和身份认证。 握手:SDK建设TCP长链接后,首先向服务器发送握手协定,次要提供SDK版本、协定版本、反对的加密算法等信息,服务器依据SDK提供的信息抉择适合的协定版本以及加密算法,建设平安的通信链路。 云信反对的非对称算法包含:RSA,SM2等算法,反对的对称加密算法包含:AES,SM4等(注:SM2、SM4为国密算法,即我国自主研发翻新的一套数据加密解决系列算法。 云信作为业内当先的即时通讯PAAS平台,十分重视信息安全,因而也率先反对了国密算法。)。非对称加密算法对CPU资源耗费十分高,为了进步性能个别能够思考抉择适合的密钥长度,另外针对Java平台倡议思考应用JNI技术进步非对称加密计算性能。 身份认证:TFBOYS流动是在线付费直播,因而身份认证蕴含了账号认证和业务认证两局部,即用户必须应用正确的账号密码登录App,且必须付费购买直播门票才有权限观看直播。为优化零碎性能,弹幕服务将“地址调配和鉴权”服务进行了非凡优化: 鉴权核心提供用户进入直播间弹幕服务的身份鉴权策略配置。在TFBOYS流动中采纳了动静Token的鉴权机制,即依据用户账号、登录工夫、调配的接入地址以及鉴权核心按工夫区间生成的“随机数以及对应的Token算法”动静计算鉴权Token。 用户关上直播App,首先实现账号鉴权。在进入TFBOYS直播间时通过业务核心实现直播付费身份认证和弹幕服务地址调配(同步获取到弹幕服务的动静鉴权token),最初依据接入地址登录弹幕服务,弹幕服务根据鉴权核心的策略校验Token正确性。 动静Token鉴权采纳过程本地计算的形式,能够在不拜访用户服务的状况下实现身份鉴权,在进步登录认证的性能同时无效的升高了业务老本。 收发音讯(弹幕、礼物) 收发音讯是直播间的外围业务,直播间音讯次要分为弹幕和礼物两类。礼物因波及付费等因素个别通过客户方业务服务器发送,弹幕音讯则能够通过聊天室长链接发送。在千万级直播间场景下,因音讯量太高,因而须要从音讯量、音讯体大小、音讯比例等多个方面优化,因而设计了一套基于优先级队列的弹幕服务。 首先,为了节约音讯产生的带宽,在大型直播我的项目开始阶段,就须要对音讯格局进行优化,充沛精简音讯体大小。例如将礼物音讯展现相干的资源文件提前预加载到直播App中,礼物音讯转化为业务编号,可极大的缩小音讯大小; 其次,针对上行音讯设计流控机制。为了能全局管制上行音讯体量,设计了逐级流控计划。上层级依据下层级可能撑持解决能力设计绝对较粗粒度的本地流控机制;在弹幕反垃圾业务阶段,因须要全局管制音讯量,因而采纳分布式全局流控计划;弹幕播送阶段则依据业务播送需要再一次进行音讯流控。 上行音讯通过反垃圾监测后被投递到弹幕服务解决。基于优先级队列的弹幕服务首先按业务划分不同的音讯队列,例如:零碎播送、高优先级礼物、低优先级、弹幕,而后按队列调配音讯比例,最初依据单位工夫(1秒)内用户须要接管到的音讯量计算各个队列应该投递的音讯数量。在理论投递音讯的过程中,若前一个队列音讯量有余,可将残余的音讯数量叠加到下一个队列,以确保每一个周期都发送足够的音讯给用户。 弹幕可通过长连贯或CDN播送给其余用户。为了给用户提供极致的弹幕体验,充分发挥边缘减速的劣势,在千万级在线直播场景下优先选择CDN计划,如下图: 基于CDN播送弹幕有两种计划: 基于推流的计划:相似于直播视频推流技术,行将音讯伪装成视频流的模式推送到CDN,直播App以订阅数据流的形式同步弹幕信息;动态文件减速计划:即弹幕服务将不同队列中的音讯组装成一个动态文件,直播App周期性的到CDN服务器下载弹幕动态文件。相对来说,动态文件减速计划实现更简略但实时性不高(取决于弹幕同步的周期时长);推流的计划音讯实时性更高,但实现绝对简单,且须要思考到不同终端的兼容性。理论我的项目中可依据场景和终端类型灵便抉择不同的计划。 为了保障服务的可靠性,可思考交融CDN的计划,即同时将音讯推送到多家CDN厂商,并联合CDN厂商的容量比例以及网络提早状况综合调度(例如基于权重的轮巡调度策略)。 弹幕稳定性设计 单元化部署 ChatLink和ChatServer采纳单元化部署的计划,有以下长处: 单元内依赖的外围服务单元之间互相独立,程度扩大能力好,且单元内服务故障不影响其余单元,能够无效防止整个服务不可用的问题;跨机房部署,防止单个机房容量有余,或单机房不可用问题;弹幕计划采纳了单元无状态的设计理念,因而不须要思考单元之间同步数据的问题。单个直播间的“接入服务”和“弹幕服务”因须要全局管制未采纳单元化部署计划,然而在施行阶段采纳了跨机房部署的计划(包含依赖的存储资源、服务),能够防止单个机房故障导致服务不可用的问题。 单点服务高可用 针对“接入服务”和“弹幕服务”,除了采纳跨机房部署外,在服务设计上外围依赖的存储资源、服务,采纳主备模式。例如心跳负载依赖的缓存服务,单个缓存实例自身高可用,但思考到极其状况(例如缓存集群内超过一半的服务器宕机导致服务不可用),因而采纳主备缓存集群计划,当主集群不可用后,业务被动切换到备用集群,可保障业务在5秒内恢复正常。 系统监控与数据大盘 为了实时理解零碎运行状态,在弹幕计划中实现了秒级数据大盘计划。监控大盘围绕用户和音讯,展现用户地区散布变动、上行音讯量、播送音讯量、机房进口带宽、CDN带宽、音讯流控比例,端侧CDN弹幕同步指标(胜利比例、提早情况)等信息。 为了达成秒级监控的指标,数据收集采纳了“业务预聚合+数据中心合并”的实时计算计划。即业务服务间接在本地过程内聚合计算指标上报到数据中心,数据中心仅须要按工夫窗口合并监控指标数据即可输入到监控大盘。 故障与应急预案演练 为确保流动顺利完成,弹幕计划进行了屡次故障与应急预案演练措施。具体蕴含两个方面: 预设故障演练:即针对高可用设计方案的故障演练,按预设有打算的制作故障,次要验证高可用计划是否失效。随机故障演练:无打算的随机制作故障,次要用于查看应急预案、异样监控报警、数据大盘等应急监测机制是否失效。 **结束语 ** 凭借超过20年的技术累积和5年企业交融通信教训,网易云信在线直播弹幕计划在TFBOYS「日光旅行」七周年演唱会上以0故障的佳绩交上了一份称心的答卷,携手网易云音乐独特成就了这场口碑票房双丰收的线上演唱会。

September 11, 2020 · 1 min · jiezi

关于直播:直播软件搭建过程中的这项工作也很重要

要想经营好一个直播平台,须要各方各面的工作和技术相结合实现,而音讯推送就是直播app中非常重要的一个局部。App内的音讯推送不仅可能给用户提供告诉信息,进步用户活跃度,还可能起到召回一部分老用户的作用。那么在直播软件搭建的过程中,对于第三方推送也就是咱们所说的音讯推送性能又该如何实现呢? 怎么接入三方推送? 推送性能就是一种服务器被动push音讯到用户设施端的行为,因而依赖于设施端和服务器之间的长连贯,流程能够分为以下几点: 设施与推送服务器建设长连贯。 设施依据某些规定生成或从推送服务器获取一个devicetoken,推送服务器就能够依据devicetoken定位到具体的设施。 设施上报devicetoken到应用服务器,这一步由利用本人实现。 应用服务器会依据须要调用的推送服务端接口发动推送。 推送服务器收到推送申请后,依据申请中的devicetoken定位到具体的设施,而后下发推送告诉。 设施收到推送音讯,而后进行告诉弹窗或其余行为。 ios端在直播软件搭建的过程中,iOS端苹果的官网有专门的苹果推送告诉服务,简称APNS,有很高的推送送达率。最早的APNS提供基于TCP协定的接口,然而这一接口的应用形式较为简单,如果不留神就容易导致推送失败。起初苹果又提供了一套新的基于HTTP2协定的推送接口,这一接口能够追踪到每个推送申请是被回绝还是胜利,所以利用的也比拟多。 Android端在直播软件搭建的过程中,Google最早提供了云推送服务,简称为GCM,起初又推出了新的FCM推送来代替之前的GCM,因为国内的环境并不实用因而各个手机厂商相继推出了各自的推送服务。推送的原理都是类似的,不过是依赖于设施和推送服务器的长连贯,然而厂商推送的劣势在于这样的长连贯能够和本人的手机零碎绑定到一起,不同利用能够共享同一条长连贯,既节俭了流量的消耗,还免去放心利用内长连贯断连导致的音讯推送失败。与ios端不同的是,Android的推送服务器的接口都是HTTPS接口。 IM场景下推送在直播软件搭建的过程中的IM场景下,应用服务器有属于本人的长连贯服务,第三方推送服务能够利用三方厂商推送的零碎级长连贯来进步音讯推送的送达率。 1.对于ios端来说,利用没方法常驻后盾,所以就须要在切换前后台的过程中通过IM长连贯发送一个标记位,服务器就会在设施离线或者处于后盾的状况下触发APNS推送,缩小设施在前台状况下APNS推送的流量耗费。 2.对于Android端来说,服务器会在设施处于离线的状况下触发第三方推送,当设施处于后盾时会在收到音讯之后被动弹窗以便揭示用户有新音讯。 以上内容就是在直播软件搭建的过程中,推送性能的实现办法及相干内容。推送性能尽管没有直播app内其余的次要性能那么重要,但却是每一个app内不可短少的性能之一。而直播平台的经营方如果可能好好利用推送性能,加强用户黏性和留存率也是非常容易的。 本文转载自网络,感激(爱吃五花肉吗)的分享,转载仅为分享干货常识,如有侵权欢送分割云豹科技进行删除解决

September 11, 2020 · 1 min · jiezi

关于直播:直播一对一源码成为社交小能手的几点原因

随着时代的不断进步和倒退,当初大多数app的产品定位都以年轻人为主。为什么要以年轻人为主呢?因为年轻人承受陈腐事物的能力最快,并且带来的反馈成果最为显著,所以社交类的产品大多定位于年老用户群体。其中,直播的“分身”一对一直播模式,始终都深受年老用户的青睐。这也是直播一对一源码为什么能在社交和交友市场占据如此大的比重,接下来就简略剖析一下其中的起因。一对一直播的模式如此受欢迎有绝大部分的起因是因为其中的性能新鲜,并且给当初比拟“塌实”的年轻人提供了私密的交换空间,次要有以下几点性能是开发过程中必不可少的。 一、目前来说,直播一对一源码的直播性能是必不可少的。最简略的起因就是直播的变现形式简略间接,深受用户和直播平台的青睐,而且越来越多的年轻人开始热衷于视频直播的形式,通过这种形式进行社交互动,所以直播性能是十分让人难以舍弃的。 二、一对一的零碎不仅能将用户动静、直播、一对一视频聊天和小视频等支流性能交融在一起,而且还能够通过传统的一对一语音和视频聊天的模式,在线下实现各种游戏陪玩、陪聊并且进行一对多的视频直播。 三、因为短视频平台的流量微小,于是各类直播APP开始讲小视频的性能嵌入直播APP的版块之中,并且能够通过将小视频和其余动静性能完满联合的形式,为用户提供新鲜乏味的介绍形式。这种新鲜又乏味的引流形式,直播平台怎么会错过呢?四、对于直播一对一源码的一对一的直播平台来讲,其实圈子动静的公布能够很好的体现出平台对于社交性的器重。能够让平台用户之间的间隔彼此拉近,通过这种形式加深对彼此的理解和关注。而且从技术层面来讲,圈子动静性能的实现其实并不简单,大多数做过SNS零碎的服务商都能够提供该性能的开发接入。 五、之前传统的社交平台是通过相似微信语音通话或是视频通话的形式来进行一对一聊天,然而借助直播平台中的连麦或者打赏性能,用户开始发现这种形式比起之前传统的形式,不会那么繁多而且互动感也失去了进一步的晋升。最要害的是,很多主播能够通过连麦、私密直播间等设定,突破传统的一对一聊天形式,在此基础上获取非常可观的收益。 总的来说,一款优质的app除了须要优质的直播一对一源码以外,还须要从实现性能和产出内容等方面多下功夫。如果只是单纯地靠一对一、陪聊等字眼作为噱头吸引用户下载的话,预计产品的用户留存率并不会很主观,找准用户痛点真正的实现用户的社交需要才是最切实的。 本文转载自网络,感激(爱吃五花肉吗)的分享,转载仅为分享干货常识,如有侵权欢送分割云豹科技进行删除解决

September 10, 2020 · 1 min · jiezi

关于直播:短视频源码开发者总结出的短视频源码开发经验

短视频源码须要留神的开发问题: 1、短视频压缩 短视频的压缩问题是短视频源码的难点之一。视频拍摄、上传实现后,要在不影响用户体验的状况下实现短视频帧率的对立、格局对立、分辨率解决、短视频压缩等解决。 短视频不进行压缩解决的请款下上传,会造成资源的节约,对运营商来说,长期以往的带宽节约会十分费钱。 2、短视频特效和背景音乐素材 短视频源码的视频特效库和音乐库丰盛十分重要,这让短视频变得更有趣味性,用户们乐于观看并分享。 素材的应用会让运营商陷入版权纠纷问题,因为音乐版权而出事的平台也不在少数,所以要尽量减少在这方面的问题。 3、大数据分析 短视频源码的数据分析性能十分重要,在举荐上、获取用户爱好上都能施展很大的作用。百万级的用户,想要做到精准的举荐,就离不开对用户数据的剖析,通过平时观看的爱好,充沛理解用户的观看习惯。 在短视频源码中,通过大数据检测哪个时间段观看的视频量最多,不同年龄段浏览的内容不同,或对某个独自的用户常常观看或点赞的内容进行相应的剖析,通过大数据分析后,对不同地区、年龄段、集体的举荐都有安顿。 短视频源码所有性能的增减无非是为了进步用户的应用体验,以用户体验为外围,开展各种性能的开发钻研,只有理解短视频源码的基本功能,把握开发的要点,能力做出优良、合乎当初人口味的短视频平台。 申明:以上内容为云豹科技作者自己原创,未经作者自己批准,禁止转载,否则将查究相干法律责任

September 10, 2020 · 1 min · jiezi

关于直播:直播软件源码开发千万不能忘的一个知识点

对于直播软件源码开发的技术人员来讲,音视频即时通讯技术是须要熟练掌握的。毕竟像直播这样器重互动和实时性的利用场景,即时通讯能够从中起到很大的配合作用。目前市面上有很多服务商所提供的SDK能够帮忙实现这一技术,然而在抉择哪一家服务商时还须要多下一些功夫才行。本文次要分享一下开发过程中,音视频即时通讯会波及哪些技术畛域。 音视频的即时通讯须要反对跨平台利用,服务器反对Windows、Linux和Unix等多种支流服务器的操作系统。目前支流的app次要分为Android端和ios端,别离应用Linux和Unix。直播软件源码 音视频即时通讯当初最罕用的就是国内当先和视频编码标准H.264编码,为什么呢?因为H.264/AVC在压缩效率方面更高,个别状况下能够达到MPEG-2及MPEG-4的简化类压缩效率高约2倍。 如果音视频即时通讯是采纳先进的AAC语音编码的话,可能很大水平上改善数据压缩率和音质问题。还能够在噪声克制或者是回音打消等音效进行解决,从而大幅度地加强用户体验。直播软件源码 4.P2P技术对于通信技术的要求比拟高,次要是针对解决那些不通过服务器就直达的音视频利用。如果是采纳P2P实现一般的通信技术,不仅能够无效加重零碎服务器的承载压力,还能够无效的扩充直播零碎的容量。 5.能够在服务器模块采纳实现端口实现高性能的零碎架构,而后再采纳重叠I/O机制,通过线程池和缓冲池治理,极高的优化系统结构,从而进步零碎的性能。 6.音视频即时通讯最好的计划应该是采纳模块化技术体系,毕竟良好的平台兼容性与可扩展性,还有丰盛的API函数,都能够为下层利用提供凋谢的利用接口。 7.须要实现音频抖动缓冲,或者是视频马赛克打消。 直播软件源码 8.采纳服务器并发解决技术,从而进步音视频即时通讯计划的效率。 总的来看,音视频的即时通讯技术在直播软件源码开发过程中也是十分重要的一部分。从最后的开发,到搭建,再到最初开发实现上架等并不像看起来一样简略。 本文转载自网络,感激(爱吃五花肉吗)的分享,转载仅为分享干货常识,如有侵权欢送分割云豹科技进行删除解决

September 9, 2020 · 1 min · jiezi

关于直播:直播平台源码还在担心CPUGPU占用率高

当初手机发烫景象很常见,玩游戏工夫过长、看直播工夫过长,都是导致手机发烫的起因,引起发烫的起因次要是CPU/GPU占用率过高,在直播平台源码能够通过系统优化解决此类问题,升高零碎功耗,在优化前要先理解功耗高的起因。 1.视频体积过大 过大的视频自身因为体积问题就会减少CPU和GPU的耗费,有的平台为了保障直播画面的提早率,会在视频中退出过多的关键帧,关键帧的减少也会减少视频的大小,视频过大会减少手机的功耗,所以适当压缩视频画质和帧率能够加重手机压力。 2.简单的礼物款式 直播间中价格过高的礼物会有专门的动画特效,动画特效的设置不会因为机型的不同产生扭转,所以某一直播间内短时间内呈现过多的高级礼物赠送时,一些用户的直播画面就会产生卡顿,这时手机内存的耗费就会减少,导致手机发热。所以在直播平台源码搭建中不要设置太简单的礼物特效能够缩小肯定的CPU占用率。 3.美颜特效 美颜性能是当初直播时的必备性能,美颜中的美白、磨皮、贴纸等性能,是会减少画面数据传输的大小,应用的美颜性能越多,数据越大越简单,对手机造成的累赘也越大。高级的美颜滤镜性能也是手机CPU的杀手。 4.三指放大 当初直播平台源码和视频平台都反对暂停三指放大性能,保障画质的状况下放大画面会减少像素点的占用率,适度放大画面波及过于简单的运算,导致CPU耗费减少,直播平台源码限度画面的像素和分辨率尽可能在保障画面清晰的同时又不应用过高的分辨率,这样放大的时候只有不过于大,还是能够保障画质的,保障画质同时又能缩小功耗。 5.视频编解码 为了适配当初的Android机型,好多直播平台源码应用的软解码形式,软解码形式能够减少视频的解码速度也有很好的兼容性,但也是十分消耗CPU的,所以应用硬解码和硬编码是个不错的抉择,它们会应用专门的硬件编解码模板,能够加重CPU的累赘,但须要技术人员对一些Android机型进行适配。 抛去用户手机的配置问题,直播平台源码要尽可能的减小手机CPU/GPU的占用率,过热的手机会缩小手机的寿命,每次看直播手机发热,用户也会升高对平台的黏性,影响观看体验。 申明:以上内容为云豹科技作者自己原创,未经作者自己批准,禁止转载,否则将查究相干法律责任

September 9, 2020 · 1 min · jiezi

关于直播:直播软件搭建底层搭建技术是如何实现的

对于直播软件搭建的底层搭建技术,可能还有很多人不太理解。其实对于直播来讲,底层的搭建也是至关重要的局部,就像咱们现实生活中盖楼一样,要先打好地基才能够持续搭建。接下来,咱们将简略演绎成几个局部来简略介绍一下。 服务器零碎这一部分实际上就是直播流媒体服务器零碎,次要是实现直播的数据流转发性能,重要的是它的性能与稳定性与外围直播业务平台的稳定性和经营老本是间接挂钩的。通常可能进行失常经营的流媒体服务器零碎,都能够达到单机反对5000并发在线用户,具备极高的资源利用效率。 2. 内容散发零碎 说到这里,就须要讲到CDN。它能够在多个节点服务器之间将直播内容进行主动散发,从而实现全网播放,并且挪动终端用户能够主动抉择离本人最近的服务节点来承受公布内容。如果想要开发的直播软件业务范围是全国,那么就须要找一家覆盖全国节点的服务商,这样才可能保障直播业务的失常进行。置信CDN的重要性就不须要我再多说了吧。 3. 录播回看零碎 这部分实现起来绝对比较简单,然而要想达到更高的规范,还须要投入更多的精力才行。然而对于经营级的服务平台来说,如果没有了稳定性和性能方面的保障,那么你会发现经营老本会越来越高,效率越来越低,最终因为用户体验差。 在线转码零碎在日常格局转换时咱们往往会发现,对一个1080P的高清节目做转码时,用一台搭载Intel i7处理器的主机做解决十分耗费资源,而且转码速度极慢,。更合况是对于一个有上千个用户同时做直播的经营平台。因而,咱们必须要找到一种更正当的解决方案,既要达到更高的转码效率,同时还要能正当地管制老本,这样能力满足平台经营的须要。 用户鉴权零碎随着国家对直播行业的监管增强,平台要为用户提供一个实在牢靠的权限管制机制,任何人都不能越权公布违规的内容,也不能假借第三方的名义来公布违规的内容。 计费、领取与订单结算零碎直播经营中的各个环节都会和资金流交互,比方主播的在线支出、主播与平台的资金结算、用户的充值与生产记录等。这是业务撑持零碎的外围,并且要求数据必须精确。 内容审核零碎以后,国家对内容的合规性审核要求越来越严格,各大直播经营平台都建设了本人的直播业务内容审核团队,因为审核的内容数据宏大,独自依附人眼去做内容审核的压力可想而知,因而咱们必须充分利用计算机技术帮忙咱们做初步的内容合法性辨认,机器无奈筹备判断的再交给人去解决,这样能够极大地节俭人力老本。 由此可见,要想进行直播软件搭建,不仅须要底层搭建技术的反对,前期还须要应用层的零碎搭建。如果你对这类的内容感兴趣的话,欢送关注我,日后我会不定时更新相干内容。也欢送大家在评论区交换探讨。 本文转载自网络,感激(爱吃五花肉吗)的分享,转载仅为分享干货常识,如有侵权欢送分割云豹科技进行删除解决

September 8, 2020 · 1 min · jiezi

关于直播:一对一语音直播系统源码如何解决音视频直播技术难点

直播作为实时性和互动性要求较高的音视频利用场景,存在十分多的技术难点,就连一对一的直播模式也毫不例外。比方低提早、流畅性、回声打消、国内外互通和海量并发等问题,都是开发过程中的难点。然而,在开发过程中如果具备了优质的一对一语音直播零碎源码,那么这些难点可能都会失去肯定的解决。 1.低提早 要想保障低提早,前端和后端整个链条肯定要做的十分谨严。像前端的一些编码算法或者是丢帧策略等都要做好。此外,不同的业务场景之间编码器的抉择也会有所不同,从而也会带来不同水平上的编码提早,所以不同的业务场景可能达到的提早水平也是不一样的。还有就是对于推拉流网络的抉择,大部分的解决方案都会让须要实时互动的用户通过外围的语音视频网络,像是BGP之类的优质节点来做传输,也有可能须要做转码、转协定或混流之后,再通过聂荣散发网络去散发。这样一来,在接入外围语音视频网络时就须要有智能的调度策略来实现就近接入了。 2.流畅性 流畅性作为直播过程中容易呈现较多技术难点的一个方面,须要留神的也有很多。 (1)能够做动静伸缩的jitterbuffer,在网络情况差或者是网络抖动比拟激烈的状况下,可能够适当增大,从而升高提早来对应呈现的网络抖动状况。 (2)快播和满播技术在网络环境较差时,能够在用户毫无感知的条件下略微升高播放速度,而后来解决短暂呈现的网络抖动所引起的卡顿状况,当网络复原后,还能够疾速追赶回来。须要留神的是,这种形式并不适宜所有的利用场景。 (3)码率自适应,也就是说抉择适合的码率来做动静传输。为了保障晦涩度能够适当调整分辨率和帧率,当然,语音视频引擎会依据以后的网络测速后果和利用须要的码率,动静调整码率、帧率和分辨率,以此达到晦涩观看的用户体验。 (4)在推流端做一些分层的编码,这样一来,在拉流端能够动静的依据侦测到的网络带宽状况来拉取不同的数据去做渲染。而分层编码容许拉流端抉择不同档次的视频编码数据,网络状况好的时候,就选取较多层次的数据,网络状况差的状况下,就选取根底档次的数据。 (5)在推拉流端监测以后推拉流品质比拟差时,即便通过降低码率、分辨率和帧率等策也无奈保证质量时,能够抉择放弃此链路。 3.回声打消 先简略介绍一下回声打消的原理,对端发送的信号会先给到回声打消的模块,作为未来打消的参考信号,再将信号给到扬声器播放,播放后因为周围环境反射造成回声,与实在的音频输出一起被麦克风采集,这时采集到的输出信号是带有回声的,回声打消模块会依据后面的参考信号生成滤波对消掉会回声后再发送进来。至于回声打消的问题,谷歌开源的WebRTC提供了回声打消模块,但它自身设计是为了在PC端实现音视频互动场景,在挪动端的适应性较差,尤其是Android端。 4.国内外互通 这一点实用于海内经营的用户,流媒体数据和管制信令就须要做好跨国互通,所以要思考在寰球正当安排一些中继节点。数据门路的抉择是须要依据业务决定的,也就是说在物理链路路由之上还须要再有一条业务的路由表,并且依据用户的场景制订,比方用户散布、拜访频率或高频段峰值等。可能每次的路由都会不同。 5.海量并发 这是所有的互联网相干产品都会遇到的问题,次要思考负载平衡,如何平滑扩容,对于无奈笼罩的中央要做代理调度,甚至须要思考容灾、接入层的设计等等,再此就不多做赘述。 由此可见,在开发过程中不仅须要优质的一对一语音直播零碎源码作为“辅助”,还须要思考多方面因素和可能产生的问题,只有这样能力开发出真正优质的直播app。如若不然,将会在直播畛域中就此“匿影藏形”。 本文转载自网络,感激(爱吃五花肉吗)的分享,转载仅为分享干货常识,如有侵权欢送分割云豹科技进行删除解决

September 4, 2020 · 1 min · jiezi

关于直播:如何保障一场千万级大型直播

导读:TFBOYS“日光旅行”七周年演唱会近日胜利举办,最高同时在线人数达78.6万,口碑票房双丰收。网易云信的大型直播解决方案全程撑持了网易云音乐的这场流动,本篇文章将和大家分享这场稳固、晦涩、清晰的线上演唱会背地的故事。 文| 费曼 网易智企服务端开发工程师 8月22日,TFBOYS“日光旅行”七周年演唱会在网易云音乐平台上与宽广粉丝们见面。据官网数据显示,这场演唱会最高同时在线人数达78.6万,突破线上付费演唱会世界记录,获得了口碑票房的双丰收。 此次演唱会采纳了在线实时互动及演唱会现场的多场景导播切换,提供了主机位和三个艺人专属机位流,同时每个机位流实时转码四个清晰度档位,用户能够依据爱好抉择本人想看的内容。 网易云信的大型直播解决方案,全程撑持了网易云音乐这场流动,明天咱们来聊聊一场稳固、晦涩、清晰的线上演唱会背地的故事。 大型直播架构 上图是此次TFBOYS在线演唱会的直播媒体架构简图,能够看出一场大型流动直播涵盖的技术计划点十分庞杂,这里咱们先以推拉流链路、全局智能调度、流量精准调度以及单元化部署,对网易云信的大型直播计划做一个开展介绍。 推拉流链路 网易云信的大型直播技术架构,分为几大部分: 视频直播核心(LMS, Live Manage Service),负责直播流的逻辑治理和操作控制,包含存储和下发实时转码、加密等媒体解决的配置信息。实时互动直播服务,由连麦互动和直播两局部组成,主播和连麦者的音视频数据在互动直播高性能服务器合成为一道流后推流到直播流媒体服务器。直播源站服务(LSS, Live Source Service),网易云信自建的直播流媒体服务器节点,联合全局智能调度零碎,提供第一公里的最佳链路抉择,同时交融反对接入多家CDN厂商。媒体解决服务(MPS, Media Processing Service),提供实时水印、实时转码、媒体数据加密等弱小的流媒体解决能力。交融CDN与全局智能调度(GSLB, Golabal Server Load Balancing),提供麻利智能的CDN调度策略和调配算法,联合全链路、端到端的流媒体管制,来达到最终端侧低劣的用户体验。客户端SDK,提供推流、拉流以及上下行的调度能力,便于用户疾速接入应用网易云信平台一站式的音视频解决方案。 交融CDN与智能调度 网易云信提供的是一个端到端的服务,通过平台的SDK执行一个相似HTTPDNS的调度,来做到真正依据用户IP做就近的接入。针对国内绝对简单的运营商网络环境,云信在直播上行方面通过BGP网络以及与相干运营商在网络接入方面的单干,可能更加精准地管制网络链路的抉择。而对于上行,网易云信也提供了播放端的SDK接入,通过端到端的调度策略就近抉择适合的上行链路。 调度的准确性以及最终成果,依赖及时精确的数据撑持。咱们有一个全链路、平面的数据监控体系,一方面利用CDN上的一些实时日志,另一方面联合自建节点、客户端侧上报收集链路上探测的数据,而后整合做一个实时计算来撑持整个调度的策略。 交融CDN计划,通过调度、监控、高可用等技术和伎俩来解决CDN网络方面的问题,然而对于云信平台上的用户,就和在应用一个传统的CDN网络一样没有大的差别,这些技术细节对用户通明无感知,用户通过简略易用的接入sdk,就具备了高可用、全链路管制的流媒体散发服务。 流量精准调度 大型演唱会直播流动,尤其是正式开播时的进场阶段,突发流量峰值会十分高,这就须要实时精准的智能调度策略。云信交融cdn的智能调度蕴含两大部分:CDN调配调度和节点调度。 节点调度,比拟常见的是DNS协定解析调度和IP调度(302/HTTPDNS),前者因为DNS协定起因,调度失效工夫较慢,而后者则能够做到申请级别的调度,也就是反对任意比例的负载平衡,更加及时精准。在云信智能调度的场景里,失常状况下会遵循IP调度,在IP调度解析失败时,客户端上会启动loacl DNS解析逻辑,两者的联合确保了调度的精准和稳固牢靠。 Don't put all your eggs in one basket.永远不要将鸡蛋放在同一个篮子里,从危险管控的角度来说,大型流动保障的CDN厂商资源,通常没法通过一家CDN资源进行满足。网易云信的交融CDN计划则是将多家CDN厂商进行整合与流量调配调度。通常在一次大型直播中,多家CDN厂商提供的容量(区域带宽、最高带宽)、品质会各不相同。咱们的指标则是通过动静调整调度比例,在确保不超过最大带宽的前提下,精确化按比例调配流量,以及尽可能地确保体验。 咱们设计了一套针对CDN厂商的打分算法,影响因子蕴含以后带宽、保底带宽、最大带宽、带宽预测、带宽品质,算法遵循以下准则: 没超保底的带宽,比超过保底的带宽,得分更高没超保底的时候,残余保底和残余总带宽越大,得分更高超过保底的时候,残余总带宽越大、品质越好,得分更高各CDN的分数之比决定了调度比例,CDN打分算法是在继续地迭代更新计算,最大化调配应用各家CDN的带宽,而后再调配各家CDN厂商的保障之外的资源,同时优先选择品质较好的厂家,防止单价CDN厂商超调配。 单元化部署 上文所说,在大型直播流动中,短时间大量涌入的用户申请,对以全局智能调度服务为主的相干非媒体流链路利用,也提出了更高的并发解决挑战。除了上行的推流链路咱们做了主备两个单元的部署,非媒体数据链路上的服务咱们也采纳了单元化的部署计划。 在此部署计划下,可用性做到任意单元机房故障,不影响整体可用性,即异地多活。单元化部署遵循以下准则: 单元化的依赖也必须单元化(外围业务)单元化粒度为利用,非api单元化技术栈对利用尽量避免产生侵入性 如上图所示,非单元化的业务部署在主机房,单元化的业务则部署在主机房和单元机房。 稳定性与安全性的保障 上行链路稳固 超大型直播计划最外围的诉求就是直播稳定性,上面咱们将以此次在线演唱会为案例,重点论述一下网易云信大型直播的全链路稳定性架构。 上图是云信大型直播的媒体流链路示意简图,整体计划能够接受任何单节点、单线路、单机房网络进口的故障。如直播源站局部,采纳了多线策略收流,蕴含机房专线和4G背包计划,一主一备两个线路。同时每个单元的源站集群都有4层负载平衡,一台机器宕机不会影响整体可用性。LMS、LSS、MPS都是跨机房部署,所有服务模块都可配置专有资源池供应用,保障不会受其余租户影响。 整个推流链路采纳双路热流,互为主备,且部署上是相互独立的两个单元,能做到反对Rack级别的故障灾备。双路热流实现了主动主备切换,端上无需专门增加应用层的线路切换逻辑。当任何一个链路呈现问题的时候,观众的直播流不会受到影响,端上均匀卡顿感知工夫在1s以内。 除了推流链路的整体主备单元容灾,每个单元的服务自身也会有容灾伎俩。比方UPS接入,能够承受30min的供电故障,比方当实时互动流呈现问题时,导播台会推垫片流以保障链路数据不中断。 上行链路稳固 在此次流动中,全局智能调度服务会接受较大的峰值压力,在单元化部署的根底上,咱们通过了多轮压测和性能调优,模型上能够撑持千万级用户在半分钟内全副进入直播间。 除了上述对于推流链路的高可用,上行链路也有相干的容灾策略。当GSLB智能调度服务整体不可用,咱们在客户端SDK预埋了交融CDN的local DNS灾备逻辑与比例配置,将云端的全局智能调度fail-over到客户端的本地兜底调度,并放弃大数据统计层面的各CDN厂商的流量调配平衡。 ...

September 4, 2020 · 1 min · jiezi

关于直播:网易云音乐TFBOYS线上演唱会破纪录稳定线上体验如何实现

8月22日,TFBOYS“日光旅行”七周年演唱会通过网易云音乐与数十万粉丝正式见面,据官网数据显示,这场演唱会的记录最高同时在线人数达78.6万,突破线上付费演唱会世界记录,获得了口碑票房双丰收。网易云信技术赋能线上场景,助其打造不输线下的演唱会观看体验。 ” 这场演唱会中,王俊凯、王源、易烊千玺一起展示了多个首唱新歌和首跳舞蹈,超人气年老偶像组合,加之融入MR、OVERLAY以及AR技术的舞台效果和在线互动环节,为上演带来炸裂式的视听体验,燃爆全场。 不少粉丝看后示意:“画质蛮清晰的,一点不卡,三十块大洋花得很值。““温顺的歌声,绝美的舞台,每一个画面都值得细细回味。”“不舍得走啊!”“十年之约,不见不散!” 显然,网易云音乐可能打造出这场高规格、高人气的在线音乐上演,不仅得益于TFBOYS顶流偶像自身弱小的影响力和号召力,更源于网易云音乐兼顾粉丝、音乐性、现场出现,以及启动业余技术平台降级用户体验的翻新冲破。 01 / 创始在线音乐上演新形态 技术难题亟需攻克 近半年以来,受疫情影响,不少明星演唱会都从线下被搬到了线上,TFBOYS七周年演唱会也是其中之一,为了不与粉丝践约,TFBOYS抉择与网易云音乐单干,举办了这场名为“日光旅行”的全线上演唱会。 对于粉丝而言,喜爱的明星、精彩的音乐与舞蹈,清晰晦涩的观看体验,加之良好的粉丝互动模式,曾经是一场合格的线上演唱会。 而在此次TFBOYS“日光旅行”七周年演唱会中,多种国内当先技术的应用,为粉丝打造了有别于传统演唱会的互动体验,粉丝能够浸入式地感触这场线上演唱会,同时直播完结后,粉丝还能够通过线上回放的形式重温整场演唱会。 高质量上演+实时互动为粉丝带来了身临其境的视听成果,最终出现了一场隆重的线上演唱会互动体验。 然而,对于在线演唱会来说,提供“清晰晦涩的观看体验”并非易事,尤其是顶流偶像的在线音乐上演。面对寰球粉丝的期待,演唱会一旦呈现卡顿、画质含糊等状况,将会大大影响粉丝的观看体验,在线上演的质疑声也将被有限放大。 在此背景下,演唱会对平台提出更高的要求:服务器是否承接的住TFBOYS粉丝宏大的流量压力?如何让遍布寰球的粉丝都能顺利、流畅地观看在线演唱会?如何在上演全程对TFBOYS做出更好的现场出现满足粉丝期待?这是网易云音乐须要思考的首要问题。 02 / 携手网易云信赋能线上场景 打造不输线下的观看体验 为了可能给粉丝带来“现场体验感”的同时融入互动性,网易云音乐抉择联结业余的通信与视频 PaaS平台网易云信独特打造这场线上演唱会。 TFBOYS粉丝数量多、终端网络简单,且遍布寰球,在百万级别粉丝同时在线观看演唱会、进行互动的状况下,保障服务器稳固、视频清晰晦涩会更加艰难。为了带给粉丝最佳的观看体验,网易云信通过多重动作进行保障。 演唱会筹备阶段,网易云信依据TFBOYS的用户地区散布状况,针对不同地区用户数量筹备不同冗余带宽资源, 并设计了鲁棒性十分强的、针对多CDN的多重精准调度治理服务,确保用户能以最佳的成果观看上演。 演唱会过程中,网易云信通过实时数据大盘及智能监控零碎实时监测流动数据,通过异样报警第一工夫感知并躲避危险。同时,网易云信依靠自研智能调度计划,交融了网易自建资源以及多家CDN厂商资源,在海量人数观看的状况下,通过每个区域每个运营商维度的用户卡顿率监控,动静调优CDN资源,保障用户的观看体验。 此外,为了避免播放中的意外状况,网易云信通过全链路灾备,如机房rack级别的容灾、多机房进口网络容灾、上行主备双路热流主动切换来保障网络安稳运行,而网易云信笼罩寰球的技术节点也很好的反对了寰球粉丝的观看体验,上演全程,各国粉丝嗨爆直播间。 在演唱会过程中,即便因为终端网络环境等起因呈现偶然的卡顿,“最优线路”播放计划也会帮忙用户切换至以后可能抉择到的最优线路,用户能够随时点击启动“最优路线”。 除此以外,网易云信实时转码出多种清晰度的推流数据,粉丝能够进行480p、720p、1080p等清晰度秒级切换,以确保在不同网络环境下的观看体验。 此次演唱会除了默认机位,也退出了王俊凯、王源、易烊千玺的单人机位,反对切换观看TFBOYS成员们表演时的状态。 为了满足这种多机位的设计, 以及主备流切换能力, 整场上演会比一般直播多出数十倍的上行链路, 也对精细化治理每一路上行品质和主动复原保障伎俩提出了更高的要求。 线上互动方面,为了充沛满足粉丝看到偶像按耐不住“啊啊啊”的需要,让近百万粉丝可能同时发弹幕进行互动,网易云信采纳全新弹幕计划,突破原有通过BGP核心机房进行弹幕下发的形式,借助CDN全网笼罩、并发能力强的劣势,通过节点层层下发,满足了在线演唱会大规模散发的场景。演唱会完结后,粉丝们依然恋恋不舍地留在现场,以刷弹幕的模式,表白他们的不舍。 时下,疫情寰球泛滥,大规模的线下演唱会、音乐会仍然难以发展,线上音乐上演在很长一段时间内仍将是娱乐上演的次要模式。 此次TFBOYS"日光旅行"线上演唱会是头部音乐平台与时俱进,不断丰富内容模式、降级用户体验的一次胜利摸索,体现出线上音乐上演的正在朝更高的指标迈进,将来,基于清晰晦涩的互动观看体验,线上音乐上演还将迸发出更多的设想空间。

August 28, 2020 · 1 min · jiezi

关于直播:微信小程序直播如何接入开源代码接入案例分享

小程序直播组件接入指引一、简介小程序直播,是微信提供给小程序开发者的直播组件。通过调用该组件,商家能够在小程序中实现直播性能。 按上面的应用阐明接入,在你的小程序中引入直播组件。 二、应用办法阐明1.【直播组件】如何引入版本限度:微信客户端版本 7.0.7 及以上(根底库版本 2.9.x 及以上反对同层渲染)能够观看直播及应用直播间的性能,低版本刚进入直播间时会提醒用户降级微信客户端版本(低版本只能观看直播,无奈应用直播间的性能)。 在分包内引入【直播组件】live-player-plugin 代码包,我的项目根目录的 app.json 援用,示例代码如下: {   "subpackages": [     {       "root": "packageA",       "pages": [         "pages/home/home"       ],       "plugins": {         "live-player-plugin": {           "version": "1.0.0", // 填写该直播组件最新版本号,微信开发者工具调试时可获取最新版本号           "provider": "wx2b03c6e691cd7370" // 必须填该直播组件appid,该示例值即为直播组件appid         }       }     }   ] } 2.【直播组件】如何应用按第1步的办法把组件代码包配置引入后,即可间接通过 链接地址跳转到直播组件页面(即为进直播间页面) 链接地址须要带上直播房间id;房间id可通过上面 【获取直播房间列表】 API获取,示例代码如下: Go to Live Player page 通过该链接可跳转到直播组件页面(以后页面入口仅凋谢‘live-player-plugin’)。 示例效果图如下: 三、其余相干组件、接口和携带参数订阅组件:subscribe获取直播状态API:getLiveStatus直播间到商详页面携带参数:room_id从群分享卡片返回直播间时携带参数:shareTicket后盾获取直播房间列表API后盾获取回放源视频API 注:以上2个后盾调用的接口总下限500次/天1.【订阅】组件性能解释:用户进入直播间内,可对一场未开播的直播进行单次订阅,开播时直播组件会主动下发开播揭示给用户, 无需开发者额定开发 组件应用:如果须要 在直播组件页以外小程序其余页面也有同样的开播揭示的性能,能够引入【订阅】组件subscribe;需在page页面(如home页面)的 home.json 援用订阅组件,示例代码如下: {   "usingComponents": {     "subscribe": "plugin-private://wx2b03c6e691cd7370/components/subscribe/subscribe"   } } 而后便可在home.wxml里应用订阅组件,其中直播房间id可通过;房间id可通过上面【获取直播房间列表】API获取 2. 获取直播状态接口接口阐明:首次获取立马返回直播状态,往后距离1分钟或更慢的频率去轮询获取直播状态 直播状态阐明: 101直播中:示意主播失常开播,直播失常的状态102未开始:示意主播还未开播103已完结:示意在直播端点击【完结】按钮失常敞开的直播,或直播异样15分钟后零碎强制完结的直播104禁播:示意因违规受到经营处罚被禁播105暂停中:示意在MP小程序后盾-控制台内操作暂停了直播106异样:示意主播来到、切后盾、断网等状况,该直播被断定为异样状态,15分钟内复原即可回到失常直播中的状态;如果15分钟后还未复原,直播间会被零碎强制完结直播107已过期:示意直播间始终未开播,且已达到在MP小程序后盾创立直播间时填写的直播打算完结工夫,则该直播被断定为过期不能再开播调用办法:若要调用【获取直播状态】接口getLiveStatus,需在小程序页面顶部援用【直播组件】live-player-plugin,示例代码如下: let livePlayer = requirePlugin('live-player-plugin') // 引入获取直播状态接口 // 首次获取立马返回直播状态,往后距离1分钟或更慢的频率去轮询获取直播状态 const roomId = xxx // 房间id livePlayer.getLiveStatus({ room_id: roomId }) .then(res => {   // 101: 直播中, 102: 未开始, 103: 已完结, 104: 禁播, 105: 暂停中, 106: 异样, 107:已过期    const liveStatus = res.liveStatus }) .catch(err => {   console.log(err) }) 3. 携带参数版本限度:直播组件版本1.0.1及以上反对携带以下参数 1) shareTicket:分享直播间卡片到微信群,点击此卡片后能够在 App onShow 里获取该参数 2) room_id:点击直播组件页面里的货架商品跳转到商家小程序的商品详情页面时,会带上房间号参数 4.【获取直播房间列表】接口,仅供后盾调用接口规定:该接口仅供商家后盾调用,调用限额500次/天,倡议开发者本人做缓存(此接口与上面 【获取回放视频】接口共用500次/天限度,请正当调配调用频次)。 申请URL:http://api.weixin.qq.com/wxa/business/getliveinfo?access_token= 申请形式:POST 申请示例: Request {  "start": 0, // 起始拉取房间,start=0示意从第1个房间开始拉取  "limit": 10 // 每次拉取的个数下限,不要设置过大,倡议100以内 } Response {  "errcode": 0, // errcode=0代表胜利;errcode=1代表未创立直播房间  "errmsg": "ok",  "room_info": [{   "name": "直播房间名",   "roomid": 1,   "cover_img": "http:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/Rl1RuuhdstSfZa8EEljedAYcbtX3Ejpdl2et1tPAQ37bdicnxoVialDLCKKDcPBy8Iic0kCiaiaalXg3EbpNKoicrweQ\/0?wx_fmt=jpeg",   "live_satus": 101,    "start_time": 1568128900,   "end_time": 1568131200,   "anchor_name": "李四",   "anchor_img": "http:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/Rl1RuuhdstSfZa8EEljedAYcbtX3Ejpdlp0sf9YTorOzUbGF9Eib6ic54k9fX0xreAIt35HCeiakO04yCwymoKTjw\/0?wx_fmt=jpeg",   "goods":[               {       "cover_img":"http://mmbiz.qpic.cn/mmbiz_png/FVribAGdErI2PmyST9ZM0JLbNM48I7TH2FlrwYOlnYqGaej8qKubG1EvK0QIkkwqvicrYTzVtjKmSZSeY5ianc3mw/0?wx_fmt=png",       "url":"pages/index/index.html",       "price":1100,       "name":"fdgfgf"     }    ]  } 返回字段: name 房间名roomid 房间id 注:需先在小程序MP后盾创立直播房间,否则会报错(错误码1)cover_img 封面图片urlstart_time 直播打算开始工夫,列表依照 start_time 降序排列end_time 直播打算完结工夫anchor_name 主播名goods 商品列表live_status 直播状态   101: 直播中, 102: 未开始, 103: 已完结, 104: 禁播, 105: 暂停中, 106: 异样,107:已过期(直播状态解释可参考【获取直播状态】接口)5.【获取回放源视频】接口,仅供后盾调用 ...

August 18, 2020 · 1 min · jiezi

关于直播:微信小程序直播如何接入开源代码接入案例分享

小程序直播组件接入指引一、简介小程序直播,是微信提供给小程序开发者的直播组件。通过调用该组件,商家能够在小程序中实现直播性能。 按上面的应用阐明接入,在你的小程序中引入直播组件。 二、应用办法阐明1.【直播组件】如何引入版本限度:微信客户端版本 7.0.7 及以上(根底库版本 2.9.x 及以上反对同层渲染)能够观看直播及应用直播间的性能,低版本刚进入直播间时会提醒用户降级微信客户端版本(低版本只能观看直播,无奈应用直播间的性能)。 在分包内引入【直播组件】live-player-plugin 代码包,我的项目根目录的 app.json 援用,示例代码如下: {   "subpackages": [     {       "root": "packageA",       "pages": [         "pages/home/home"       ],       "plugins": {         "live-player-plugin": {           "version": "1.0.0", // 填写该直播组件最新版本号,微信开发者工具调试时可获取最新版本号           "provider": "wx2b03c6e691cd7370" // 必须填该直播组件appid,该示例值即为直播组件appid         }       }     }   ] } 2.【直播组件】如何应用按第1步的办法把组件代码包配置引入后,即可间接通过 链接地址跳转到直播组件页面(即为进直播间页面) 链接地址须要带上直播房间id;房间id可通过上面 【获取直播房间列表】 API获取,示例代码如下: Go to Live Player page 通过该链接可跳转到直播组件页面(以后页面入口仅凋谢‘live-player-plugin’)。 示例效果图如下: 三、其余相干组件、接口和携带参数订阅组件:subscribe获取直播状态API:getLiveStatus直播间到商详页面携带参数:room_id从群分享卡片返回直播间时携带参数:shareTicket后盾获取直播房间列表API后盾获取回放源视频API 注:以上2个后盾调用的接口总下限500次/天1.【订阅】组件性能解释:用户进入直播间内,可对一场未开播的直播进行单次订阅,开播时直播组件会主动下发开播揭示给用户, 无需开发者额定开发 组件应用:如果须要 在直播组件页以外小程序其余页面也有同样的开播揭示的性能,能够引入【订阅】组件subscribe;需在page页面(如home页面)的 home.json 援用订阅组件,示例代码如下: {   "usingComponents": {     "subscribe": "plugin-private://wx2b03c6e691cd7370/components/subscribe/subscribe"   } } 而后便可在home.wxml里应用订阅组件,其中直播房间id可通过;房间id可通过上面【获取直播房间列表】API获取 2. 获取直播状态接口接口阐明:首次获取立马返回直播状态,往后距离1分钟或更慢的频率去轮询获取直播状态 直播状态阐明: 101直播中:示意主播失常开播,直播失常的状态102未开始:示意主播还未开播103已完结:示意在直播端点击【完结】按钮失常敞开的直播,或直播异样15分钟后零碎强制完结的直播104禁播:示意因违规受到经营处罚被禁播105暂停中:示意在MP小程序后盾-控制台内操作暂停了直播106异样:示意主播来到、切后盾、断网等状况,该直播被断定为异样状态,15分钟内复原即可回到失常直播中的状态;如果15分钟后还未复原,直播间会被零碎强制完结直播107已过期:示意直播间始终未开播,且已达到在MP小程序后盾创立直播间时填写的直播打算完结工夫,则该直播被断定为过期不能再开播调用办法:若要调用【获取直播状态】接口getLiveStatus,需在小程序页面顶部援用【直播组件】live-player-plugin,示例代码如下: let livePlayer = requirePlugin('live-player-plugin') // 引入获取直播状态接口 // 首次获取立马返回直播状态,往后距离1分钟或更慢的频率去轮询获取直播状态 const roomId = xxx // 房间id livePlayer.getLiveStatus({ room_id: roomId }) .then(res => {   // 101: 直播中, 102: 未开始, 103: 已完结, 104: 禁播, 105: 暂停中, 106: 异样, 107:已过期    const liveStatus = res.liveStatus }) .catch(err => {   console.log(err) }) 3. 携带参数版本限度:直播组件版本1.0.1及以上反对携带以下参数 1) shareTicket:分享直播间卡片到微信群,点击此卡片后能够在 App onShow 里获取该参数 2) room_id:点击直播组件页面里的货架商品跳转到商家小程序的商品详情页面时,会带上房间号参数 4.【获取直播房间列表】接口,仅供后盾调用接口规定:该接口仅供商家后盾调用,调用限额500次/天,倡议开发者本人做缓存(此接口与上面 【获取回放视频】接口共用500次/天限度,请正当调配调用频次)。 申请URL:http://api.weixin.qq.com/wxa/business/getliveinfo?access_token= 申请形式:POST 申请示例: Request {  "start": 0, // 起始拉取房间,start=0示意从第1个房间开始拉取  "limit": 10 // 每次拉取的个数下限,不要设置过大,倡议100以内 } Response {  "errcode": 0, // errcode=0代表胜利;errcode=1代表未创立直播房间  "errmsg": "ok",  "room_info": [{   "name": "直播房间名",   "roomid": 1,   "cover_img": "http:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/Rl1RuuhdstSfZa8EEljedAYcbtX3Ejpdl2et1tPAQ37bdicnxoVialDLCKKDcPBy8Iic0kCiaiaalXg3EbpNKoicrweQ\/0?wx_fmt=jpeg",   "live_satus": 101,    "start_time": 1568128900,   "end_time": 1568131200,   "anchor_name": "李四",   "anchor_img": "http:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/Rl1RuuhdstSfZa8EEljedAYcbtX3Ejpdlp0sf9YTorOzUbGF9Eib6ic54k9fX0xreAIt35HCeiakO04yCwymoKTjw\/0?wx_fmt=jpeg",   "goods":[               {       "cover_img":"http://mmbiz.qpic.cn/mmbiz_png/FVribAGdErI2PmyST9ZM0JLbNM48I7TH2FlrwYOlnYqGaej8qKubG1EvK0QIkkwqvicrYTzVtjKmSZSeY5ianc3mw/0?wx_fmt=png",       "url":"pages/index/index.html",       "price":1100,       "name":"fdgfgf"     }    ]  } 返回字段: name 房间名roomid 房间id 注:需先在小程序MP后盾创立直播房间,否则会报错(错误码1)cover_img 封面图片urlstart_time 直播打算开始工夫,列表依照 start_time 降序排列end_time 直播打算完结工夫anchor_name 主播名goods 商品列表live_status 直播状态   101: 直播中, 102: 未开始, 103: 已完结, 104: 禁播, 105: 暂停中, 106: 异样,107:已过期(直播状态解释可参考【获取直播状态】接口)5.【获取回放源视频】接口,仅供后盾调用 ...

August 18, 2020 · 1 min · jiezi

关于直播:直播中那几秒延时到底来自哪

7月16日,亚太内容散发大会上,阿里云高级产品经营专家俞翔受邀缺席,并分享了基于CDN网络构建超低延时直播的场景实际。以下为演讲原文。 近几年,直播带货曾经逐步走进公众视线。在往年上半年受疫情起因影响,直播营销市场被减速催熟,这倒逼着企业摸索线上业务。传统高度依赖线下场景的行业也纷纷通过直播进行自救。“直播+”成为了趋势,不少商家利用直播平台与宽广消费者互动,发明了新的服务与经营模式。 在这个过程中,无论是游览、餐饮或者传统生产业,各行各业都会把直播作为新的营销伎俩触达最初的消费者。然而,与原来的秀场直播不同,电商直播过程中会面临更多挑战,如何把直播互动的环节做好,将观众和主播或者后盾的管理人员、经营人员串联在一起,至关重要。 提早让直播互动成果大打折扣从最后的秀场直播开始到明天为止,整个直播的链路基本上曾经实现标准化。主播在线下无论应用PC还是挪动手机,都是在本地通过客户端实现采集编码,并通过推流的模式到直播核心,再通过转码等媒体解决,通过云厂商CDN网络,再通过RTMP实时的计划或者用FLV、HLS的计划,最终传递到观众侧。 这个流程是单向的过程,间接从主播到观众。过程中的互动比方评论,是在音视频流以外的旁路实现的。 很多观众心愿跟主播有进一步的互动,比方音视频层面互动,延时就成了要害的制约因素。 咱们当初推流都是用到RTMP,拉流观看有用到RTMP、HLS或FLV,这三种协定延时的成果都是不同的。成果最好的是RTMP协定,也往往会因为各种起因会产生3-5秒钟的提早。这种体验对于直播带货来说能够是一种劫难,当主播介绍一个商品或者介绍某一项专门个性的时候,观众想提出问题,等到他提出问题,主播看到的时候,往返10秒钟了,这会重大打乱主播的思路与其余观众的体验感,甚至会升高成交率。 延时到底产生在哪里?在标准化的直播过程中,咱们来剖析整个链路的延时因素,从而寻找优化计划。 从最后的链路来看,采集、上行推流、CDN散发、上行拉流、解码渲染,都存在肯定的延时,而且比例不同。真正跟延时相干的从CDN散发开始往后到拉流到播放这段,这部分内容是真正影响到观众体验的局部。依据咱们对整个环节的延时起因的剖析,RTMP是基于TCP的协定包,抗卡顿是产生延时的次要起因。随着5G时代到来,视频分辨率回升到4K、8K的时候,高带宽要求可能会造成更大的延时。假如以后720P视频直播过程当中延时3-5秒,4K、8K的话兴许延时更大。 阿里云CDN团队对底层基础设施能力,包含对当下支流新协定进行剖析,心愿可能通过新技术栈利用来实现变道超车的作用。 阿里云对业界支流的WEBRTC、QUIC、SRT进行了多维度的技术预研及利用剖析。 下图是各个协定的阐明: 阿里云最终抉择联合WEBRTC技术进行了低延时直播的摸索实际,心愿可能将用户带入到低延时的时代。 如何进入低延时直播时代?如下图所示,视频直播的基础设施是笼罩寰球的CDN基础设施与CDN智能调度零碎。右边局部是技术现状,右侧是咱们心愿达到的成果。从通信协定再到下面流媒体层面做一些改良,从TCP协定间接迁徙到UDP,UDP在卡顿方面有很大的晋升,进一步确保实时交互体验。阿里云CDN心愿可能把当初RTMP、FLV、HLS协定转化为WEBRTC协定,从而更好地满足主播和观众互动的需要。 基于这样的架构,阿里云曾经推出了一个产品——低延时直播RTS(Real-time Streaming),它是在视频直播的根底上,提供具备CDN高性价比,又能满足大规模并发的低延时直播。 作为视频云基础设施,阿里云可能为企业提供一套残缺的端到端直播解决方案,下图就是整体架构: 第一,改良推流端及拉流端SDK,满足云端协定栈的降级优化。 第二,复用云端基础设施能力。将视频直播过程中所需的编解码、录制等性能连续复用。 第三, 与原有的一般直播联合。计划能够反对用户很轻松地把低延时直播和根底直播、互动直播、视频AI能力有机联合起来。 在此架构根底上,阿里云CDN针对直播互动场景,进行了一些优化: 第一,优化网络架构。CDN是一种边缘节点的状态,将阿里云的CDN网络从之前反对RTMP协定降级成为WEBRTC,从传统的流媒体协定变成了实时传输协定,实现CDN网络局部的降级。 第二,提供一种推流两种拉流组合计划。计划容许用户开启两个模式:一是很不便把以前RTMP协定持续兼容上来。二是间接开明WEBRTC低延时能力,对于用户来讲不须要做很多工作,集成一个SDK就能享受这个能力。劣势是能够间接兼容现有的推流形式,尤其是业余设施。 第三,全链路低延时监控工具。可能对实时的网络链路进行监控,并提供针对性优化计划,这对直播体验的保障非常要害。从整个成果来看,播放延时根本缓冲在1秒钟左右,有很大的改良。 第四,凋谢的协定信令。为便于客户自行开发拉流播放器,阿里云CDN也凋谢了上行节点反对WEBRTC协定将直播流从阿里云直播零碎拉取,客户端让用户自主可控,疾速搭建本身业务状态。 阿里云低延时直播产品的个性及利用案例总结起来,阿里云CDN基于现有网络进行优化改进,对于整个低延时直播场景具备以下六个个性: 第一,低延时。具备毫秒级延时,抗弱网能力。通过测试验证,雷同卡顿率下延时升高80%; 第二,无缝迁徙。连续直播RTMP推流,不扭转原有架构,仅需端上更新SDK; 第三,简略易用。功能丰富易接入,直播、点播、转码、截图、录制、平安审核等多场景性能; 第四,大规模高并发。阿里云CDN具备遍布寰球的2800+边缘节点劣势,离主播和观众更近,能够反对百万级推流,千万级并发拉流播放; 第五,成熟稳固。禁受电商业务大规模线上测验的真正能落地的产品,电信级QoS; 第六,凋谢规范。凋谢WebRTC信令协定对接,客户端用户自研自可控。 俞翔认为:尽管低延时直播可能会带来少许成本增加,然而好钢用在刀刃上。尤其是在特定的场景中,低延时直播的价值会被无效放大,比方电商直播、教育直播、体育或者拍卖直播。 阿里云低延时直播产品曾经围绕电商和教育两个直播场景有了较好的落地。 第一是淘宝直播,基于超低延时直播产品,淘宝直播端到端的提早升高85%,卡顿率升高20%,更好的互动体验也让领取UV和GMV失去了相应的晋升。第二个是在疫情期间的在线教育课堂,在线教育平台上存在一个场景,当100个学生在线观看,而只有3-4个学生发问互动,如果纯用WEBRTC技术的话,首先资费比拟高,其次技术架构比较复杂。在采纳了阿里云低延时直播产品之后,就能够解决以上问题,实现少部分学生的晦涩互动的同时,也把互动课堂在线上面向于成千盈百的学生进行播放,对于整个在线教育机构老本节约,给教育课型转型带来了很大的帮忙。

July 21, 2020 · 1 min · jiezi

关于安防摄像头RTSPOnvif协议视频流媒体服务器EasyNVREasyDSS获取指定时间段录像接口的使用介绍

背景需求随着雪亮工程、明厨亮灶、手机看店、智慧幼儿园监控等行业开始将传统的安防摄像头进行互联网、微信直播,我们知道摄像头直播的春天了。将安防摄像头或NVR上的视频流转成互联网直播常用的RTSP、RTMP、HTTP-FLV、HLS等流格式再分发给用户端进行直播,不管身处何地都可以通过移动通讯设备查看监控设备,这些功能是EasyNVR互联网直播系统研发和设计的初衷和基础功能。另外EasyNVR增值功能是可通过接口二次集成在自己的原有的web业务系统实现网页、H5无插件实时直播。 关于EasyNVR、EasyDSS获取指定时间段录像接口使用介绍分析问题EasyNVR、EasyDSS都支持自身进行视频录像存储的功能,获取视频流进行存储,存储的方式是将视频以ts文件的形式进行视频存储,这样方便后续的全终端无插件播放。为了方便客户使用和满足客户对于录像的使用需求,这边也支持获取指定时间段的录像。 接口使用说明/api/v1/record/video/:operate/:id/:starttime/:endtime “/api/v1/record/video”:对应的接口分组,保持不变; “operate”:使用功能参数;调用操作 play:播放 download下载,可选值play,download; “id”:需要获取录像的通道号; “starttime”:需要获取录像时间段的开始时间 “endtime”需要获取录像时间段的结束时间 以此时间段做说明:2019/10/23 15:40:00-------2019/10/23 17:40:00 20191023154000----------->录像开始时间点:2019/10/23 15:40:00 20191023174000----------->录像结束时间点:2019/10/23 17:40:00 播放示例http://localhost:10800/api/v1/record/video/play/1/20191023154000/20191023174000 下载示例http://localhost:10800/api/v1/record/video/download/1/20191023154000/20191023174000 成访问接口展示接口工具错误说明,传递参数错误或者是视频文件,通道号选择,或者是对应时间段没有录像文件存在。 成功说明 原因分析通道一对应的时间段没有录像存在。

November 5, 2019 · 1 min · jiezi

RTSP安防网络摄像头海康大华硬盘录像机网页无插件直播方案EasyNVR出现操作和画面显示不一致问题如何优化

诞生背景EasyNVR可以将局域网/广域网上的海康/大华等网络摄像头由rtsp转换为rtmp、rtsp、hls、flv协议转换,并提供推流服务,可以将拉到的网络摄像头直接转发到流媒体服务器。完美对接目前主流的阿里云/百度云/乐视云等等流媒体服务器。 EasyNVR出现操作和画面显示不一致问题EasyNVR进行视频控制的同时出现操作和画面显示不一致问题是什么原因? 分析问题通常会遇到这样客户问题:客户端通过点击使用控制按钮来控制设备进行聚焦转动等控制,点击按钮发现画面没有及时根据操作出现转动或者是延时一段时间出现画面变动。 解答问题针对这个问题我们需要了解到,虽然视频直播和控制都是EasyNVR来统一进行控制操作的,实际是视频直播是通过EasyNVR流媒体来进行分发直播的,而设备的转动控制则是由onvif库来和具体的摄像机来进行交互实现控制的。 这就可以明显的发现,控制命名只要成功的发送给设备,设备就可以根据发过来的指令进行对应的动作,一般第一时间就会出现对应的动作。但是,视频直播则是由流媒体拉流,再进行分发操作。同时视频采集,网络传输,客户端界面播放等环节都会导致视频延时的出现,这就导致了操作的动作的画面没法第一时间再播放器展示出来。 操作和画面的不一致实际上就是视频的延时,具体需要从上述的三个环节优化,来减小视频延时,以此来达到更好的用户操作体验。

November 5, 2019 · 1 min · jiezi

前端面试每日-31-第169天

今天的知识点 (2019.10.02) —— 第169天[html] 什么是Data URI?[css] 你了解css3的currentColor吗?举例说明它的作用是什么?[js] 说说你对ArrayBuffer的理解!它和Array有什么区别?[软技能] 你有做过直播相关开发吗?知道它的原理吗?《论语》,曾子曰:“吾日三省吾身”(我每天多次反省自己)。 前端面试每日3+1题,以面试题来驱动学习,每天进步一点! 让努力成为一种习惯,让奋斗成为一种享受!相信 坚持 的力量!!!欢迎在 Issues 和朋友们一同讨论学习! 项目地址:前端面试每日3+1 【推荐】欢迎跟 jsliang 一起折腾前端,系统整理前端知识,目前正在折腾 LeetCode,打算打通算法与数据结构的任督二脉。GitHub 地址 微信公众号欢迎大家前来讨论,如果觉得对你的学习有一定的帮助,欢迎点个Star, 同时欢迎微信扫码关注 前端剑解 公众号,并加入 “前端学习每日3+1” 微信群相互交流(点击公众号的菜单:进群交流)。 学习不打烊,充电加油只为遇到更好的自己,365天无节假日,每天早上5点纯手工发布面试题(死磕自己,愉悦大家)。希望大家在这浮夸的前端圈里,保持冷静,坚持每天花20分钟来学习与思考。在这千变万化,类库层出不穷的前端,建议大家不要等到找工作时,才狂刷题,提倡每日学习!(不忘初心,html、css、javascript才是基石!)欢迎大家到Issues交流,鼓励PR,感谢Star,大家有啥好的建议可以加我微信一起交流讨论!希望大家每日去学习与思考,这才达到来这里的目的!!!(不要为了谁而来,要为自己而来!)交流讨论欢迎大家前来讨论,如果觉得对你的学习有一定的帮助,欢迎点个[Star] https://github.com/haizlin/fe...

October 2, 2019 · 1 min · jiezi

前端面试每日-31-第124天

今天的知识点 (2019.08.18) —— 第124天[html] HTML5规范将元素分为哪几个大类?分别说说它们的特点[css] 举例说明伪类:nth-child、:first-child与:first-of-type这三者有什么不同?[js] 如何实现文件拖动上传?[软技能] 你有开发过弹幕吗?知道它的原理吗?说说看项目地址: 前端面试每日3+1 【推荐】欢迎跟 jsliang 一起折腾前端,系统整理前端知识,目前正在折腾 LeetCode,打算打通算法与数据结构的任督二脉。GitHub 地址 微信公众号欢迎大家前来讨论,如果觉得对你的学习有一定的帮助,欢迎点个Star, 同时欢迎微信扫码关注 前端剑解 公众号,并加入 “前端学习每日3+1” 微信群相互交流(点击公众号的菜单:进群交流)。 《论语》,曾子曰:“吾日三省吾身”(我每天多次反省自己)。 前端面试每日3+1题,以面试题来驱动学习,每天进步一点! 让努力成为一种习惯,让奋斗成为一种享受!相信 坚持 的力量!!!学习不打烊,充电加油只为遇到更好的自己,365天无节假日,每天早上5点纯手工发布面试题(死磕自己,愉悦大家)。希望大家在这浮夸的前端圈里,保持冷静,坚持每天花20分钟来学习与思考。在这千变万化,类库层出不穷的前端,建议大家不要等到找工作时,才狂刷题,提倡每日学习!(不忘初心,html、css、javascript才是基石!)欢迎大家到Issues交流,鼓励PR,感谢Star,大家有啥好的建议可以加我微信一起交流讨论!希望大家每日去学习与思考,这才达到来这里的目的!!!(不要为了谁而来,要为自己而来!)交流讨论欢迎大家前来讨论,如果觉得对你的学习有一定的帮助,欢迎分享! 项目地址: 前端面试每日3+1

August 18, 2019 · 1 min · jiezi

极客时间从0打造音视频直播系统课程返现-学习笔记

关注有课学微信公众号,回复 直播 获取购买《从0打造音视频直播系统》极客时间专栏地址,购买成功后提交购买截图即可获得返现,另外送 《从0打造音视频直播系统》专栏学习笔记,待学习笔记更新完成送统一通过微信公众号发放。 《从0打造音视频直播系统》专栏作者为李超,新东方音视频直播技术专家,前沪江音视频架构师。 可以预见在未来两三年内,随着 5G 的到来,类似目前常见的抖音、微信短视频、娱乐直播、教育直播、音视频会议音视频技术会是大势,也必定会像当年移动互联网一样出现井喷的人才需求,音视频人才会成为新的宠儿。面对这样的机遇,你若能掌握音视频技术的核心技术,一定可以在未来职场上获得丰厚的回报和满满的成就感。专栏分为 3 大模块 WebRTC 1 对 1 通话主要讲解如何在浏览器间实现 1 对 1 通话,比如一个人在北京,另一个人在上海,他们打开浏览器进入同一个房间后,就可以进行音视频通话了。这一模块精编了环环相扣的 22 篇文章,每篇文章对应一个实现 WebRTC 1 对 1 通话的主题。也就是说,这 22 篇文章是可以串联为一个即学即用的 1 对 1 实时通话的例子。WebRTC 多人音视频实时通话主要探讨如何实现多人音视频实时互动。首先为你介绍几种多人音视频实时互动的架构,以及它们的优劣;然后,再重点讲解如何使用 SFU 架构实现多人音视频实时通话(SFU 是现在最流行的多人实时互动架构)。学完本模块内容后,你就可以亲手实现多人音视频实时通话了。支持上万人同时在线的直播系统重点介绍 CDN 原理、RTMP、HLS 协议,以及如何使用各种播放器从 CDN 拉取媒体流。其中,CDN 是支持上万人同时在线直播系统的主要技术,而 RTMP 和 HLS 是其使用的底层传输协议。学完本模块内容后,你就会清楚地知道上万人同时在线直播的原理,并可以自己实现一套这样的直播系统。

July 15, 2019 · 1 min · jiezi

继-多闪后飞聊再被diss其实社交还能这么玩

近日头条低调上线了新的社交APP——飞聊,目前在AppStore社交排行榜第7位。但很多人使用了之后都觉得新产品的各个功能都让人想起其他的产品。兴趣小组让人想到豆瓣的兴趣小组,生活动态让人想到微博动态,聊天中的语音文字同步发,让那个人想到子弹短信。一时间,“飞聊”是一个社交功能合集成了许多人对它的第一印象。为什么即使市面上已有很多较成熟的产品,头部大厂BAT都投身其中,头条还是在“多闪”效果并不理想的情况,继续押注社交?或许数据能为我们窥探一二,从艾瑞咨询的数据来看,虽然社交时长收入的增长率放缓,但预测实际可带来的来的收入不可小觑,预计在2020年将会达到2716.4亿。社交这块大蛋糕,大家都想分一块。 集多种功能为一体的产品虽然能快速让用户因某个功能聚集起来,但现在的用户在社交上有太多的选择,随时会因为新鲜感不在而离开。而社交是个万金油,搭配其他的功能、玩法,就能产生新的产品甚至一个新的商业化模式。或许我们来回顾一下现有的社交+玩法,会得到一些灵感。 社交+电商 变身带货达人在社区内容型社交产品都会有一些头部“网红”用户,在前期累积了较多的粉丝,在用户群中形成了一定的风向标。从小红书的种草达人林允,到抖音口红一哥李佳琪。在巅峰时期,他们随便一个推荐,第二天专柜可能全部断货。如何创造这些头部用户是实现商业化的第一步,而反观这些带货明星他们都有一些重要的特征:1、明显独特的人物特征,林允作为明星却经常推荐一些平价商品,李佳琪作为男性却做的是口红试色,他们在社交平台上都有自己独特的人物特征,与他们的创作内容紧密相关;2、持续不断的同类内容输出,增强人物特征。这两位种草达人几乎每天都有内容产出,而每天输出的内容也基本都是同一类的。这些内容每天都在吸引新的粉丝,同时每天都在对老粉丝进行留存提示,紧紧抓住了粉丝的忠实度;3、接地气的亲身示范,通过自身试用,并将试用感受反馈给粉丝,提升了粉丝对推荐产品的信任感,加速了种草到下单的速度。通常这类社交平台会结合内容做商品推荐,将商品链接放在内容同一页面,完成了分享——种草——下单的流程。路径步骤简洁,一定程度上提升了有效转化率。 社交+定制服务 更尊贵的VIP体验婚恋是社交中目标较明确的场景,婚恋市场渗透率也持续保持增长。同时大数据、云计算等技术的发展和移动端服务的提升,婚恋从线下转到PC转到移动端,预计2021年网络婚恋市场规模将达到72.7亿(数据来自艾瑞咨询)。在婚恋APP中,用户想要有更详细可靠的异性会员资料,甚至个人定制化服务,这些差异功能就生产出了会员概念,而会员费成为婚恋线上平台的主要商业模式。随着视频功能发展,婚恋平台上也多了很多玩法,如直播交友,1V1视频通话,互动小游戏,这些新玩法也带来了增值服务的商业化。 社交+直播 下沉的网络主播在线直播受到短视频等其他平台的兴起,在活跃趋势上有所下滑,但根据城市TGI指数看,直播用户下沉到了四、五线城市中,在下沉用户中对直播还是存在较强的需求。(数据来源TalkingData)直播根据互动性简单分为弱互动直播阶段和实时互动直播阶段,在每个阶段上也拓展了不同的商业模式:弱互动直播阶段:1个房间+1个主播+n个观众,主播表演才艺,调节气氛,观众给主播送礼物,发个文字调戏一下,互动性较弱,大部分处于观看主播表演中。这一阶段购买礼物是主要的商业模式。实时互动直播阶段:1个房间+1个主播+n个观众+n个连麦,在这一阶段多了连麦的角色,即有观众可以通过连麦直接和主播互动,大大增加互动性,同时也增加了新的玩法,比如PK,抢麦等。这一阶段新玩法带来了新商业模式——付费抢麦。在实时互动阶段中,用户对直播清晰度,实时性的要求也越来越高,这对APP的技术能力也有较高要求,大部分APP运营方会接入类似云信这一类技术服务商来保障稳定流畅的技术支持。欢迎与我们沟通交流更多的场景建设及技术解决方案。 想要阅读更多技术干货、行业洞察,欢迎关注网易云信博客。了解网易云信,来自网易核心架构的通信与视频云服务。 网易云信(NeteaseYunXin)是集网易18年IM以及音视频技术打造的PaaS服务产品,来自网易核心技术架构的通信与视频云服务,稳定易用且功能全面,致力于提供全球领先的技术能力和场景化解决方案。开发者通过集成客户端SDK和云端OPEN API,即可快速实现包含IM、音视频通话、直播、点播、互动白板、短信等功能。

July 2, 2019 · 1 min · jiezi

技术详解实现互动直播全过程

本文主要整理互动直播中各端的逻辑,重点是与前端相关的教师端IM的部分和Web/Wap学生端。希望通过这份整理,对于前端在维护时可以尽快的理解互动直播的流程,提高项目的可维护性;对于客户端和教师端来说,可以了解到前端提供的接口和消息的实现。也能提高对整个请麦过程的理解,便于联调和后期的定位问题。 相关阅读推荐《连麦互动直播方案全实践1:什么是连麦互动直播?》《连麦互动直播方案全实践2:网易云信连麦互动直播方案的演变过程》《连麦互动直播方案全实践3:网易云信连麦互动的实现方案》 概 况互动直播涉及到服务端,教师客户端,iOS/Android学生端,Web/Wap学生端。本文重点介绍的是请麦的交互流程,前端请麦模块的设计,前端互动和聊天组件的设计。对于聊天室本身的聊天功能的实现,因为接入云信IM SDK,主要是通过Api调用封装实现的,就不细说了。在设计系统之前,首先需要考虑以下几个问题:• 各端的需求定义以及功能划分,各端如何交互• 各端之间的协议• 客户端请麦与教师端接收• 客户端进入互动直播房间后互动信息的同步带着以上几个问题,我们先整理一下可以依赖的的服务,通过网易云提供的以下服务如下图所示,结合自有系统的需求设计,让我们能迅速集成IM和互动直播的功能。• 云信IM服务提供了一整套即时通讯基础能力,可以将即时通讯、实时网络能力快速集成至企业自身应用中。• 云信的互动直播功能,支持主播和观众实时连麦互动。 架 构我们的基本需求主要是以下三部分: 学生在App客户端进入聊天室,可以发起请麦;在教师端可以对学生的请麦进行同意或拒绝的处理;在教师同意某位学生的请麦后,这位学生可以进入直播间进行互动。结合需求整理出以下的基本请麦,连麦,互动的流程, 如下图,不同样式的数据流向代表不同的协议。 这里有几个概念补充介绍一下:1、客户端云信IM的SDK,客户端通过云信IM发送P2P消息到教师端2、客户端互动直播SDK,客户端接入互动直播3、教师端云信SDK,接受p2p消息4、教师端互动直播SDK,与客户端直播互动5、Web端云信IM的SDK,发送接收消息6、自定义消息,各端发送信息的数据结构 设计与实现实现这节主要介绍上一节概述中提到的教师客户端 ,Web/Wap学生端的实现。主要包括以下几部分:流程细化、教师IM模块、Web学生端模块、配置、优势、存在的问题。 流程细化 先来介绍一下教师端的实现,按照下图中的标号顺序,对其中的一些细节做补充说明。教师端主要有两部分,一部分是native,本文中称为教师端native,另一部分是Web页面,本文中称为教师IM。教师端native和教师IM通过jsbridge以及自定义消息进行通信。首先,整理一下教师端native与教师IM通信的jsbridge如下: notifyQueueChangenotifyVolumenotifyCustomMsgcheckUpdatenotifyLiveStatus结合以上的流程图,再对流程进行一下细化说明:1、客户端初始化各端通过请求服务端获取统一的聊天室地址2、教师端初始化教师IM,在初始化后,通过服务端请求(getPresenterLiveInfo),获取聊天室地址,取得聊天室单例,通知教师端native聊天室就绪,获取互动直播数据。3、请麦的过程• 客户端发送p2p消息到教师端native,教师端native通过jsbridge, 调用教师IM的notifyCustomMsg,教师IM更新自身维护的请麦请求等待队列。• 教师IM点击同意或拒绝,通过消息通知教师端native,教师端native通过P2P通知请麦的客户端• 客户端通过互动直播SDK,连麦进入直播间,通过互动直播SDK发送消息给教师端native• 教师端native调用notifyQueueChange方法,更新教师IM中各列表• 教师IM,异步请求(informServer)更新服务端上下麦队列,发送自定义消息(im-sdk),广播通知各客户端。 教师IM模块结合流程图以及上面的流程细化说明,对前端的模块进行设计和拆分,如下图。 这里的LivePcChat是Tab中的聊天组件,LiveInteractivePresenter是处理互动操作的组件,XXcache是封装对应数据层操作的组件。具体的组件实例,调用,数据请求和处理的过程,如下图所示的时序图: Web学生端模块对于Web/Wap学生端,因为Web/Wap学生端本身还未开发请麦的功能。这里以Web学生端为例介绍一下Web/Wap学生端在互动列表和聊天互动中的实现。本身聊天室部分与教师端的聊天室是复用聊天组件的,因而这里也先把模块划分一下。可以参考教师端的组件划分,对比一下教师端和学生端复用的部分组件,下图是web学生端的组件拆分。 从下表的对比可以看到,除了请麦相关的处理逻辑,教师端IM和Web学生端在IM的其他功能是可以复用的。 配置互动直播是在原来的直播基础上做的迭代,所以这里要保证互动直播在教育各产品线的可配置性。这里所说的配置与教育公共组件池其他的模块和组件接入的配置类似,也是依赖于教育通用组件cache-base,通过在直播页面或者工程单页加载时(机构后台),读取config中的配置,一键配置。 优劣分析采用这套设计的优点是1、所有的服务端请求都是通过web页面发送,减少教师端维护的成本;2、模块的可配置性,在不同的业务线,可以通过配置来决定是否接入互动直播;3、组件颗粒化,在不同的模块中,教师端可以接入聊天组件和互动组件,请麦组件,学生端可以只接入互动列表组件;4、最大程度的依赖了现有的云信sdk实现的功能,能在较短的时间实现需求。 存在的问题1、请麦的流程比较复杂,因为涉及到多端,各端调试比较浪费时间,这也是整理此文的目的。在打通对各端流程的认识后,各端在调试中都能首先定位到出问题的端,然后才能有的放矢的在某一个环节中发现问题。2、因为是在原来的迭代基础上进行的,很多组件没有封装成教育规范的组件,不过逻辑清晰的前提下,可以在后面的迭代中优化掉。3、优化前端实现的方法。 总 结通过本文整理一下互动直播中各端的逻辑,便于后期接入对互动直播流程的理解。对客户端和教师端来说,可以了解到前端提供的接口和消息的实现。如果在后续另外的工程中,需要接入互动直播模块,能够快速的接入和调试,同时可以就以上提出来的存在的问题做进一步优化。 另外,想要获取更多产品干货、技术干货,记得关注网易云信博客。

June 26, 2019 · 1 min · jiezi

网络视频直播平台,系统开发模式分析

在线视频直播系统形式从内容和功能上具备的多样化为个人主播、企业都提供更多的流量变现机会,直播行业从某个方面来说既推动了智能手机性能发展,也推动了互联网市场发展方向。目前短视频直播模式掀起了全民直播的帷幕,社交领域融合的直播在线系统更多聚集在抢夺高流量IP资源上,根据下文我们来看看各个模式的发展趋势及其分析。网络视频直播平台,系统开发模式分析1、短视频手机直播系统形式从短视频发展而来的视频直播平台形式,允许用户使用手机进行直播,人人都可以成为视频直播平台传播者,拉开了全民直播的时代帷幕。采用在线直播系统形式,用户可以把自己的所见所闻实时传送到网络直播平台,以新鲜的内容抢夺眼球。另外,用户还可借助直播形式进行产品推广与宣传,吸引其他人前来消费,从而完成变现。2、网络直播平台企业争夺大流量IP竞争激烈在网络视频直播系统时代,各个参与者都将IP资源作为竞争重点。如今,互联网在越来越多的领域得到应用,其影响范围也逐步拓宽,“互联网+”行动进一步展开,成为互联网渗透作用的表现。随着发展,无论是投资者还是经营者,都越来越重视“个体”的重要性,而不是仅聚焦于行业层面。对进军网络视频直播平台领域的企业而言,现阶段最关心的就是怎样使自己的直播获得网民的认可与支持,提高用户黏度。因此,网络直播参与者之间的比拼,大都集中在对于IP资源的竞争上。以往,企业间的竞争焦点集中在客户资源的抢夺上,而在互联网时代下,企业间的较量则以IP资源为抢夺为主,对企业而言,要想在激烈的市场竞争中获得生存与发展的机会,就要采取有效措施,吸引更多用户的关注。在与IP资源的抢夺为主,对企业而言,要想在激烈的市场竞争中获得生存与发展的机会,就要采取有效措施,吸引更多用户的关注。在网上直播平台IP资源相关的竞争中,越来越多的人聚焦于以内容为中心开展运营的视频直播形式,与此同时,直播对参与者的要求并不高,为很多普通人提供了展示自身才华的平台。近年来,直播形式快速崛起,促使很多经营者将线上渠道作为自己的重要阵地,并将竞争重点放在网红经济与直播领域。视频直播+社交属性应用广泛1、在线视频直播系统具备的差异化优势与社交形式相比,活动直播系统具有显著的差异化特点,它能够有效缩短用户之间的距离,使彼此之间的交流更加顺畅。伴随着信息技术,尤其是互联网的高速发展,网络直播平台在社交领域的应用受到大批用户的追捧,并迅速推广开来。2、网络直播社交系统为企业助力随着直播软件应用范围的扩展,互联网巨头也认识到该领域的发展潜力,纷纷进军视频直播行业,促使更多企业聚焦于直播行业的发展。3、社交直播软件多元化趋势在移动互联网时代下、微信、微博等各类社交软件涌现在市场上,社交形式由传统模式下的单一走向多元,网络直播平台作为不同于传统模式的社交形式,可能颠覆传统的社交模式。这个并不是空穴来风,是已经形成当下互联网风口的,为什么这么多企业老板纷纷转行投入直播系统,就是看到里面的红利所在,想在风口赶来之前分一杯羹。网上直播系统打击传统图文传播方式网络直播系统形式能够使内容表现形式更为形象生动,传统模式下,图片与文字是内容传播的主要载体,相比之下,直播的优势身份突出,用户采用直播形式,不但可以实现基本的信息传递与推广,还能及时与对方进行互动,方便对后续的信息补充与说明。网络直播系统开发带来了行业持续性改革与升级为用户带来诸多便利,能够使用户从更加全面、直观的角度认识其他人或者对方推荐的产品。相比于传统模式下的单一的产品推广形式,视频直播方式允许互动双方根据现场情况进行实时问答,彼此之间可通过丰富的语言、手势乃至表情进行信息传递,使社交变得更加立体直观。原创文章作者:数商云,转载请标注来源

March 29, 2019 · 1 min · jiezi

带你脱离视频测试的坑

本文由云+社区发表作者:腾讯云视频小编这次分享主要是视频相关的专项测试,音频相关的暂不涉及。我们直接切入正题,关于视频通话质量对比,需要一些对比项,这里是从以下5个方面进行数据对比:码率、帧率、分辨率、清晰度、时延。接下来我分别介绍一下这5个方面。▽码率数据传输时单位时间内传送的数据位数,单位是kbps,即千位每秒。码率越高对应着传输能力越强,视频精度会越高。帧率帧率是用于测量显示帧数的量度,简称fps。每秒的帧数表示处理器处理时每秒钟能够更新的次数,高的帧率可以得到更流畅、更逼真的动画。分辨率/清晰度这个两个指标代表着视频画面的清晰程度,越高的话,给用户的画面就越清晰,用户体验会越好。清晰度的单位:LW/PH时延即实时性,简单来说就是两个人通话,本端说了一句话,对端需等待一段时间才能收到。单位一般用毫秒(ms)表示。介绍完这些指标,接下来切入正题,这些数据在手机上,如何获取。首先,在双人视频通话连接好后,在非纯净态画面顶部会出现名字,在名字上点击5下,会弹出一段log,这个log是开发为了好分析问题所特意加的,这里面就包含了我们所需要的3个数据,分辨率,帧率以及码率。双人视频通话log红色框框里面的即为我们要的3个数据,需要看本端的分辨率,码率,帧率,则需要找到Enc这个字段(Enc代表编码端,即本端;Dec代表解码端,即对端),后面对应的依次为分辨率,码率和帧率。测试时,需要等待视频通话稳定一段时间,取的数据才有意义,取最大、最小值都意义不大。视频通话分别率刚开始可能会低一些,等网络稳定后视情况,应该会增加分辨率,所以取的分辨率需要等稳定后再取。帧率和码率也一样,稳定后取平均值。上面说了手机APP分辨率、码率、帧率的测试方法,接下来说一下时延和清晰度。视频清晰度,本该用一个动态的视频进行分析,这里由于条件有限,采取的是等视频稳定后,互相截图,然后用专业的清晰度计算工具,算出图片的清晰度值,我们认为这个值就是该机型视频通话的清晰度。视频专项测试方法视频清晰度测试方法具体操作如下:在音视频实验室,有专门的设备。两台手机视频通话后,一台手机切换至前摄像头,点出log后,放在架子上,另一台手机关掉本端摄像头;架子上的手机分辨率稳定后,另一端手机直接截图,这张图就是用来计算架子上的手机的分辨率的。有专门的计算工具Imatest进行计算,计算方法这里就不展开来说了。两部手机对调,就可以互相取得分辨率了。这里有个问题,即清晰度计算软件是和截图的质量也有关系,不同机型互测的时候,截图效果也是不一样的,这里是有可能会影响清晰度的最终计算结果的,这里还没有想到比较好的解决办法;但同机型互通则不存在该问题。时延测试方法电脑上打开一个在线秒表,开始计时后。两台手机固定在屏幕前,通话后,稳定一段时间后,拿起第三部手机拍照,即是时延,这里拍照15次,计算差值后取平均值,即为时延。到此,手机APP五项性能数据测试方法就全部介绍完成;接下来介绍同类型的产品视频通话,这5项数据需要如何获取。想要得到码率、帧率、分辨率这些数据只能通过一些其他方法。▽01首先是码率,这里需要抓包看。准备mac机,确保mac机上有Xcode,手机连上mac后,打开Xcode后,点击window-Device and Simulators,找到identifier,后面的设备标识复制一下,看这里02打开mac机的cmd,输入rvictl -s 手机标识,回车后即可,此时输入rvictl -l,即可查到已添加的设备。03打开Wireshare,找到rvio端口,双击后,进入rvio端口,点击Statistics-I/O Graph。04里面需要调整一下参数,就可以出现对方码率了,首先要先添加一行参数,即上图左下角的“+”号,点击“+”号后,在Enabled打上勾,然后Graph Name修改一下,Y Axis改成Bits,Interval改成1 sec。最后就要修改一下Display Filter,这个参数是用来过滤的,当你需要获取连着电脑的这部手机的码率是,你需要输入ip.src==X.X.X.X and udp;当你需要获取对端的码率时(即非连接mac的那台手机),需要输入ip.dst==X.X.X.X and udp。此文已由腾讯云+社区在各渠道发布获取更多新鲜技术干货,可以关注我们腾讯云技术社区-云加社区官方号及知乎机构号

March 4, 2019 · 1 min · jiezi

一块听听:Mixin 主网上线语音直播文字稿

本文是在一块听听上的语音直播的文字精简版。Mixin Network的成绩,主网和展望大家好,我是Mixin Network 的李林。非常高兴能在这里跟大家分享一下Mixin Network。第一次做语音直播,很紧张,难免会讲错,如果有错,请大家指出来,我努力改正。今天会讲4个主题mixin 是什么主网启动的一些细节,主网上线之后的计划。我个人关于mixin和比特币闪电网络的思考Mixin Network 是什么Mixin Network是一个面向数字资产的转账网络,转账免费,1秒到账。为什么要设计一个数字资产转账网络呢?这里首先我们先明确两个我们认为一定发生的事情:区块链经济一定会指数级别增长。从比特币的价格,到后来以太坊的ICO,ERC20代币,eos上的智能合约,波场的发展都得出这个结论。智能手机时代的用户需要一个快速,便宜的数字资产支付系统。大家体验过微信,支付宝的支付体验之后是回不去的来。现在看看现实情况:无论是比特币和以太坊,转账有转账费,而且比特币转账费很贵,而且到账时间很长。既然在现实和大趋势之间有巨大的鸿沟。这意味着谁能填平这个鸿沟,谁就有巨大的利益。因此,CEO冯晓东就决定做一个技术方案,这个方案的名字叫做Mixin,意思是链接一切数字资产。既然是面向大趋势设计的方案,不仅仅是免费和快速到账这么简单,Mixin还有一个设计目标就实现匿名支付。为什么支付要匿名?大家想一下你用微信在超市买个口香糖,你楼下的邻居肯定不知道。只有你,卖家,微信,银行才知道。其他人是无法知道你的购买记录的。这是大家的隐私信息,受法律保护。 但是比特币和以太坊在设计之初没有将隐私放在第一位,你把比特币转给谁,全世界都知道。 这对于消费者和商家来说太可怕了。因此我们将隐私加入我们的设计目标。因此我们的设计目标是转账免费,1秒到账,支付匿名,支持极多的资产。那么我们是如何实现的呢?验证一笔交易是否有效使用拜占庭和POS机制。不是POW,也不是DPOS。交易存储使用DAG(有向无环图)。Mixin里面不出块。使用了与门罗币一样的匿名交易机制(CryptoNote)。目前为止做到的成绩支持13个主链,比特币,比特现金,以太坊,以太坊经典,莱特币,达世币,狗狗币,EOS,瑞波币,USDT,Horizen, Nem, Sia, Zcash。在这13个主链本身还没有实现1秒到账的闪电网络之前,Mixin Network帮助他们实现了1秒到账,免费转账,匿名交易。支持基于比特币发的USDT和以太坊发的USDT支持基于以太坊发的16万9千2百27种erc20代币。以太坊上的ERC20代币目前是很靠谱的发币方式,缺点是以太坊上确认交易特别慢。那么只要你用Mixin Network,就能为你的代币用户提供免费转账,1秒到账,而且匿名交易。支持基于EOS发的3千2百98种代币。虽然EOS代币本身不如ERC20代币那么稳固,但是由于EOS确认交易比以太坊快很多,所以有些项目选了EOS发代币。但是EOS钱包需要质押资源才能用。这种设计让用户很不舒服:普通用户很难理解开户花钱,转账还花钱,昨天能转账,今天就不能转的逻辑。如果使用Mixin Network,那么EOS代币转账可以1秒确认,同时免费使用钱包,不需要额外抵押资源。目前Mixin Network上的主要资产有1100多比特币,1800多以太坊,130万EOS,150万USDT,110多万瑞波币,300多比特现金,不包括我们自己发的XIN token在内,有6千多万美金的资产。如果包括我们自己发的XIN token,资产总额超过1.3亿美金总计持有6万多种资产。总计发生了2亿笔交易,真实网络峰值达到了168。大家都知道一个区块链项目产品需要有开发者来做产品才有价值。针对开发者工作针对在mixin network初期就看好mixin并且义务为mixin提供开源SDK的作者提供了特殊贡献奖,每人50 xin token,价值7300美金。相关SDK资源在2018年末到2019年初举办了一次开发者大赛,吸引了全球的开发者。获奖团队来自全世界,第一名来自澳大利亚,奖金是300 xin token,如果获奖团队没有卖xin token,现在价值4万多美金。 作品是一个在安装在谷歌浏览器上的mixin 钱包。我们在春节前针对c sharp编程语言发布了SDK悬赏,被mixin 团队选定的作品可以获得50 xin token,目前价值7千多美金。在开源SDK的支持下我们还专门针对不同种类的编程语言提供了入门教程,现在入门教程已经覆盖了PHP, Nodejs, Python和Java go几种语言。如果你会编程,在mixin的支持下,可以30分钟搭建一个区块链应用。基于Mixin Network的应用Mixin 团队自己的产品Mixin Messenger这是一个通过记住手机号和6位数字密码就可以管理无限种资产的钱包。同时还是一个安全快速的聊天工具。用过比特币钱包,以太坊钱包和EOS钱包的朋友肯定知道一个东西叫做助记词,就是一堆没啥关联的单词,记住就好了。但是大家知道人类记忆是非常耗费能量的,特别是毫无关联内容的记忆。所以助记词基本上只能拍照,或者打印在纸上藏起来。最开始几天你肯定忘不了,但是过了1年你肯定忘了,如果你换手机或者不小心格式化电脑,你就再也无法动用你的钱。除了助记词,还有通过强密码保护的方法,就是通过组合使用数字,字母,特殊符号来保护钱包。但是这个密码太难记住了,如果你两个星期不用,就很容易忘记。会发现自己明明有钱,但是取不了。 我们认为这两种方案是给专业人士设计的。在智能手机时代应该有一个方便又足够安全的手机钱包这就是Mixin Messenger : 只要记住手机号和6位数字pin码就可以管理钱包,这和手机银行是一样的体验。 只要你有手机,安装我们的App,就同时免费拥有13种主链钱包,比特币,以太坊,eos,波场。这个钱包可以装下16万种以太坊ERC20代币,3千种EOS上的代币。就连你自己发的币都可以随意转入,转出,不用审批,来去自由。根本不用提交任何申请。Oceanone交易撮合引擎这是一个去中心化交易所引擎,可以交易所有在mixin network上的资产。我们工程师基于这个引擎搭建了一个完全自由的交易所,所有的Mixin network上的资产都可以自由挂单买卖。就是以太坊上发行的16万种资产你都可以自由的充值到你的mixin 账户,在交易所卖掉,同时永远不会丢币。因为交易完毕后资产就回到了你自己的账户而不是交易所账户。你自己发一个币也可以去交易所买卖,不需要审批,来去自由。开发者和社区作品我们的开发者也很给力,基于Mixin Network做了很多游戏,应用。充分的体现了Mixin Network的实力。包括 pressone,exinone,Fox等等。主网上线的细节:Mixin Network主网在北京时间2019年2月28日早上8点正式完成了上线。创世节点已经有15个, 分别来自bigone,eoslaomao,exin,ss,fox,candy以及Mixin Network技术团队。目前主网上线工作已经完成,正在把测试网上的资产迁移到主网上。Mixin的节点的选择过程成为Mixin Network主网节点的方法与EOS,波场 IOST等差别很大。成为Mixin Network节点不需要投票,只需要质押10000个XIN token,并且有一台服务器就可以,服务器费约一个月500美金。节点奖励Mixin Network在主网上预留了XIN token奖励池。每年会把奖励池中的十分之一拿出来奖励给节点。当然做Mixin Network节点是需要认真负责,如果节点故意做恶,那么节点质押的10000 token就会被主网没收。主网上线意味着什么Mixin Network真的是一个去中心化的区块链项目了。仅仅关掉一台服务器,关闭一个域名,或者团队跑路已经伤害不到Mixin Network了。冯晓东和Mixin Network团队是一个说到做到的靠谱团队。Mixin Network的很多决策将由开发团队和社区共同商议决定。mixin主网上线对mixin network来说只是一个起点。未来要做的工作技术开发方面继续开发工作,把技术细节完善并开源。支持更多的主流币种,目标是https://coinmarketcap.com上的…。升级交易所技术方案,形成交钥匙方案。Mixin Messenger会开发桌面版,成为全平台的钱包和聊天工具社区推广方面:将内容分发到其他非英语国家,包括日本,印尼,巴西,俄罗斯。Mixin Network的发展前景比特币和闪电网络Mixin Network也常常被人质疑为什么在比特币闪电网络已经存在的情况下还要做一个闪电网络。我们的答案如下:比特币有闪电网络,可是以太坊,dash,莱特币,狗狗币没有。一个帮助别的区块链实现闪电网络的区块链是有价值的。我们会发现,闪电网络这种业务场景是非常适合商业机构来运营。举个例子,比特币转账非常简单,有台手机,就可以生成比特币钱包,就可以收款,找到全节点就可以转账。但是比特币的闪电网络需要用户有一台随时可用的服务器才行。很明显闪电网络是牺牲了一部分去中心化特性的。其次闪电网络的到账时间是不固定的,可能大部分时间很快,3秒左右,少部分时候需要几分钟甚至几天。而且闪电网络基于安全原因没有办法支付太多的比特币,大额转账实现不了。这对于商业运营来说就很痛苦。尽管有这样的问题,但是闪电网络依然是一个非常优秀的技术发明。事实也证明了这个结论,现在比特币闪电网络已经持有700多个比特币。这个网站分享给大家,http://1ml.com/ 可以看到比特币闪电网络的进展。那么mixin作为一个1秒到账的通用闪电网络会如何发展呢?我认为在比特币转账市场上,Mixin Network和闪电网络会占据前三名。以太坊,莱特币其他币的转账市场上,mixin会成为第一名,并且占有超过50%的市场份额。Mixin Network靠什么赚钱我个人喜欢把Mixin Network比作一个商业运作的转账服务公司,通过为用户提供快速可靠的转账服务赚服务费。回想一下我们最初为什么做Mixin Network:区块链经济一定会指数级别增长。智能手机时代的用户需要一个快速,便宜的数字资产支付系统只要Mixin Network始终为客户提供优质的服务,占据足够的市场份额,就能够赚取足够多的钱,来回报持有Mixin Network。那么CEO 冯晓东和mixin开发团队是否擅长提供优秀的产品和服务呢?冯晓东和Mixin Network开发团队过去开发过的产品包括安卓系统的播放器内核,已经被一下科技收购,至今仍在服务很多app。手机游戏直播app也是在没有市场推广的情况下就能突破千万级用户。因此我们有充足的信心说,Mixin Network能实现自己吹过的牛逼。今天的我的分享到此结束。 ...

March 1, 2019 · 1 min · jiezi

云计算如何帮助直播行业发展

2016年被称为“直播元年”,那一年全网上百个直播平台出现,各路资本纷纷涌入,一时间直播这两个字就等于流量,就等于赚钱,尽管如今热度退去,但是直播已经是很大一部分人的生活组成。那么这样的大热概念需要什么样的技术支持呢?今天我们来聊一聊云计算和直播的因缘。支撑直播的云计算产品直播究其根本,是一种高并发下的视频流处理,将主播端录制的视频上传云服务器,处理后分发向数量庞大的用户终端,这中间需要使用到的云产品包括负载均衡、云服务器、云数据库和对象存储等。这些产品能支撑能确保终端用户网络质量不佳的情况下,自适应码率推流,提升速度;同时支持多路视频实施转码、录制、鉴黄服务;低延时直播,百万并发用户的视频分发和互动聊天也毫无压力。简单来讲用云服务器搭建直播平台,可以给用户和主播同时带来良好的使用体验。云上搭建直播平台的特点使用云计算技术搭建直播平台具有以下特点1、视频直播加速支持媒资存储、切片转码、访问鉴权、内容分发加速一体化解决方案;结合弹性伸缩服务,及时调整服务器带宽,应对突发访问流量;结合媒体转码服务,享受高速稳定的并行转码,且任务规模无缝扩展。2、快速视频解码多路码率实时转码输出;GPU转码有效支持百万级以上并发视频流转码、并轻松扩容;CDN边缘节点缓存直播视频流GOP,迅速填充移动端播放器缓冲区、快速视频解码,有效支持播放器秒开需求;窄带高清转码,有效节省带宽成本;视频流分离合成。3、安全防护高防网络:针对多媒体应用自身流量大、qps高的特点,定制安全策略防护各种 4 层、 7 层流量攻击,并提供安全专家服务优化策略;内容检测:提供文本识别、图片鉴黄、视频鉴黄、OCR算法、音频识别等技术手段,协助直播平台完成内容技审工作、显著提升审查的效率和准确度。4、APP安全通过App安全扫描、控制流混淆、关键逻辑加密等多级安全加固措施,规避App被逆向分析、协议层窃听等方式造成的攻击漏洞,保障App及与服务端交互的安全;防欺诈:通过海量风险库、及人机识别技术,有效辨别风险用户或机器模拟情况,避免垃圾注册、刷粉、刷奖品等恶意请求。5、数据安全基于情报库,以及入侵检测、撞库检测、恶意登录及操作识别、态势感知等技术,有效避免被拖库、撞库的数据泄露安全事故。6、直播监控播控中心支持直播视频流级别的监控,覆盖就近推流节点、视频中心、边缘播放节点;视频流信息(如码率、帧率、播放并发人数)实时监控;API获取监控信息;各节点直播流量实时监控,自动化调度;直播流开启、掐断(违规内容)实时处理。除了目前还比较热门的游戏、购物等与直播结合显现出了商业价值,将来还会有教育、互动节目等用直播形式发挥力量。这也说明未来云计算将继续为直播行业提供技术支持,推动直播行业的发展。

January 22, 2019 · 1 min · jiezi

视频直播技术:最大限度保障流畅性和清晰度

直播和互动直播在2017年引起了人们的极大关注,应运而生的各种直播类APP多如牛毛。随着互动直播的逐渐兴起,交互成为直播APP的强需求。然而,实际网络中的丢包、延迟、抖动等问题仍然严重影响了直播的效果。针对上述问题,本文介绍了网易云信直播的网络QoS技术,旨在帮助读者了解在极差网络环境下如何最大限度的保障直播的流畅性和清晰度。相关阅读推荐《视频直播关键技术:流畅、拥塞和延时追赶》《短视频技术详解:Android端的短视频开发技术》《视频直播技术之iOS端推流》流畅性和清晰度定义观众在观看直播或者与主播进行互动直播的过程中,对音视频流畅性和清晰度的感受可以通过视频帧率、视频PSNR(或SSIM)分值、音频MOS分值等客观参数指标来表征。越高的视频帧率带来的视频流畅性越高,越高的视频PSNR(或SSIM)分值带来的视频清晰度越高,越高的音频MOS分值带来的音频流畅性和清晰度越高。那么,如何通过提高网络QoS技术改善网络质量,从而提高上述的客观指标呢?下面我们就单向直播和互动直播分别进行介绍。单向直播的流畅性和清晰度这里的单向直播特指通过RTMP/TCP协议将音视频流推送到CDN,然后观众拉流观看的一种直播方式。众所周知,TCP是一个面向连接的传输层协议,协议本身保证了传输的可靠性。通过调用开源框架librtmp,开发者可以非常容易的实现RTMP推流服务。然而,在网络出现丢包和抖动的时候,TCP的拥塞控制策略会限制推流端的发送码率,使得观众端出现突发的拉流卡顿,影响音视频的流畅性。通常情况下,应对网络丢包的策略有前向错误隐藏(FEC)、音频RED冗余、重传等,应对网络带宽受限有音视频的自适应码率调节策略。考虑到TCP协议的特殊性,我们无法设计灵活的重传和自适应码率调节策略,数据发送的多少和频率完全由TCP协议本身控制。这种情况下,我们可以做的是及时有效的检测网络可用带宽,并调节音视频编码器的输出码率,做到码率自适应。具体的实现方法是,通过平台(ios、Android或者Windows)相关的TCP socket接口获取网络信息,感知网络拥塞,估算得到可用带宽,及时调节音视频编码器的设置码率,防止音视频卡顿发生,保证流畅性。互动直播的流畅性和清晰度这里的互动直播特指连麦者通过RTP/UDP协议将音视频流推送到中转服务器,进行混流后再通过RTMP/TCP协议推送到CDN,然后观众拉流观看的直播方式。UDP不同于TCP,协议本身不关心数据是否及时可靠到达对端,只是完成“发送”的操作。由此,我们可以采用种类繁多的技术手段保证UDP协议数据的可靠达到。例如:前向错误隐藏(FEC)、音频RED冗余、重传等策略。根据网络状况和媒体数据的不同,我们采取相应的策略。按照如下的技术分别介绍:带宽估计带宽估计的作用是准确的获得当前的可用网络带宽,进而指导音视频编码器的带宽分配,使得实际发送码率不超过可用带宽,从而不会引起延时增加和丢包。常用的带宽估计方法包括根据丢包或者延迟变化估计带宽,Google的WebRTC中就包含了完整的带宽估计方法,值得大家学习借鉴。错误隐藏当接收端收到的音视频数据已经发生了丢失,我们该如何恢复数据呢?从音视频解码的角度看,可以通过视频(音频)前一帧或者多帧数据恢复丢失的数据。然而,常用的视频错误隐藏方法往往会对恢复的图像造成马赛克现象,错误隐藏的效果不佳。所以大多数情况不采用这类错误隐藏技术,而是解码之前会判断一帧数据是否完整,完整的数据才会被送入解码器,不完整的数据直接丢弃。音频领域的错误隐藏是另一种情况,音频的错误隐藏技术要普遍优于视频的错误隐藏,流行的音频压缩标准Opus、iLBC、iSAC/SILK等,都含有自己的PLC(Packet Loss Concealment)模块,解码器在检测到丢帧的时候会自动进行错误隐藏,实际效果还可以接受。前向纠错前向纠错技术相当于在发送端多发一部分数据,这部分数据可能是原始数据的复本,也可能是多份原始数据相互计算的结果。如果原始数据在传输过程中发生了丢失,那么这部分冗余数据就可以发挥作用,帮助恢复丢失的原始数据。当然了,这种策略牺牲的是有限的网络带宽。视频数据区别于音频数据的一个特点是,视频的数据包较大,一般情况会接近MTU大小,同时观众对视频数据的端到端延迟不如音频数据敏感。因此可以采用数目较大的FEC分组进行前向纠错。而音频数据包较小,数据包头在整个数据包中的占比相对视频要高出很多,所以进行RED冗余能够使多个音频包复用同一个包头,提高数据利用率。另一方面,如果音频数据采用FEC进行前向纠错,势必会增加延迟,影响通话体验。因此,视频数据较适宜采用FEC技术进行前向纠错,音频数据较适宜采用RED技术进行冗余操作。重传除了前向纠错技术,在网络RTT较小的时候,我们也可以向发送端请求网络中丢失的数据包,这就是重传技术。这个技术适用于网络RTT较小的情况,相比于FEC和RED,重传可以大幅提高带宽利用率,做到“丢哪个包要哪个包”,有针对性的重传丢失的数据包。考虑到观众对音频数据的敏感性,除非网络RTT很小,否则音频一般不采用重传技术。视频较多采用重传技术进行错误恢复,根据重传请求数据的不同又分为I帧请求和数据包请求。I帧请求是当接收端无法继续解码,而且发送端的GOP长度又很长的时候,需要及时请求发送端发送I帧,使得接收端根据这个I帧可以尽快恢复显示。数据包请求则是根据丢失的数据包,向发送端有针对性的请求,这种情况下发送端需要缓存已经发出去的数据包,以备后续接收端的请求。以上简单介绍了直播中提高流畅性和清晰度的几种方法和策略。实际使用中还需要考虑多种技术的有机结合,以及服务器端与客户端的相互配合,并结合用户使用场景和客户端设备性能等因素综合考虑。另外,想要获取更多产品干货、技术干货,记得关注网易云信博客。

January 21, 2019 · 1 min · jiezi

教育场景下的实时音频解决方案

本文来自网易云信 资深音频算法工程师 李备在LiveVideoStackCon 2018讲师热身分享,并由LiveVideoStack整理而成。在分享中李备详细分析了在线教育的音频需求,以及一般软件音频框架,和行业的挑战。大家好,我是来自网易云信的李备,今天我将与大家一起探究教育场景下的实时音频解决方案。本次分享将围绕以下几部分进行:实时音视频的市场需求1.1 市场观察随着我国互联网行业的蓬勃发展与宽带水平的提升,消费者早已不满足于通过简单的文字图片浏览新闻,而是期待通过更佳生动精彩的音视频获取知识了解世界。根据网易云信平台观测的数据,音视频社交应用时长在近两年呈现飞速增长,随之增长的同样还有中国在线教育市场交易规模,从2010年至2017年增长近10倍,并预计在2018~2019年保持增长。可以说,实时音视频技术助力众多产业转型升级,并使得视频会议等经典应用场景重获新生。众多的新兴场景与行业借助实时音视频技术实现了更佳丰富炫目高效准确的场景表达与业务落地,同时也进一步促进了实时音视频的技术演进与行业探索。实时音视频正在各个千亿、百亿市场快速发展并逐渐成为基础设施型重要技术。1.2 应用场景我们的音视频行业主要存在以下应用场景:以网易公开课为代表的点播,以Finger为代表的直播,以网易云课堂为代表的互动直播与以各种P2P、小班教学、大型培训为代表的实时音视频。1.3 直播/点播框架下图展示的是直播与点播的技术框架。而与上述直播/点播框架不同的是,互动直播框架更加强调音视频的实时性与强互动性。来自Web 端连麦观众的音频数据会通过WebRTC网关传输至实时音视频中转服务器,并在此与来自手机连麦观众和PC端主播的音视频数据一起由实时音视频中转服务器转发至互动直播服务器。互动直播服务器会对这些数据做合成/推流处理,传输至融合CDN流媒体服务器,由流媒体服务器推送数据给观看互动直播的普通观众。与此同时,实时音视频中转服务器同样负责手机连麦观众与PC端主播的直播互动数据交换,从而实现互动直播的效果。软件层实时音频解决方案2.1 实时音框架的线程模型与数据驱动方式上图展示的是实时音频的简单框架线程模型,这里需要提醒的是,其中的解码主要由客户端完成,实时音的服务端不参加解码而是把来自各端的数据包筛选之后传递给其他端。我们以音乐教学场景为例,学生与老师正在上课,此时来自学生的音频信号被其移动终端采集模块采集,经过混音消除、降噪、自动增益控制等音频的前处理过程,由音频编码器进行编码。这里的编码器主要分为专属语音编码器与音乐编码器。音频数据经过编码器的编码处理后会被发送至网络,此时接收端会收到一个缓冲抵抗网络抖动的Jitter Buffer。解码后的音频数据经过快慢速调制与TSM后进行后处理,最后播放。播放时产生的回声会被捕捉并重复上述流程。在硬件层面,终端制造商对音频处理流程中所需要的硬件都有一套同一切完善的参数调整经验,例如麦克风的采集帧率、拾音距离、回声延迟等都有统一规范;而考虑软件层面的实时音频则需面临设备数量庞大的难题,我们需要统一海量设备与不同平台的复杂数据输入并且考虑到软件层面的不可预知性,也就是我们需要一个完善的音频处理系统,优化各模块之间的协同工作并保证算法的稳定性。因此在这里我向大家展示一下WebRTC线程模型的设计和数据驱动方式:不同的颜色代表不同的线程。首先,音频数据被采集模块采集后进行音频前处理,之后经由交付Buffer被交至音频Codec进行编码。(这里强调的是,我们不把音频Buffer和Codec放在一个线程的原因是音频Codec的实时性计算量要求较高,需要单独的一个线程运行。而经过网络发送时一般网络线程是直接将数据传输至Audio Jitter Buff-er,Audio Jitter Buffer获取数据后会在网络线程上接收数据包,并更新网络统计和策略,而playback的callback请求往上回调至Audio Jitter Buffer请求数据过程是运行在Playback的Callback线程上。经过解码后音频数据会进行TSM、MIX等(如果是处理多路MIX,有些厂家可能会使音频解码单独在一个线程上运行,这一点视应用场景而定,如果是处理一路MIX则可以简单地运行在播放线程上。)关于其中的驱动方式,一些开发者喜欢使用Timer机制驱动数据,但这在实时音频框架中并不推荐。以Audio三维算法处理为例,音频每一帧处理需要大约10毫秒的时间,对时间的精度要求很高;而简单的Timer驱动无法满足这种高精度,尤其是在复杂的系统中很容易出现延迟,这为整个音频处理系统带来的影响无疑是毁灭性的。因此我们一般采取将驱动运行在系统(回调)中的解决方案,因为系统(回调)的高优先级可确保整个系统的稳定运行。Google就曾经在I/O大会上面推荐把audio process放到系统的采集播放线程里 ;右侧展示的主要有两个系统:收包网络系统与底层的用来驱动音频解码、后处理、MIX的Playback。一个音频引擎框架的稳定性直接决定了其输出声音的质量与实时性。2.2 音频前处理框架捕捉到的音频数据会进入Audio 3A处理。其中Audio 3A由AEC、ANS、AGC组成。不同的应用场景三者的处理顺序也不同,如在WebRTC中音频数据回依次经过AEC和NS 或者 NS 与AECM(AECM 是WebRTC专门为移动端打造的算法,计算量低,而AEC 是为PC打造的)。而在AEC(回声消除算法),为什么需要这个算法呢?当一个设备在播放声音经过空间中的多次反射会被麦克风再次捕捉并采集到系统当中,这时音频的输入既有空间反射的回声也有本端说话声,如果缺少此模块就意味着通话中说话人一直可以听到自己的声音回来,这是非常差的一种体验,这当然是需要我们避免的。这里AEC的作用就是通过播放的参考信号跟踪出回声并从采集信号中把回声消除掉,随后再经过降噪处理去除噪声。而其中的AECM是在NS模块之后通过获取clean与noise数据进行分析,AEC则是NS模块之前直接获取noise数据进行分析。音频数据完成AEC与NS的处理后会进行AGC处理,其包括AAGC(模拟域的自动增益控制)与DAGC(数字域的自动增益控制)。其中AAGC的主要作用是通过系统的采集音量设置接口调整输入信号(大多用于PC端,移动端一般没有输入音量的系统接口),如借助Windows上的的API调整采集音量等参数。AAGC可为输入的音频数据带来明显的质量优化,如提高信噪比,避免输入信号溢出等。但由于我们服务的跨平台要求,我们需要构建一个面向多平台设备的框架,在不同的输入平台和设备都会有不同的输入音量,DAGC可以根据对输入信号的跟踪,尽量的调整信号到达期望大小(幅值或能量),从而避免不同设备采集带来的音量差异过大。完成AGC处理的音频数据,即可进入Audio Encode进行编码操作。这里我想特别介绍一下Audio Jitter Buffer,由于视频的发送码率较高容易对网络造成较大冲击比较大,而音频在窄带与中等码率的情景下的发送码率在50KBPS上下,不会为网络带来较大压力,很多厂家在做音频QOS的时候并不会控制发送带宽(因为宽带的音频带宽不高,对于网络拥塞贡献不大),而把重点工作都放在接收端的jitter buffer策略上。但我们的人耳对连续性非常敏感,一旦有包没能及时传递出现丢包,那么观众就可体验到瞬间的卡顿,这种频繁的卡顿会让用户体验大打折扣。因此我们需要一个抵抗抖动的Buffer来抵抗网络抖动的冲击,从对Delay要求高、平滑稳定过渡的角度考虑我们希望选择较长的Buffer,而从实时性出发我们又希望尽可能缩短buffer。为了平衡网络抖动与实时性,我们引入Audio Jitter Buffer进行处理。一般用来在接收端控制网络抖动,而在不同模式下采取的抗抖动方案也不尽相同。Jitter Buffer框架与其包含的模块展示在这张图中,其中黄色代表网络线程。Audio Play Callback的数据首先传输至Manager,同时上传一些必要信息,此时音频数据会经过Jitter Policy处理传输至Audio Decode并在播放端触发callback,再由Callback驱动整个抓包流程。JitterBuffer请求包时会根据Jitter Policy进行音频解码或PLC/CNG、Slience等。最后经过后处理与MIX的反复处理,数据被传输至Audio Play Callback。不同厂商的Jitter Policy处理方案也不一样,如较为出名的WebRTC NeTEQ算法,其中集成了自适应抖动控制算法以及语音包丢失隐藏算法。除此之外, JitterBuffer在跟踪预测准每一个包的jitter的时候,也需要考虑实际的缓存播放策略,比如三个包的jitter 分别是100ms,50ms和150ms,如果每次都紧跟预测的jitter,当第一个包来的时候需要缓存100ms,然后第二个包来的时候发现只需要缓存50ms,实际缓存多了需要TSM 调整,直到第三个包来,发现要缓存的又要变化了,又需要需要TSM 调整,那么这样最后的效果将是非常糟糕的。JitterBuffer的目标就是缓存适合的数据可以抵抗网络jitter的抖动,自适应既要兼顾考虑时延,又不能变化过于频繁破坏声音体验,也不能不跟不上网络变化造成缓存不足造成丢包。行业痛点音频行业之痛主要是复杂的网络对音频的冲击与碎片化的终端设备背后差距悬殊的硬件。尤其是对Android平台而言,软件层面不同厂家定制系统的处理流程、硬件层面手机的工业设计、处理器、传感器等都不相同,难以用统一的平台解决方案处理这些设备的音视频问题,主要体现在算法的挑战难度上;与此同时,我们希望算法鲁棒性更强,这就意味着需要考虑更多的案例,而算法不可能考虑到所有的案例,我们必须根据实际情况进行相应取舍……这些都是在未来亟待解决的行业痛点。想要阅读更多技术干货文章,欢迎关注网易云信博客。了解网易云信,来自网易核心架构的通信与视频云服务。网易云信(NeteaseYunXin)是集网易18年IM以及音视频技术打造的PaaS服务产品,来自网易核心技术架构的通信与视频云服务,稳定易用且功能全面,致力于提供全球领先的技术能力和场景化解决方案。开发者通过集成客户端SDK和云端OPEN API,即可快速实现包含IM、音视频通话、直播、点播、互动白板、短信等功能。

January 21, 2019 · 1 min · jiezi

视频直播:Windows中各类画面源的截取和合成方法总结

当今,视频直播技术和实时音视频技术已经是很多行业必备,典型的应用场景有教育直播、远程视频会议、互联网娱乐等。在移动端发起直播,其画面源的种类是十分有限的,无非是取摄像头、截屏等。PC端由于其系统资源充足,应用程序丰富,画面源种类多样,更适合作为主播程序运行的平台。在实际应用中,经常有一些场景是需要将不同的画面源合在一起,然后推流出去的。本文粗浅介绍一些网易云信在开发过程中总结的一些获取不同画面源的画面并将其合并的方法。相关阅读推荐《如何快速实现移动端短视频功能?》《视频私有云实战:基于Docker构建点播私有云平台》各类画面源的截取摄像头画面Windows下采集摄像头画面,DShow是最常用的方法之一。通过DShow采集摄像头数据,创建视频采集Filter,将其加入到图表IGraphBuilder中,用IMediaControl接口来控制流媒体在Filter Graph中的流动,再通过Render来获取视频的原始数据。以上流程封装在了我们的SDK中,用户可以直接调用SDK接口。桌面取屏及应用程序窗口截取在Windows系统中,桌面和所有应用程序窗口一样,本身也是一个HWND窗口,因此可以放在一起讨论。获取一个窗口的位图数据,最常用的方法是:创建一个用来接收窗口画面的HBITMAP位图对象以及一个HDC设备上下文对象,用SelectObject将两者绑定,然后用BitBlt从被截取窗口的HDC将数据拷贝到目标HDC。下面列出关键代码:其他截屏/截窗口方法教育直播中,PPT分享是非常重要的一个场景。但是据我考查,自从Microsoft Office 2013之后,BitBlt就取不到Word、Excel、PPT窗口的内容了,截到的是一片白色。但是用PrintWindow这个Windows API却可以取到。调用PrintWindow的程序会收到WM_PRINT或WM_PRINTCLIENT消息。PrintWindow的效率比BitBlt低,但当BitBlt无法取到时,可以用PrintWindow。越来越多的程序的画面是在显存中的,此时,BitBlt和PrintWindow都不管用(得到的都是一块黑色的位图)。可以考虑用DirectX的方法。而且DirectX方法由于使用了GPU,所以相较前面两种方法效率更高。以下是DirectX截屏的代码:获取本地图片的位图数据将本地图片(jpg、bmp、png、gif等格式)加载到内存,并取得其位图句柄或像素首地址的方法有很多种。这里列举几种最常见的。GdiPlus方法比较简单。首先是通过图片路径创建一个Gdiplus::Bitmap对象,通过Gdiplus::Bitmap::LockBits()方法可以得到图片的数据,存放在一个Gdiplus::BitmapData结构中。Gdiplus::BitmapData::Scan0就是图片像素数据的首地址。如果想得到该图片的HBITMAP句柄,只需调Gdiplus::Bitmap::GetHBITMAP()即可。另一种方法是使用Windows API LoadImage来加载一个本地bmp图片得到HBITMAP句柄,但这种方法似乎只能加载位图文件(.bmp格式)。使用ATL的CImage只需要3行代码即可得到一个图片文件的HBITMAP句柄。画面合成主播常常希望同时将自己的摄像头画面和桌面内容或者某个程序的画面共享给观众,有时甚至需要同一时刻分享10个以上的画面源。这时候,需要将多个画面粘贴到一个目标画面上,我们称这个过程为画面合成。合成的画面通常还要支持改变各个画面的尺寸、位置等操作。这样一来,程序性能成了瓶颈问题。首先,对于各种画面源的截取应该尽量采用高效的方式,其次,画面的拉伸压缩是比较耗性能的地方。在1秒钟需要合成20帧画面的要求下,应该避免直接强行压缩HBITMAP,而是采用一些有加速的方案。LibYuv方案我们找到一个一个yuv库(LibYuv Project),支持图形数据从rgb格式到各种yuv格式之间的互相转换(定义在libyuv/convert.h中)。比较重要的一点是,它对yuv格式图形的拉伸和压缩以及其他各种变换(定义在libyuv/scale.h中)是有加速的。正好我们最终要推流的格式也是yuv格式的,所以我们方案的流程是:取得各个画面源的画面之后,先将它们各自转化为yuv格式,然后把这些yuv画面按照我们制定的方式粘贴到一个目标yuv画面上,最后将目标yuv画面数据推流出去。另外,由于主播的窗口上也要显示合并画面,所以还要把目标画面转成rgb格式渲染到窗口HDC上。当然,由于存在rgb格式和yuv格式之间反复的转换以及频繁的scale,而且yuv加速毕竟是软件方式,程序的CPU占用率还是有点高。如果能采用DirectX、OpenGL等硬件加速解决方案,对程序性能以及用户体验的提升应该是比较明显的。DirectX 9方案在DirectX 9方案中,我们的每个画面源以及最终的目标合成画面,都对应一个表面(IDirect3DSurface9)和一个纹理(IDirect3DTexture9)。由于画面源的颜色内存可能会被频繁访问和修改,所以创建其表面或纹理时,应该将其创建在系统内存或AGP中(D3DPOOL_MANAGED)而不是显存中。对于yuv格式的摄像头数据或网络视频帧,DirectX可以创建能直接接受yuv数据的纹理(D3DFMT_UYVY)。合成的时候,调用IDirect3DDevice9::DrawPrimitive()来将每个画面源绘制到目标画面上。而最终合成画面是要显示到窗口上的,所以应该创建在显存中(D3DPOOL_DEFAULT)。渲染的时候,调用IDirect3DDevice9::DrawPrimitive()将目标画面的纹理绘制到窗口的渲染目标纹理上,或者调用IDirect3DDevice9::StretchRect()将目标画面的表面粘贴到窗口的back buffer上。另外,由于要取得目标画面的数据用于推流,我们还要调用IDirect3DDevice9::CreateOffscreenPlainSurface()在系统内存中(D3DPOOL_SYSTEMMEM)创建一个离屏表面,用IDirect3DDevice9::GetRenderTargetData()将目标画面取到离屏表面上,然后IDirect3DSurface9::LockRect()就能得到目标画面的rgb格式数据了,将其转化为yuv格式就可以推流出去了。总 结直播产品由于需要对每一帧画面做处理,画面的清晰度要高,帧率还不能太低,所以通常会存在消耗系统资源过多的问题。无论是取画面还是合成画面,方法有很多,不仅限于上面几种。Win API效率一般,如果对程序性能要求高,就要在其他方面去想法设法减少资源消耗。而DirectX虽然对2D图形加速不如3D加速那么显著,但还是胜过Win API的。需要注意的是,使用DirectX时要非常清楚各个参数的意义,比如设备类型(D3DDEVTYPE)、内存池类型(D3DPOOL)、用途类型(D3DUSAGE)等等。参数用错,可能导致其性能还不如Win API。以上就是视频直播中Windows中各类画面源的截取和合成方法总结。另外,想要获取更多产品干货、技术干货,记得关注网易云信博客。

January 21, 2019 · 1 min · jiezi

视频直播技术之iOS端推流

随着网络基础建设的发展和资费的下降,在这个内容消费升级的时代,文字、图片无法满足人们对视觉的需求,因此视频直播应运而生。承载了实时性Real-Time和交互性的直播云服务是直播覆盖各行各业的新动力。网易云信推出一系列文章,对视频直播技术进行深入讲解,本篇文章将向大家介绍iOS端的推流技术。相关阅读推荐《短视频技术详解:Android端的短视频开发技术》《视频直播:Windows中各类画面源的截取和合成方法总结》《视频直播关键技术:流畅、拥塞和延时追赶》直播架构想必了解过直播的人都清楚直播主要分为3部分:推流->流媒体服务器->拉流。而我们今天需要讲的就是推流这部分,它主要包括音视频采集,音视频前处理,音视频编码,推流和传输4个方面。但是由于网络的复杂性和大数据的统计,推流还需要有全局负载均衡调度GSLB(Global Server Load Balance),以及实时的统计数据上报服务器,包括提供频道管理给用户运营,因此推流SDK需要接入GSLB中心调度,统计服务器,心跳服务器,用于推流分配到网络最好的节点,有大数据的统计和分析。下图涵盖了直播相关的所有服务,红色小标的线条代表指令流向,绿色小标的线条代表数据流向。直播技术点音视频采集采集是所有环节中的第一环,我们使用的系统原生框架AVFoundation采集数据。通过iPhone摄像头(AVCaptureSession)采集视频数据,通过麦克风(AudioUnit)采集音频数据。目前视频的采集源主要来自摄像头采集、屏幕录制(ReplayKit)、从视频文件读取推流。音视频都支持参数配置。音频可以设置采样率、声道数、帧大小、音频码率、是否使用外部采集、是否使用外部音频前处理;视频可以设置帧率、码率、分辨率、前后摄像头、摄像头采集方向、视频端显示比例、是否开启摄像头闪光灯、是否打开摄像头响应变焦、是否镜像前置摄像头预览、是否镜像前置摄像头编码、是否打开滤镜功能、滤镜类型、是否打开水印支持、是否打开QoS功能、是否输出RGB数据、是否使用外部视频采集。音视频处理前处理模块也是主观影响主播观看效果最主要的环节。目前iOS端比较知名的是GPUImage,提供了丰富的预处理效果,我们也在此基础上进行了封装开发。视频前处理包含滤镜、美颜、水印、涂鸦等功能,同时在人脸识别和特效方面接入了第三方厂商FaceU。SDK内置4款滤镜黑白、自然、粉嫩、怀旧;支持16:9裁剪;支持磨皮和美白(高斯模糊加边缘检测);支持静态水印,动态水印,涂鸦等功能。音频前处理则包括回声抑制、啸叫、增益控制等。音视频都支持外部前处理。音视频编码编码最主要的两个难点是:1 处理硬件兼容性问题2 在高FPS、低bitrate和音质画质之间找个一个平衡点由于iOS端硬件兼容性比较好,因此可以采用硬编。SDK目前支持软件编码openH264,硬件编码VideoToolbox。而音频支持软件编码FDK-AAC和硬件编码AudioToolbox。视频编码的核心思想就是去除冗余信息:空间冗余:图像相邻像素之间有较强的相关性。时间冗余:视频序列的相邻图像之间内容相似。编码冗余:不同像素值出现的概率不同。视觉冗余:人的视觉系统对某些细节不敏感。音视频发送推流SDK使用的流媒体协议是RTMP(RealTime Messaging Protocol)。而音视频发送最困难的就是针对网络的带宽评估。由于从直播端到RTMP服务器的网络情况复杂,尤其是在3G和带宽较差的Wifi环境下,网络丢包、抖动和延迟经常发生,导致直播推流不畅。RTMP基于TCP进行传输,TCP自身实现了网络拥塞下的处理,内部的机制较为复杂,而且对开发者不可见,开发者无法根据TCP协议的信息判断当时的网络情况,导致发送码率大于实际网络带宽,造成比较严重的网络拥塞。因此我们自研开发了一款实时根据网络变化的QoS算法,用于实时调节码率、帧率、分辨率,同时将数据实时上报统计平台。模块设计&线程模型模块设计鉴于推流的主流程分为上述描述的4个部分:音视频采集、音视频前处理、音视频编码、音视频发送。因此将推流SDK进行模块划分为LSMediacapture层(对外API+服务器交互)、视频融合模块(视频采集+视频前处理)、音频融合模块(音频采集+音频前处理)、基础服务模块、音视频编码模块、网络发送模块。线程模型推流SDK总共含有10个线程。视频包含AVCaptureSession的原始采集线程、前处理线程、硬件编码线程、数据流向定义的采集线程、编码线程、发送线程。音频包含AudioUnit包含的原始采集线程、数据流向定义的采集线程、编码线程、发送线程。在数据流向定义的采集线程、编码线程、发送线程之间会创建2个bufferQueue,用于缓存音视频数据。采集编码队列可以有效的控制编码码率,编码发送队列可以有效自适应网络推流。QoS&跳帧下图是直播的主要流程,用户初始化SDK,创建线程,开始直播,音视频数据采集,编码,发送。在发送线程下,音视频数据发送,QoS开启,根据网络实时评估带宽,调整帧率,码率控制编码器参数,同时触发跳帧,调整分辨率控制采集分辨率参数。用户停止直播,反初始化SDK,销毁线程。QoS&跳帧可以有效的解决用户在网络不好的情况下,直播卡顿的问题。在不同的码率和分辨率情况下,都能够做到让用户流畅地观看视频直播。以上就是iOS端推流技术的详细讲解。另外,想要阅读更多关于视频直播技术的文章,可以移步网易云信博客。

January 21, 2019 · 1 min · jiezi

音视频技术:视频质量评价方法简介

视频质量评估(VQA)一直是个很活跃的研究领域,原因其一是业内一直缺少一种统一且准确的评估标准,其二是影响视频质量的因素过多,且包含很多主观因素,难以客观、定量地评价。经过这么多年的研究,已经诞生了非常多的视频质量评估方法,本文将简单地对它们进行分类及介绍。相关阅读推荐《视频直播:Windows中各类画面源的截取和合成方法总结》《视频直播关键技术:流畅、拥塞和延时追赶》《短视频技术详解:Android端的短视频开发技术》客观质量评估方法分类首先,视频质量评估方法可分为主观测试和客观测试两大类。主观测试即通过人类肉眼观察的手段来评分,可以说是最能体现观众对视频质量感受的方法,也是其他客观评价方法的终极目标。但主观测试极端耗费人力和时间,是无法直接在工业领域应用的。而客观评估方法,按照国际电信联盟(ITU)的建议,可以根据输入的数据类型被分为5大类:媒体层(Media-layer)模型、参数集层(Parametric packet-layer)模型、参数规划(Parametric planning)模型、码流层(Bitstream-layer)模型、混合(Hybrid)模型。其中媒体层模型直接使用媒体信息进行运算分析给出评价结果,而其他类型的评估方法则是根据编码参数或网络信道状态等等外部变量来评估质量。媒体层模型的方法可以依据是否需要输入编码前的原始视频数据进一步划分为全参考(FR,Full-Reference)、部分参考(RR,Reduced-Reference)和无参考(NR,No-Reference)三类。故名思议,全参考使用完整的原始视频信号作为对比数据,而部分参考则使用经过提取的部分视频特征作为对比数据,无参考则仅使用用户得到的实际数据来评价视频质量。这三类方法的准确度和适用场合均大有不同。Figure1 FR,RR,NR视频质量评估的差异全参考视频质量评估显然的,在这三类方法中,有完整的原始数据作为对比源的全参考质量评估方法结果会更加准确。但是也正因为其需要使用原始数据,实际应用时会存在较大的限制,所以一般仅在非实时的评估系统中会被使用。例如在开发过程中配置编码参数或比较不同编码器的性能时,大多会采用这类方法。早期的全参考评估方法,一般直接使用像素差值作为衡量依据,比如均方差(MSE)、峰值信噪比(PSNR)等。这类方法计算简单,且能够一定程度反应图像的失真程度,所以至今仍然有很多应用在使用它们。但是毕竟人类主观上不光只是依靠单个像素的差异来评价视频质量的。且不说视频中包含的大量运动信息,即便只考虑静态图像,同样的像素差值以不同的分布规律分布在不同的位置上时,对视频质量的影响也是不一样的。为了更好的评价视频质量,研究人员根据人类自然视觉上的特性,提出了许多新的评价方法。例如基于结构相似度的VSSIM,以及综合统计了多种影响因子的VQM等。它们的评价结果相对前一类方法都更为接近人眼主观感受。这里借用一下出自K.Seshadrinathan, A. C. Bovik的文献“Motion Tuned Spatio-Temporal Quality Assessmentof Natural Videos”里的图来展示一下PSNR,VSSIM,VQM的区别。下方三张图横坐标为客观测试分数,纵坐标则为主观测试分数。可以看到PSNR的结果与主观分数差异较大,VSSIM则存在不同类型的视频评价准确度不一的问题,VQM相对来说结果最好。Figure2 PSNR,VSSIM,VQM客观评测分数与主观评测分数对比后来,研究人员引入了基于人类视觉系统(HVS)的感知模型,进一步提升了视频质量评估的准确性。这其中比较有代表性的是MOVIE(MOtion-based Video IntegrityEvalution)。这种方法会计算视频中物体的运动矢量,联合时域和空域的失真信息,最终得到一个符合主观感受的失真评价分数。在众多全参考视频质量评估方法中,MOVIE属于结果较为优秀的一种。但是同时,MOVIE的运算复杂度也要远高于前面提及的几种算法。下图横坐标为MOVIE应用在视频质量专家组(VQEG)数据库提供的测试序列上得到的客观评分,纵坐标为主观测试得分。Figure3 MOIVE客观评分与主观评分对比部分参考视频质量评估全参考视频质量评估需要完整的原始视频信号,也就是未经压缩的像素数据。这个量级的数据一般是无法实时传输的,这也就导致无法在远程实时监测视频质量。为了解决这个问题,人们提出了部分参考的评估方法。这类方法会提取原始视频信号中某些特征值,利用它们来评价视频质量。常见的特征值有DCT系数、运动矢量等。作为一种介于全参考与无参考之间的折中方案,它够解决远程传输的问题,而其代价是准确度的降低。现有的部分参考质量评估方法大都仅能达到与PSNR准确度相当的水平。无参考视频质量评估无参考视频质量评估不再需要失真前的数据,而仅需要和观众实际得到的相同的视频信息,就能得到一个大体的质量评分。这类方法虽然实现起来较为困难,但是一旦实现,即可很灵活地应用在视频相关的各个领域,是一种比较理想的视频质量评估手段。但是到目前为止,无参考评估仍然没有一个较为成熟的方案。一方面其评估结果的准确性与有参考的评估方法相比还有一定差距,另一方面其对视频内容有比较大的依赖性,普适性仍不能够得到保证。不过无参考视频质量评价目前已是视频质量相关研究的重点。并且,近些年机器学习技术的进步与普及,也为解决如何在没有参考对比的前提下评价视频质量这个问题提供了新的方向。目前业界也已经有了一些借助机器学习手段来进行无参考视频质量评估的尝试,其效果如何仍有待验证。相信随着研究者们的不断探索与尝试,未来我们能够得到一种成熟的方案。总结视频质量评估的内容非常多,本文仅仅粗略地介绍了客观视频质量评价的种类以及它们的适用场景。在实际应用时,仍需要根据实际情况来选择合适的方法。例如是否需要比较不同帧率或不同分辨率的视频质量,是否需要考虑网络抖动的影响等等。最后,用下面的分类图做一个总结:Figure4 视频质量评估方法大致分类另外,想要了解更多关于即时通讯和音视频技术的干货文章,可以移步网易云信博客。

January 21, 2019 · 1 min · jiezi

视频直播关键技术:流畅、拥塞和延时追赶

这两年互联网领域的一个热门关键词就是视频直播,从刚开始的游戏直播和秀场娱乐开始,现在各个行业里都植入了直播元素。网易云信多年以来,一直深耕于音视频领域,这篇文章将和大家聊一聊视频直播的几个关键技术。相关阅读推荐《如何快速实现移动端短视频功能?》《视频私有云实战:基于Docker构建点播私有云平台》清晰度4K、1080p、720p,这些概念被各大电视机厂商炒作了这么多年,已经地球人都懂了。4K在互联网视频直播里现在还不普及,主要是对网络数据传输要求太高了。1080p在一些对清晰度要求较高的场景如游戏直播里已经慢慢普及,要求的数据传输速率大约在4Mbps左右。720p是现在直播的主流清晰度,速率大约在1Mbps左右。在一些要求不太高的领域,还会有540p或者360p出现。流畅度如果在直播时出现卡顿、转圈,就意味着不流畅。主播和观众的连接通道好比一根水管,流量是有限的,因此如果清晰度提升意味着观众收看直播的流畅度有可能会下降。延时视频直播都是讲求互动性的,如果跟秀场妹妹聊天,讲了半天都没反应就略坑爹了。但是延时也不全是坏处,适当的延迟意味着在观众端能够有一定的视频流数据缓存,当出现网络不稳定时能够抵御小范围波动而使得观众无感知。首屏时间当观众进入直播间算起,到出现第一个主播画面的时间叫做首屏时间。为了保证直播流畅,会缓存一段数据之后再开始播放,但这个也不是绝对的,后文会详细描述。所以,最后来总结一下这几个指标间的关系。接下来我们会详细描述一下整个视频直播过程,视频流数据是如何在主播发送端、CDN、观众播放端之间流转的,而在技术上我们又可以做哪些事情来保证用户收看体验。1.首屏秒开先从观众进入直播间那一刻说起,这相当于整个直播生命周期的开始。当进入直播间后,播放器会向CDN请求数据。此时,假设主播已经发送视频流数据到了第100帧,由于数据传输的一些延时,CDN端最新收到的数据可能在第90帧。当CDN接收到拉取视频流请求时,他会做一件非常有意思的事情,即往前回溯一段数据,在图中显示的是回溯2秒钟,那就到了视频流的第五帧。CDN会把第五帧开始往后的数据,通过RTMP或其他直播协议源源不断的发送到播放器。那为什么要往回2秒钟呢,这可能算是目前视频直播技术中一个比较有特点的技术优化,能用于很好地平衡流畅度和首屏秒开时间。具体运作机制我们接下来再看。2.流畅播放接下去发生的事情,很好地可以说明回退2秒的作用。因为CDN是从第5帧开始发送数据,之后的数据全部缓存在CDN服务器中,因此可以源源不断地把数据发送到客户端,图中显示了从第5帧到50帧之间的数据,全部缓存在播放器内存中。这部分数据可以用于有效的抵抗网络波动造成的影响。当然,这样做的一个缺点是播放器相比于主播,延迟时间增加了2秒。所以说,视频直播所做的事情,就是在延时和流畅度之间找到一个很好的平衡点。3.网络拥塞网络拥塞是互联网上最常见的一个情景,接下去讨论当发生网络拥塞时发生的情景。假设当观众播放到第150帧时,用户下行网络出现问题,如果播放器没有新的数据到来,必然会画面卡住并开始转菊花。而此时,主播端并不会感知到这个事情,主播还在正常推送视频流数据。在经过了大概4秒左右的卡顿后,观众端的网络恢复,数据又会源源不断从CDN流向播放器。在图中看到网络流畅时,播放器的缓存中已经存放了第280帧数据,此时当前画面是150帧。这会产生一个什么问题?因为播放器播放数据是按照每一帧的时间戳匀速播放,因此如果不做任何优化就意味着每经过一次卡顿,直播的延迟就会增加一段时间,而增加的时间和被卡住的时间是一致的。4.延时追赶经过刚刚的描述,大家一定已经明白了延时累加是一个必须解决的问题。因此,播放器还需要做的事情就是延时追赶。播放器必须要实时侦测缓存中数据的情况,一旦大于某一阈值就启动延时追赶。追赶的方式,可以是直接扔掉多余数据也可以采用快进方式。快进模式相对来说用户体验会好一些,不会产生明显跳跃,处理时要注意声音不要因为快进而产生尖刺。最后再提一下,延时追赶不能太激进,还是应该在缓存中留一段数据,用于缓解以后可能再次发生的网络拥塞。前文描述了首屏启动、流畅播放、网络拥塞、延时追赶的基本概念和每个阶段内部所发生的事情,整个直播就在流畅、拥塞和延时追赶三个阶段中来回往复。看完本文,有兴趣读者可以尝试利用开源软件自己去写个直播APP,可以拿来练手娱乐,如果要上线还有各种其他奇葩的坑。另外,想要获取更多产品干货、技术干货,记得关注网易云信博客。

January 21, 2019 · 1 min · jiezi

一场稳定、高清、流畅的大型活动直播是怎么炼成的?

双11猫晚是家喻户晓的综艺晚会,在今年的双11,阿里集团为2500万用户提供了一场在线直播视觉盛宴。网友评价这是一场既稳定流畅又高清的直播,当然在这背后离不开阿里云的技术支持。本次天猫晚会中,视频云首次采用4k和50帧的技术,把整个画质提升到接近肉眼极限,同时为用户提供了如丝般顺滑的直播体验。那么这么一场大型活动的直播究竟是如何炼成的呢?阿里云视频云技术专家裘良科带我们从稳定、画质、流畅、监控四个方面开始解读。如何做到100%稳定?裘良科认为:“最安全的做法就是做好500%的准备,以不便应万变。”下图是双11直播的技术架构,分为几大部分:直播源站、视频直播中心和CDN分发系统和客户端。简单的看这张图,所有的链路都是双备份的。直播源站部分,采用了多线收流、主备转码器、多线专线等策略,直播中心都是多机房接入,再采用多流合并,当任何一个机房出现问题的时候,输出的直播流是不会受任何影响的。在这之后,直播中心会对直播流进行转码、录制、智能处理、切片、时移回放等处理,中间所有模块都是专有资源池供大型活动使用,保证不会受其他活动影响。任何一个模块发生异常,都可以秒级进行切换。产生到的内容在分发之前,会先进行存储,中心主备。到了分发环节,会实时检查源站的质量,并进行切换。在这样的架构之下,任何单点、单机房、单线路、单模块的故障,都不会导致直播服务不可用,几乎做到绝对安全。当然,除了自身稳定之外,安全也十分重要。在安全方面,视频云在推流、播放和拉流等环节,采用多重鉴权、IP黑白名单、播放格式/地区/IP等限制、HTTPS、防劫持等能力,实现全链路安全保障。如何让用户享受到极致的画质?一、实时4K直播视频清晰度作为衡量用户体验的重要指标,也是视频云技术团队十分关注的方向。本次猫晚的视频清晰度再度升级,通过阿里云直播服务提供实时4K直播,将现场4K超高清、高帧率的视频实时处理,进行画质提升。在4K视频的处理上,直播服务大规模使用GPU进行视频处理及转码,大大提升了实时视频处理能力,保证了直播视频最高4K的HEVC实时转码。据悉,4K高清直播已在阿里云的众多游戏直播客户中广泛使用。二、50帧极清阿里云和优酷合力研发的50帧极清技术,可通过人工智能算法预测运动方向和轨迹,将原始的每秒25帧画面普通电视信号变换为每秒50帧画面的高帧率视频内容,给用户提供更加流畅的沉浸式观看体验。50帧极清的效果,就像去电影院看大片,动作效果非常丰富的情况下,也不存在顿挫感。今年夏天的世界杯和本次双11猫晚都采用50 帧技术,视觉上看是非常流畅的。三、码率(比特率)最佳配比除了4K技术,基于内容进行编码优化也是视频云的优势。裘良科表示:“阿里的窄带高清技术精髓就在于使每一个比特分配到最需要它的地方。”这里我们先来看几个概念:分辨率是图像精密度的概念,代表着质量的极限,是不是越大越好呢?是也不是。分辨率大,点就多,需要的码率就高,需要的带宽就会变大,传输成本和对网络的要求都会变大。码率,比就是比特率,它代表单位时间传送的数据位数,视频文件大小就是由码率决定的,而且是成正比。帧率,代表着视觉流畅度,在我国通常帧率在25帧左右。然而帧率达到50-60的时候,我们几乎肉眼察觉不到间隔和差异。那我们如何在帧间和帧内进行合理码率分配,以达到最优的平衡呢?1. 合理分配帧间码率每一帧都需要码率来显示图像,那么我们如何判断哪一帧需要较多的帧率?哪一帧需要较少呢?其实这就需要基于对内容的分析,提前进行预判,你认为这一帧是复杂的画面,比如好莱坞动作大片,就多分配帧率,如果这一阵比较简单,比如新闻联播,就少分配。以此来实现合理的帧间码率分配。2. 合理分配帧内码率在整个图像中,并不是全部都需要非常清楚的。比如说你在看晚会的时候,你看的是中间的人物嘉宾,所以把人物和脸识别出来,就是你眼睛聚焦的地方,多分配一些码率。同时,衣服的褶皱纹理也多分配一些码率,背景作为脱焦区域,就少分配一些码率了。通过帧间、帧内的码率分配,让整个视频的质量更高。在同等码率之下,获得更高的质量。同样质量之下,可以节省更多带宽。那在播放层面,如何保证流畅不卡顿呢?裘良科认为,在确保直播流畅度上,全球覆盖的CDN节点和精准调度系统缺一不可。CDN节点是采用分布式架构,拥有遍布全球的1500个节点和充足的带宽储备,单节点带宽 40Gbps+,全网带宽输出能力120 Tbps。同时采用四层智能调度架构(如下图),来确保整个分发的流畅。如何实现精准调度,确保大型活动突发峰值的流畅但是面对晚会等大型活动,突发峰值非常高,需要更精准的调度策略,来实现调度。打比方有一个装了很多冰块和水的杯子,如果我们要把杯子里面的狭小空间全部用上,我们先要把冰块放进去,再倒液态水。DNS的协议限制类似冰块。其他别的调度形式,比如IP调度,可以做好请求级别的调度,也就是支持任意比例的负载均衡,就像液态水一样。所以,在智能调度的场景里,把“固体”和“液体”结合起来考虑,才能做到所有的节点、水位的精准控制,实现更精准的调度。同时,在码率瞬间激增的情况下,常规的流量预测算法失算了,进而会干扰流控程序, 这个问题阿里云使用了基于AI流量预测进行预调度,在10分钟内的预测的精准度到98%,一小时的精准度95%以上。监控系统保驾护航在确保了稳定、画质和流畅之后,一场大型活动的直播离不开监控系统。我们肯定需要对当前的直播状态做监控,以确保及时调整策略。监控从以下四个方面进行:1、流监控:针对每一路流进行秒级实时监控,及时获得直播流的帧率、码率、时间戳等状态2、播放质量监控:实时获知服务端慢速比,用户端卡顿率3、可用性监控:实时返回视频5XX等播错误数据,及时定位视频失败原因4、业务量监控:实时获取当前在线用户数作为这场猫晚的唯一网络直播平台,优酷平台上直播观看人数近2500万,是去年的两倍。这也是阿里云视频云第四年支持双11猫晚网络直播,从作战室监控的数据上来看,猫晚直播期间各项系统数据指标运转平稳,一场稳定、高清、流畅的大型活动直播就就此实现。经过世界杯、双11猫晚等多次锤炼,视频云直播服务已经具备一整套大型赛事/活动/综艺直播的服务经验,并实现对阿里云各行业客户的赋能,为视频行业创造更多价值。本文作者:樰篱 阅读原文本文为云栖社区原创内容,未经允许不得转载。

January 2, 2019 · 1 min · jiezi

Get 了滤镜、动画、AR 特效,速来炫出你的短视频开发特技!

在滤镜美颜、搞怪特效、炫酷场景等各种新奇玩法驱动下,短视频开始让人上瘾。12 月 3 日,七牛云联合八大短视频特效平台共同推出了中国短视频开发者创意大赛(China Short Video Contest),面向全国邀请广大开发者,基于大赛提供的 SDK 或使用其他适合的 SDK,进行短视频轻应用的开发设计。为了帮助参赛者开发创作更精彩、更有料的短视频作品,我们提供以下几种应用场景参考:场景一:社交互动功能应用: 美颜、滤镜、贴纸创作来源:Enlight Videoleap在图片及视频中添加艺术滤镜,制作出震撼夸张的大片特效,同时可搭配个性贴纸,在社交互动的场景应用下,全方位秀出自我。场景二:音乐相册功能应用: 文字特效、配音创作来源:乐秀生活中的暖心片段,搭配文字特效及背景音乐,生成一部饱含爱意的温情记录片。场景三:图片转视频功能应用: 动画特效创作来源:Enlight Photoloop原本静态的图片,经过动态特效处理,生成栩栩如生的动态视频,熊熊烈火、浩瀚大海、雄伟瀑布、旋转摩天轮,历史图片也能动态呈现。除此之外,包括当下比较火的模仿秀、配音秀等应用场景大家均可尝试。其中模仿秀可以使用分屏拍摄,上传模仿视频至一边画面,有效增强互动娱乐性,比比谁的演技最精彩!配音秀则可选取漫画、游戏、搞笑、萌宠、美文等多种类型的配音素材,添加电影音效等,让体验者过一把「声优」瘾。另外,×××相结合的 AR 特效,也是一个不错的选择!短视频开发者创意大赛自 12 月启动以来,备受开发小伙伴们青睐,目前我们已经征集到部分参赛作品,近期作品公示、人气评选页面即将上线,欢迎广大用户对参赛作品进行体验并投票,完成最具人气奖的评选。第一波短视频开发作品,我们敬请期待!看到这里,还等什么?只要你有创意有想法有短视频开发功底无论你是什么风格什么派系什么套路什么脑洞只要提交有效参赛作品,即可获得七牛云抵用券 500 元,一等奖可得 30000 元现金大奖。同时,邀请好友参赛,一旦好友参赛获奖,邀请者可获得 1000 元天猫券。收下这份诚意满满的短视频开发者大赛创作指南,万元现金大奖、六大王者荣冠、百万流量宣传、事业快速通道等你来。火速下载短视频 SDK,创作你的短视频大片吧!长按扫码立即报名

December 20, 2018 · 1 min · jiezi

h5直播|微直播weLiveShow|视频h5|video直播

html5直播实例|h5微直播项目模板|仿陌陌直播|仿抖音小视频/火山短视频近两年正是直播井喷时期,被称为直播元年;各个互联网大平台都有布局自己的直播项目,争抢流量红利、不断进行玩法创新。 如:陌陌直播、抖音小视频、火山短视频、腾讯微视等等。h5直播主要在这三种情况下,pc端、移动端浏览器和微信端,微信端包含微信浏览器和微信小程序。h5直播既然这么火,自己也忍不住去开发实践了下,使用html5+css3+Zepto+swiper+wcPop等技术混合开发了个h5微直播项目weLiveShow,功能界面有些类似陌陌、火山短视频。/* 消息提醒轮询函数—————————————————-/// xxx用户来了function comingUser(){ var rndObj = [ { name: ‘笑笑’, level: ’level01’, levelNum: 12 }, { name: ‘神仙眷侣♉’, level: ’level03’, levelNum: 16 }, { name: ‘大海的声音’, level: ’level05’, levelNum: 20 }, { name: ‘听风者☋’, level: ’level02’, levelNum: 15 }, { name: ‘网瘾少年’, level: ’level03’, levelNum: 16 }, { name: ‘小宝♥’, level: ’level05’, levelNum: 20 }, { name: ‘解脱门♣★’, level: ’level01’, levelNum: 12 } ]; var len = rndObj.length, num = Math.floor(Math.random() * len); wcTips({ selector: ‘#J__timelyBox’, id: ‘wcTips1’, content: ‘<ul class=“clearfix”><li class=“tips wls__bg wls__’ + rndObj[num].level + ‘"><div class=“inner flexbox”><span class=“bg”><i class=“iconfont icon-xingxing”></i><b>’ + rndObj[num].levelNum + ‘</b></span>’ + rndObj[num].name + ’ 来了</div></li></ul>’, anim: ‘fadeInLeftBig’, time: 5 });}// 送礼物提醒function giveGift(){ var rndObj = [ { avator: ‘img/uimg/u__chat-img02.jpg’, userName: ‘笑笑’, giftName: ‘奖杯’, giftImg: ‘img/gift/gift-img001-奖杯.png’ }, { avator: ‘img/uimg/u__chat-img06.jpg’, userName: ‘神仙眷侣♉’, giftName: ‘金话筒’, giftImg: ‘img/gift/gift-img002-金话筒.png’ }, { avator: ‘img/uimg/u__chat-img07.jpg’, userName: ‘大海的声音’, giftName: ‘棒棒糖’, giftImg: ‘img/gift/gift-img004-棒棒糖.png’ }, { avator: ‘img/uimg/u__chat-img12.jpg’, userName: ‘听风者☋’, giftName: ‘幸运草’, giftImg: ‘img/gift/gift-img005-幸运草.png’ }, { avator: ‘img/uimg/u__chat-img13.jpg’, userName: ‘网瘾少年’, giftName: ‘我爱你’, giftImg: ‘img/gift/gift-img010-我爱你.png’ }, { avator: ‘img/uimg/u__chat-img14.jpg’, userName: ‘小宝♥’, giftName: ‘恶作剧便便’, giftImg: ‘img/gift/gift-img011-恶作剧便便.png’ }, { avator: ‘img/uimg/u__chat-img15.jpg’, userName: ‘解脱门♣★’, giftName: ‘一支玻尿酸’, giftImg: ‘img/gift/gift-img021-一支玻尿酸.png’ } ]; var len = rndObj.length, num = Math.floor(Math.random() * len); wcTips({ selector: ‘#J__timelyBox’, id: ‘wcTips2’, content: ‘<ul class=“clearfix”><li class=“gift”><div class=“flexbox flex-alignc”><img class=“avator” src=”’ + rndObj[num].avator + ‘" /><div class=“giftdesc flex1 clamp1”><span class=“t1”>’ + rndObj[num].userName + ‘</span><em class=“t2”>送 主播 ’ + rndObj[num].giftName + ‘</em></div><img class=“giftimg” src="’ + rndObj[num].giftImg + ‘" /></div></li></ul>’, anim: ‘fadeInBig’, time: 5 });}// 动画礼物提醒function giveGifGift(){ var rndObj = [ { giftName: ‘福到了’, giftImg: ‘img/gift/gif/gift-gifimg001.gif’ }, { giftName: ‘发红包喽’, giftImg: ‘img/gift/gif/gift-gifimg002.gif’ }, { giftName: ‘大白变超人’, giftImg: ‘img/gift/gif/gift-gifimg003.gif’ }, { giftName: ‘浪漫的热气球’, giftImg: ‘img/gift/gif/gift-gifimg004.gif’ }, { giftName: ‘超炫法拉利’, giftImg: ‘img/gift/gif/gift-gifimg005.gif’ }, { giftName: ‘大白鲨’, giftImg: ‘img/gift/gif/gift-gifimg006.gif’ }, { giftName: ‘魔法城堡’, giftImg: ‘img/gift/gif/gift-gifimg007.gif’ } ]; var len = rndObj.length, num = Math.floor(Math.random() * len); wcTips({ selector: ‘body’, id: ‘wcTips3’, content: ‘<div class=“wls__gift-fullscreen”><div class=“gifGift”><img class=“gifimg” src="’ + rndObj[num].giftImg + ‘" /></div></div>’, shade: true, anim: ‘zoomInDown’, time: 10 });}/** * @title 及时消息提示插件 * @Create andy * @Timer 2018/10/16 15:16:45 GMT+0800 (中国标准时间)/!function(win){ var _doc = win.document, _docEle = _doc.documentElement, index = 0, util = { $: function(id){ return _doc.getElementById(id); }, touch: function(o, fn){ o.addEventListener(“click”, function(e){ fn.call(this, e); }, !1); }, // object扩展 extend: function(target, source){ for(var i in source){ if(!(i in target)){ target[i] = source[i]; } } return target; }, timer: {} //定时器 }, wcTips = function(options){ var _this = this, config = { selector: ‘body’, //提示框被包围dom(默认body) id: ‘wcTips’, //提示框ID标识(不同的ID对应不同的提示框) content: ‘’, //内容 shade: false, //是否显示遮罩层 anim: ‘fadeIn’, //具体动画可参考animate.css [fadeIn - fadeInBig - fadeInUp - fadeInDown - pulse - zoomInDown - zoomInDownSmall] time: 3, //设置提示框自动关闭秒数1、 2、 3 zIndex: 9999 //设置元素层叠 }; _this.opts = util.extend(options, config); _this.init(); }; wcTips.prototype = { init: function(){ var _this = this, opt = _this.opts, tipbox = null; util.$(opt.id) ? (tipbox = util.$(opt.id)) : (tipbox = _doc.createElement(“div”), tipbox.id = opt.id); tipbox.setAttribute(“index”, index); tipbox.setAttribute(“class”, “wcTips wcTips” + index); tipbox.setAttribute(“selector”, opt.selector); tipbox.innerHTML = [ /*遮罩/ opt.shade ? (’<div class=“wctips-mask” style=“z-index:’+(_this.maxIndex()+1)+’"></div>’) : ‘’, /*窗体/ ‘<div class=“wctips-child ’ + (opt.anim ? ‘anim-’ + opt.anim : ‘’) + ‘” style=“z-index:’+(_this.maxIndex()+2)+’">’+ opt.content +’</div>’ ].join(’’); _doc.querySelector(opt.selector).appendChild(tipbox); this.index = index++; _this.callback(); }, callback: function(){ var _this = this, opt = _this.opts; //自动关闭弹窗 if(opt.time){ util.timer[_this.index] = setTimeout(function(){ exports.close(_this.index); }, opt.time * 1000); } }, //获取弹窗最大层级 maxIndex: function () { for (var idx = this.opts.zIndex, elem = _doc.getElementsByTagName(”*”), i = 0, len = elem.length; i < len; i++) idx = Math.max(idx, elem[i].style.zIndex); return idx; } }; var exports = (function(){ //实例化插件(返回 弹窗索引值) fn = function(args){ var o = new wcTips(args); return o.index; }; //关闭窗口 fn.close = function(index){ var index = index > 0 ? index : 0; // var o = $(".wcTips" + index); var o = _doc.getElementsByClassName(“wcTips” + index)[0]; if(o){ var selector = o.getAttribute(“selector”); // o.addClass(“wcTips-close”); o.classList.add(“wcTips-close”); setTimeout(function(){ // o.remove(); _doc.querySelector(selector).removeChild(o); clearTimeout(util.timer[index]); delete util.timer[index]; }, 200); } } return fn; }()); win.wcTips = exports;}(window);欢迎大家一起交流、学习 Q:282310962 wx:xy190310 ...

December 20, 2018 · 3 min · jiezi

一文盘点直播技术中的编解码、直播协议、网络传输与简单实现

本文节选自 Live CheatSheet | 直播技术理论基础与实践概论,很多内容非作者原创,而是对 Live Links 中列举出的多篇文章的盘点总结,更多直播相关内容可以前往 xCompass 交互式检索或 MushiChat 查看代码。Live CheatSheet | 直播技术理论基础与实践概论音视频直播的基本流程都是采集 → 编码推流 → 网络分发 → 解码 → 播放这五大环节,其中又会涉及平台硬件、编解码、网络传输、服务并发、数字信号处理、在线学习等多方面技术。从交互模式上,又可以泛分为单对单模式与会议模式两大类;从实时性要求上,直播又可以分为伪实时、准实时与真实时三个等级:伪实时:视频消费延迟超过 3 秒,单向观看实时,通用架构是 CDN + RTMP + HLS,譬如很多的直播平台准实时: 视频消费延迟 1 ~ 3 秒,能进行双方互动但互动有障碍;可以通过 TCP/UDP + FLV 已经实现了这类技术,譬如 YY 直播等真实时:视频消费延迟 < 1 秒,平均 500 毫秒,譬如 QQ、微信、Skype 和 WebRTC 等编解码视频封装格式就是我们通常所说的 .mp4,.flv,.ogv,.webm 等,它其实就是一个盒子,用来将实际的视频流以一定的顺序放入,确保播放的有序和完整性。视频压缩格式(视频编码)就是指能够对数字视频进行压缩或者解压缩(视频解码)的程序或者设备。通常这种压缩属于有损数据压缩。视频压缩格式和视频格式具体的区别就是,它是将原始的视频码流变为可用的数字编码。首先,由原始数码设备提供相关的数字信号流,然后经由视频压缩算法,大幅度的减少流的大小,然后交给视频盒子,打上相应的 dts,pts 字段,最终生成可用的视频文件。视频编码也可以指通过过特定的压缩技术,将某个视频格式转换成另一种视频格式。视频封装格式常见的视频封装格式(简称:视频格式)包括了 AVI,MPEG,VOB 等,即相当于一种储存视频信息的容器,由相应的公司开发出来的。AVIAVI 格式(后缀为.AVI):它的英文全称为 Audio Video Interleaved,即音频视频交错格式。它于 1992 年被 Microsoft 公司推出。这种视频格式的优点是图像质量好。由于无损 AVI 可以保存 alpha 通道,经常被我们使用。缺点太多,体积过于庞大,而且更加糟糕的是压缩标准不统一,最普遍的现象就是高版本 Windows 媒体播放器播放不了采用早期编码编辑的 AVI 格式视频,而低版本 Windows 媒体播放器又播放不了采用最新编码编辑的 AVI 格式视频,所以我们在进行一些 AVI 格式的视频播放时常会出现由于视频编码问题而造成的视频不能播放或即使能够播放,但存在不能调节播放进度和播放时只有声音没有图像等一些莫名其妙的问题。DV-AVIDV-AVI 格式(后缀为.AVI):DV 的英文全称是 Digital Video Format,是由索尼、松下、JVC 等多家厂商联合提出的一种家用数字视频格式。数字摄像机就是使用这种格式记录视频数据的。它可以通过电脑的 IEEE 1394 端口传输视频数据到电脑,也可以将电脑中编辑好的的视频数据回录到数码摄像机中。这种视频格式的文件扩展名也是 avi。电视台采用录像带记录模拟信号,通过 EDIUS 由 IEEE 1394 端口采集卡从录像带中采集出来的视频就是这种格式。MOVQuickTime File Format 格式(后缀为.MOV):美国 Apple 公司开发的一种视频格式,默认的播放器是苹果的 QuickTime。具有较高的压缩比率和较完美的视频清晰度等特点,并可以保存 alpha 通道。大家可能注意到了,每次安装 EDIUS,我们都要安装苹果公司推出的 QuickTime。安装其目的就是为了支持 JPG 格式图像和 MOV 视频格式导入。MPEGMPEG 格式(文件后缀可以是 .MPG .MPEG .MPE .DAT .VOB .ASF .3GP .MP4 等):它的英文全称为 Moving Picture Experts Group,即运动图像专家组格式,该专家组建于 1988 年,专门负责为 CD 建立视频和音频标准,而成员都是为视频、音频及系统领域的技术专家。MPEG 文件格式是运动图像压缩算法的国际标准。MPEG 格式目前有三个压缩标准,分别是 MPEG-1、MPEG-2、和 MPEG-4。MPEG-1、MPEG-2 目前已经使用较少,着重介绍 MPEG-4,其制定于 1998 年,MPEG-4 是为了播放流式媒体的高质量视频而专门设计的,以求使用最少的数据获得最佳的图像质量。目前 MPEG-4 最有吸引力的地方在于它能够保存接近于 DVD 画质的小体积视频文件。你可能一定注意到了,怎么没有 MPEG-3 编码,因为这个项目原本目标是为高分辨率电视(HDTV)设计,随后发现 MPEG-2 已足够 HDTV 应用,故 MPEG-3 的研发便中止。WMVWMV 格式(后缀为.WMV .ASF):它的英文全称为 Windows Media Video,也是微软推出的一种采用独立编码方式并且可以直接在网上实时观看视频节目的文件压缩格式。WMV 格式的主要优点包括:本地或网络回放,丰富的流间关系以及扩展性等。WMV 格式需要在网站上播放,需要安装 Windows Media Player(简称 WMP),很不方便,现在已经几乎没有网站采用了。Real VideoReal Video 格式(后缀为.RM .RMVB):Real Networks 公司所制定的音频视频压缩规范称为 Real Media。用户可以使用 RealPlayer 根据不同的网络传输速率制定出不同的压缩比率,从而实现在低速率的网络上进行影像数据实时传送和播放。RMVB 格式:这是一种由 RM 视频格式升级延伸出的新视频格式,当然性能上有很大的提升。RMVB 视频也是有着较明显的优势,一部大小为 700MB 左右的 DVD 影片,如果将其转录成同样品质的 RMVB 格式,其个头最多也就 400MB 左右。大家可能注意到了,以前在网络上下载电影和视频的时候,经常接触到 RMVB 格式,但是随着时代的发展这种格式被越来越多的更优秀的格式替代,著名的人人影视字幕组在 2013 年已经宣布不再压制 RMVB 格式视频。FLVFlash Video 格式(后缀为.FLV):由 Adobe Flash 延伸出来的的一种流行网络视频封装格式。随着视频网站的丰富,这个格式已经非常普及。MKVMatroska 格式(后缀为.MKV):是一种新的多媒体封装格式,这个封装格式可把多种不同编码的视频及 16 条或以上不同格式的音频和语言不同的字幕封装到一个 Matroska Media 档内。它也是其中一种开放源代码的多媒体封装格式。Matroska 同时还可以提供非常好的交互功能,而且比 MPEG 的方便、强大。视频编解码视频实际上就是一帧一帧的图片,拼接起来进行播放;标准的图像格式使用 RGB 三字节描述像素颜色值,会占用较大的存储空间与带宽。视频编解码器会根据前后图像的变化做运动检测,通过各种压缩把变化的结果发送到对方。实时视频编码器需要考虑两个因素:编码计算量和码率带宽,实时视频会运行在移动端上,需要保证实时性就需要编码足够快,码率尽量小。基于这个原因现阶段一般认为 H.264 是最佳的实时视频编码器,而且各个移动平台也支持它的硬编码技术;譬如 1080P 进行过 H.264 编码后带宽也就在 200KB/S ~ 300KB/S 左右。编码基础总的来说,常用的编码方式分为三种:变换编码:消除图像的帧内冗余。涉及到图像学里面的两个概念:空域和频域。空域就是我们物理的图片,频域就是将物理图片根据其颜色值等映射为数字大小。而变换编码的目的是利用频域实现去相关和能量集中。常用的正交变换有离散傅里叶变换,离散余弦变换等等。运动估计和运动补偿:消除帧间冗余。视频压缩还存在时间上的关联性。例如,针对一些视频变化,背景图不变而只是图片中部分物体的移动,针对这种方式,可以只对相邻视频帧中变化的部分进行编码。熵编码:提高压缩效率,熵编码主要是针对码节长度优化实现的。原理是针对信源中出现概率大的符号赋予短码,对于概率小的符号赋予长码,然后总的来说实现平均码长的最小值。编码方式(可变字长编码)有:霍夫曼编码、算术编码、游程编码等。I,B,P 实际上是从运动补偿中引出来的,这里为了后面的方便先介绍一下。I 帧(I-frame): 学名叫做: Intra-coded picture。也可以叫做独立帧。该帧是编码器随机挑选的参考图像,换句话说,一个 I 帧本身就是一个静态图像。它是作为 B,P 帧的参考点。对于它的压缩,只能使用熵 和 变化编码 这两种方式进行帧内压缩。所以,它的运动学补偿基本没有。P 帧(P‑frame): 又叫做 Predicted picture–前向预测帧。即,他会根据前面一张图像,来进行图片间的动态压缩,它的压缩率和 I 帧比起来要高一些。B 帧(B‑frame): 又叫做 Bi-predictive picture– 双向预测。它比 P 帧来说,还多了后一张图像的预测,所以它的压缩率更高。考虑到不同帧传输的无序性,我们还需要引入 PTS 与 DTS 来进行控制,使用 DTS 来解码,PTS 来进行播放。PTS(presentation time stamps): 显示时间戳,显示器从接受到解码到显示的时间。DTS(decoder timestamps): 解码时间戳。也表示该 sample 在整个流中的顺序H.26XH.26X 系列由 ITU 国际电传视讯联盟主导包括, H.261、H.262、H.263、H.264、H.265 等:H.261:主要在老的视频会议和视频电话产品中使用。H.263:主要用在视频会议、视频电话和网络视频上。H.264:H.264/MPEG-4 第十部分,或称 AVC(Advanced Video Coding,高级视频编码),是一种视频压缩标准,一种被广泛使用的高精度视频的录制、压缩和发布格式。H.265:高效率视频编码(High Efficiency Video Coding,简称 HEVC)是一种视频压缩标准,H.264/MPEG-4 AVC 的继任者。HEVC 被认为不仅提升图像质量,同时也能达到 H.264/MPEG-4 AVC 两倍之压缩率(等同于同样画面质量下比特率减少了 50%),可支持 4K 分辨率甚至到超高画质电视,最高分辨率可达到 8192×4320(8K 分辨率),这是目前发展的趋势。直至 2013 年,Potplayer 添加了对于 H.265 视频的解码,尚未有大众化编码软件出现。H.264 是由 ITU 和 MPEG 两个组织共同提出的标准,整个编码器包括帧内预测编码、帧间预测编码、运动估计、熵编码等过程,支持分层编码技术(SVC)。单帧 720P 分辨率一般 PC 上的平均编码延迟 10 毫秒左右,码率范围 1200 ~ 2400kpbs,同等视频质量压缩率是 MPEG4 的 2 倍,H.264 也提供 VBR、ABR、CBR、CQ 等多种编码模式,各个移动平台兼容性好。H.264 为了防止丢包和减小带宽还引入一种双向预测编码的 B 帧,B 帧以前面的 I 或 P 帧和后面的 P 帧为参考帧。H.264 为了防止中间 P 帧丢失视频图像会一直错误它引入分组序列(GOP)编码,也就是隔一段时间发一个全量 I 帧,上一个 I 帧与下一个 I 帧之间为一个分组 GOP。在实时视频当中最好不要加入 B 帧,因为 B 帧是双向预测,需要根据后面的视频帧来编码,这会增大编解码延迟。MPGA 系列MPEG 系列由 ISO 国际标准组织机构下属的 MPEG 运动图象专家组开发视频编码方面主要有:MPEG-1 第二部分(MPEG-1 第二部分主要使用在 VCD 上,有些在线视频也使用这种格式。该编解码器的质量大致上和原有的 VHS 录像带相当。)MPEG-2 第二部分(MPEG-2 第二部分等同于 H.262,使用在 DVD、SVCD 和大多数数字视频广播系统和有线分布系统(cable distribution systems)中。)MPEG-4 第二部分(MPEG-4 第二部分标准可以使用在网络传输、广播和媒体存储上。比起 MPEG-2 和第一版的 H.263,它的压缩性能有所提高。)MPEG-4 第十部分(MPEG-4 第十部分技术上和 ITU-T H.264 是相同的标准,有时候也被叫做“AVC”)最后这两个编码组织合作,诞生了 H.264/AVC 标准。ITU-T 给这个标准命名为 H.264,而 ISO/IEC 称它为 MPEG-4 高级视频编码(Advanced Video Coding,AVC)。音频编码器实时音视频除了视频编码器以外还需要音频编码器,音频编码器只需要考虑编码延迟和丢包容忍度,所以一般的 MP3、AAC、OGG 都不太适合作为实时音频编码器。从现在市场上来使用来看,Skype 研发的 Opus 已经成为实时音频主流的编码器。Opus 优点众多,编码计算量小、编码延迟 20ms、窄带编码-silk、宽带编码器 CELT、自带网络自适应编码等。同视频编码类似,将原始的音频流按照一定的标准进行编码,上传,解码,同时在播放器里播放,当然音频也有许多编码标准,例如 PCM 编码,WMA 编码,AAC 编码等等。直播协议常用的直播协议包括了 HLS, RTMP 与 HTTP-FLV 这三种,其对比如下:协议优势缺陷延迟性HLS支持性广延时巨高10s 以上RTMP延时性好,灵活量大的话,负载较高1s 以上HTTP-FLV延时性好,游戏直播常用只能在手机 APP 播放2s 以上HLSHLS, HTTP Live Streaming 是 Apple 提出的直播流协议,其将整个流分成一个个小的块,并基于 HTTP 的文件来下载;HLS 由两部分构成,一个是 .m3u8 文件,一个是 .ts 视频文件;每一个 .m3u8 文件,分别对应若干个 ts 文件,这些 ts 文件才是真正存放视频的数据,m3u8 文件只是存放了一些 ts 文件的配置信息和相关路径,当视频播放时,.m3u8 是动态改变的,video 标签会解析这个文件,并找到对应的 ts 文件来播放,所以一般为了加快速度,.m3u8 放在 web 服务器上,ts 文件放在 CDN 上。 HLS 协议视频支持 H.264 格式的编码,支持的音频编码方式是 AAC 编码。.m3u8 文件,其实就是以 UTF-8 编码的 m3u 文件,这个文件本身不能播放,只是存放了播放信息的文本文件:#EXTM3U m3u文件头#EXT-X-MEDIA-SEQUENCE 第一个TS分片的序列号#EXT-X-TARGETDURATION 每个分片TS的最大的时长#EXT-X-ALLOW-CACHE 是否允许cache#EXT-X-ENDLIST m3u8文件结束符#EXTINF 指定每个媒体段(ts)的持续时间(秒),仅对其后面的URI有效mystream-12.tsHLS 协议的使用也非常便捷,将 m3u8 直接写入到 src 中然后交与浏览器解析,也可以使用 fetch 来手动解析并且获取相关文件:<video controls autoplay> <source src=“http://devimages.apple.com/iphone/samples/bipbop/masterplaylist.m3u8" type=“application/vnd.apple.mpegurl” /> <p class=“warning”>Your browser does not support HTML5 video.</p></video>HLS 详细版的内容比上面的简版多了一个 playlist,也可以叫做 master。在 master 中,会根据网络段实现设置好不同的 m3u8 文件,比如,3G/4G/wifi 网速等。比如,一个 master 文件中为:#EXTM3U#EXT-X-VERSION:6#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2855600,CODECS=“avc1.4d001f,mp4a.40.2”,RESOLUTION=960x540live/medium.m3u8#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=5605600,CODECS=“avc1.640028,mp4a.40.2”,RESOLUTION=1280x720live/high.m3u8#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1755600,CODECS=“avc1.42001f,mp4a.40.2”,RESOLUTION=640x360live/low.m3u8#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=545600,CODECS=“avc1.42001e,mp4a.40.2”,RESOLUTION=416x234live/cellular.m3u8以 high.m3u8 文件为例,其内容会包含:#EXTM3U#EXT-X-VERSION:6#EXT-X-TARGETDURATION:10#EXT-X-MEDIA-SEQUENCE:26#EXTINF:9.901,http://media.example.com/wifi/segment26.ts#EXTINF:9.901,http://media.example.com/wifi/segment27.ts#EXTINF:9.501,http://media.example.com/wifi/segment28.ts该二级 m3u8 文件也可以称为 media 文件,其有三种类型:live playlist: 动态列表。顾名思义,该列表是动态变化的,里面的 ts 文件会实时更新,并且过期的 ts 索引会被删除。默认,情况下都是使用动态列表。event playlist: 静态列表。它和动态列表主要区别就是,原来的 ts 文件索引不会被删除,该列表是不断更新,而且文件大小会逐渐增大。它会在文件中,直接添加 #EXT-X-PLAYLIST-TYPE:EVENT 作为标识。VOD playlist: 全量列表。它就是将所有的 ts 文件都列在 list 当中。如果,使用该列表,就和播放一整个视频没有啥区别了。它是使用 #EXT-X-ENDLIST 表示文件结尾。显而易见,HLS 的延时包含了 TCP 握手、m3u8 文件下载与解析、ts 文件下载与解析等多个步骤,可以缩短列表的长度和单个 ts 文件的大小来降低延迟,极致来说可以缩减列表长度为 1,并且 ts 的时长为 1s,但是这样会造成请求次数增加,增大服务器压力,当网速慢时回造成更多的缓冲,所以苹果官方推荐的 ts 时长时 10s,所以这样就会大改有 30s 的延迟。RTMPRTMP,Real-Time Messaging Protocol 是由 Adobe 推出的音视频流传递协议;它通过一种自定义的协议,来完成对指定直播流的播放和相关的操作。在 Web 上可以通过 MSE(MediaSource Extensions)来接入 RTMP,基本思路是根据 WebSocket 直接建立长连接进行数据的交流和监听。RTMP 协议根据不同的套层,也可以分为:纯 RTMP: 直接通过 TCP 连接,端口为 1935RTMPS: RTMP + TLS/SSL,用于安全性的交流。RTMPE: RTMP + encryption。在 RTMP 原始协议上使用,Adobe 自身的加密方法RTMPT: RTMP + HTTP。使用 HTTP 的方式来包裹 RTMP 流,这样能直接通过防火墙。不过,延迟性比较大。RTMFP: RMPT + UDP。该协议常常用于 P2P 的场景中,针对延时有变态的要求。RTMP 内部是借由 TCP 长连接协议传输相关数据,所以,它的延时性非常低。并且,该协议灵活性非常好(所以,也很复杂),它可以根据 message stream ID 传输数据,也可以根据 chunk stream ID 传递数据。两者都可以起到流的划分作用。流的内容也主要分为:视频,音频,相关协议包等。HTTP-FLVRTMP 是直接将流的传输架在 RTMP 协议之上,而 HTTP-FLV 是在 RTMP 和客户端之间套了一层转码的过程,即:每个 FLV 文件是通过 HTTP 的方式获取的,所以,它通过抓包得出的协议头需要使用 chunked 编码:Content-Type:video/x-flvExpires:Fri, 10 Feb 2017 05:24:03 GMTPragma:no-cacheTransfer-Encoding:chunked网络传输单对单模式主要是怎么通过路由路径优化手段达到两点之间最优,这方面 SKYPE 首先提出基于 P2P 的 Real-time Network 模型。而 单对多模式是一个分发树模型,各个客户端节点需要就近接入离自己最近的服务器,然后在服务器与服务器构建一个实时通信网络。基础推流所谓推流,就是将我们已经编码好的音视频数据发往视频流服务器中。实时音视频系统都是一个客户端到其他一个或者多个客户端的通信行为,这就意味着需要将客户端编码后的音视频数据传输到其他实时音视频系统都是一个客户端到其他一个或者多个客户端的通信行为,这就意味着需要将客户端编码后的音视频数据传输到其他客户端上,一般做法是先将数据实时上传到服务器上,服务器再进行转发到其他客户端,客户端这个上传音视频数据行为称为推流。我们可以通过 Nginx 的 RTMP 扩展方便地搭建推流服务器:rtmp { server { listen 1935; #监听的端口 chunk_size 4000; application hls { #rtmp推流请求路径 live on; hls on; hls_path /usr/local/var/www/hls; hls_fragment 5s; } }}推流会受到客户端网络的影响,例如:wifi 信号衰减、4G 弱网、拥挤的宽带网络等。为了应对这个问题,实时音视频系统会设计一个基于拥塞控制和 QOS 策略的推流模块。WebRTCWebRTC 是一个开源项目,旨在使得浏览器能为实时通信(RTC)提供简单的 JavaScript 接口。说的简单明了一点就是让浏览器提供 JS 的即时通信接口。这个接口所创立的信道并不是像 WebSocket 一样,打通一个浏览器与 WebSocket 服务器之间的通信,而是通过一系列的信令,建立一个浏览器与浏览器之间(peer-to-peer)的信道,这个信道可以发送任何数据,而不需要经过服务器。并且 WebRTC 通过实现 MediaStream,通过浏览器调用设备的摄像头、话筒,使得浏览器之间可以传递音频和视频。WebRTC 有三个重要的部分:MediaStream、RTCPeerConnection、RTCDataChannel:MediaStream:通过设备的摄像头及话筒获得视频、音频的同步流PeerConnection: 用于构建点对点之间稳定、高效的流传输的组件DataChannel:能够使得浏览器之间(点对点)简历一个高吞吐量、低延时的信道,用于传输任何数据实时网络传输优化TCP 与 UDP在大规模实时多媒体传输网络中,TCP 和 RTMP 都不占优势。TCP 是个拥塞公平传输的协议,它的拥塞控制都是为了保证网络的公平性而不是快速到达,我们知道,TCP 层只有顺序到对应的报文才会提示应用层读数据,如果中间有报文乱序或者丢包都会在 TCP 做等待,所以 TCP 的发送窗口缓冲和重发机制在网络不稳定的情况下会造成延迟不可控,而且传输链路层级越多延迟会越大。在实时传输中使用 UDP 更加合理,UDP 避免了 TCP 繁重的三次握手、四次挥手和各种繁杂的传输特性,只需要在 UDP 上做一层简单的链路 QoS 监测和报文重发机制,实时性会比 TCP 好,这一点从 RTP 和 DDCP 协议可以证明这一点,我们正式参考了这两个协议来设计自己的通信协议。UDP 不可避免地存在抖动、乱序、丢包问题,视频必须按照严格是时间戳来播放,否则的就会出现视频动作加快或者放慢的现象,如果我们按照接收到视频数据就立即播放,那么这种加快和放慢的现象会非常频繁和明显。也就是说网络抖动会严重影响视频播放的质量,一般为了解决这个问题会设计一个视频播放缓冲区,通过缓冲接收到的视频帧,再按视频帧内部的时间戳来播放既可。UDP 除了小范围的抖动以外,还是出现大范围的乱序现象,就是后发的报文先于先发的报文到达接收方。乱序会造成视频帧顺序错乱,一般解决的这个问题会在视频播放缓冲区里做一个先后排序功能让先发送的报文先进行播放。UDP 在传输过程还会出现丢包,丢失的原因有多种,例如:网络出口不足、中间网络路由拥堵、socket 收发缓冲区太小、硬件问题、传输损耗问题等等。在基于 UDP 视频传输过程中,丢包是非常频繁发生的事情,丢包会造成视频解码器丢帧,从而引起视频播放卡顿。这也是大部分视频直播用 TCP 和 RTMP 的原因,因为 TCP 底层有自己的重传机制,可以保证在网络正常的情况下视频在传输过程不丢。基于 UDP 丢包补偿方式一般有以下几种:报文冗余,报文冗余很好理解,就是一个报文在发送的时候发送 2 次或者多次。这个做的好处是简单而且延迟小,坏处就是需要额外 N 倍(N 取决于发送的次数)的带宽。FEC, Forward Error Correction,即向前纠错算法,常用的算法有纠删码技术(EC),在分布式存储系统中比较常见。最简单的就是 A B 两个报文进行 XOR(与或操作)得到 C,同时把这三个报文发往接收端,如果接收端只收到 AC,通过 A 和 C 的 XOR 操作就可以得到 B 操作。丢包重传,丢包重传有两种方式,一种是 push 方式,一种是 pull 方式。Push 方式是发送方没有收到接收方的收包确认进行周期性重传,TCP 用的是 push 方式。pull 方式是接收方发现报文丢失后发送一个重传请求给发送方,让发送方重传丢失的报文。丢包重传是按需重传,比较适合视频传输的应用场景,不会增加太对额外的带宽,但一旦丢包会引来至少一个 RTT 的延迟。拥塞控制要评估一个网络通信质量的好坏和延迟一个重要的因素就是 Round-Trip Time(网络往返延迟),也就是 RTT。评估两端之间的 RTT 方法很简单,大致如下:发送端方一个带本地时间戳 T1 的 ping 报文到接收端;接收端收到 ping 报文,以 ping 中的时间戳 T1 构建一个携带 T1 的 pong 报文发往发送端;发送端接收到接收端发了的 pong 时,获取本地的时间戳 T2,用 T2 – T1 就是本次评测的 RTT。因为客户端有可能在弱网环境下进行推流,音视频数据如果某一时刻发多了,就会引起网络拥塞或者延迟,如果发少了,可能视频的清晰不好。在实时音视频传输过程会设计一个自动适应本地网络变化的拥塞控制算法,像 QUIC 中的 BBR、webRTC 中 GCC 和通用的 RUDP。思路是通过 UDP 协议反馈的丢包和网络延迟(RTT)来计算当前网络的变化和最大瞬时吞吐量,根据这几个值调整上层的视频编码器的码率、视频分辨率等,从而达到适应当前网络状态的目的。QoS 策略客户端推流除了需要考虑网络上传能力以外,还需要考虑客户端的计算能力。如果在 5 年前的安卓机上去编码一个分辨率为 640P 的高清视频流,那这个过程必然会产生延迟甚至无法工作。为此需要针对各个终端的计算能力设计一个 QoS 策略,不同计算能力的终端采用不同的视频编码器、分辨率、音频处理算法等,这个 QoS 策略会配合拥塞控制做一个状态不可逆的查找过程,直到找到最合适的 QoS 策略位置媒体处理技术回声消除在实时音视频系统中,回声消除是一个难点,尽管 webRTC 提供了开源的回声消除模块,但在移动端和一些特殊的场景表现不佳。专业的实时音视频系统会进行回声消除的优化。回声消除的原理描述很简单,就是将扬声器播放的声音波形和麦克风录制的波形进行抵消,达到消除回声的作用。因为回声的回录时间不确定,所以很难确定什么时间点进行对应声音数据的抵消。在专业的回声消除模块里面通常会设计一个逼近函数,通过不断对输出和输入声音波形进行在线学习逼近,确定回声消除的时间差值点。简单 Web 实验本部分的代码实验参考 MushiChat。Media Source ExtensionMSE 全称就是 Media Source Extensions。它是一套处理视频流技术的简称,里面包括了一系列 API:Media Source,Source Buffer 等。在没有 MSE 出现之前,前端对 video 的操作,仅仅局限在对视频文件的操作,而并不能对视频流做任何相关的操作。现在 MSE 提供了一系列的接口,使开发者可以直接提供 media stream。const vidElement = document.querySelector(‘video’);if (window.MediaSource) { const mediaSource = new MediaSource(); vidElement.src = URL.createObjectURL(mediaSource); mediaSource.addEventListener(‘sourceopen’, sourceOpen);} else { console.log(‘The Media Source Extensions API is not supported.’);}function sourceOpen(e) { URL.revokeObjectURL(vidElement.src); const mime = ‘video/webm; codecs=“opus, vp9”’; const mediaSource = e.target; const sourceBuffer = mediaSource.addSourceBuffer(mime); const videoUrl = ‘droid.webm’; fetch(videoUrl) .then(function(response) { return response.arrayBuffer(); }) .then(function(arrayBuffer) { sourceBuffer.addEventListener(‘updateend’, function(e) { if (!sourceBuffer.updating && mediaSource.readyState === ‘open’) { mediaSource.endOfStream(); } }); sourceBuffer.appendBuffer(arrayBuffer); });}其中 MediaSource 只是一系列视频流的管理工具,它可以将音视频流完整的暴露给 Web 开发者来进行相关的操作和处理。所以,它本身不会造成过度的复杂性。 ...

October 26, 2018 · 4 min · jiezi