很高兴回答您的问题:我们先从市面上主流的直播间功能说起,先看看直播平台最基础要具备什么样的功能。
一、 基础功能
1 视频直播功能:这是最基础的功能,主播端将视频数据推送出去,观众端进行接收观看,这就需要RTMP推流功能的支持才能实现,并且这一步也会决定画面的清晰度和流畅程度。
2 聊天功能:观众可以在互动区进行文字聊天,和主播对话,想说就说。
3 礼物打赏功能:观众可以对喜爱的女主播进行礼物打赏,游艇、跑车、甚至城堡走起来等等。
4 支付/提现功能:用户为喜爱的直播进行礼物打赏或者守护,主播收到礼物或接受守护后,可将收到的平台虚拟币兑换成现金提取出。
5 视频回放功能:直播时同时录屏,随时随地,想看回放就看回放,粉丝再也不会错过喜爱的主播直播的精彩内容。
6 分享功能:将主播频道或主页分享到微信、微博或者别的平台。
那么由功能出发,来看看我们如何搭建一个基础的直播平台呢。
二、 直播间构成
视频直播功能其实就是从推流到拉流的过程,基本构成也是由以下几部分构成:
采集部分
iOS是比较简单的,因为机型相对固定以及采集方向相对固定,Android则要做些机型适配工作,PC最麻烦各种奇葩摄像头驱动,出了问题特别不好处理,建议放弃PC只支持手机主播,目前大部分的美女直播平台都是这样的,游戏直播平台则略有不同。
处理部分
其实针对视频帧的预处理,现在直播美颜已经是标配了,80%的主播没有美颜根本没法看。美颜算法需要用到GPU编程,需要懂图像处理算法的人,没有好的开源实现,要自己参考论文去研究。难点不在于美颜效果,而在于GPU占用和美颜效果之间找平衡。GPU虽然性能好,但是也是有功耗的,GPU占用太高会导致手机发烫,而手机发烫会导致摄像头采集掉帧,可能原因是过热会导致CPU降低主频。这是全局美颜,还需要针对脸部的调整,比如最普遍的大眼瘦脸,还有瘦下巴,调整额头高度,鼻翼宽度等,拍摄起来不亚于一场外科手术了。这个就需要配合人脸追踪算法来进行调整,先得识别人脸五官部位,再正对特定部位进行不同方法的图形学渲染,基于这些技术,贴纸道具什么也都不是问题。所以基础美颜难度不大,用上了人脸追踪的美颜就价格高点,因为毕竟人脸追踪现在成本还是比较高的。自己如果做基础美颜难度低,成本也不高,但是一旦要做美型,成本高,周期长,也可以考虑第三方的SDK
3 编码
可以采用硬编码或者软编码720p以上,软编会导致CPU过热。能耗过高,之后自然会卡顿,编码要在分辨率,帧率参数设计上找到最佳平衡点,让能耗和效果之间互相协调。视频-编码格式:H265、H264、MPEG-4等,封装容器有TS、MKV、AVI、MP4等。现在比较常用的视频编码是H264。音频-编码格式:G711μ、AAC、Opus等,封装有MP3、OGG、AAC等,比较常用的是AAC编码格式。视频经过编码压缩大大提高了视频的存储和传输效率,当然,经过压缩后的视频在播放时必须进行解码。
4传输,将编码完成后的音视频数据进行传输,早期的音视频通过同轴电缆之类的线缆进行传输,IP网络发展后,使用IP网络优传输。
传输协议:RTP与RTCP、RTSP、RTMP、HTTP、HLS(HTTP LiveStreaming)等
控制信令:SIP和SDP、SNMP等
转码、解码,也肯定要兼容软/硬解码,目前手机普遍支持硬解
整体过程可以这么理解:
OK,说完基本构成,我们再说一下特色功能:
五、 特色功能
比如评论聊天、连麦互动、收费房间、密码房间、礼物打赏等特色功能,也是为直播平台提供更多可能和更多想象空间。
评论聊天可以采用IM方式进行实现,IM提供商也比较多,也可以自己进行实现,因为这个功能不是属于即时音视频通信,没有很复杂。
连麦互动就是属于即时音视频通信了,这个其实自己实现就有点本末倒置,过于浪费时间,并且就算用TCP协议实现了基础功能,稳定性和流畅度也没有保障。
收费、密码房间就属于平台搭建时进行实现的功能,这个对于普通前端工程师而言不是很大的挑战。
礼物打赏就涉及到支付渠道的对接,和渲染功能实现,比如收到费用后,要在屏幕渲染一些特定的特效,比如游艇走起来,火箭biubiubiu~
以上就是我的回答,希望得到您的赞同
移动直播行业的火热会在很长一段时间内持续,通过和各行业的整合,从而成为具有无限可能性的行业。主要因为以下三个原因:
第一,移动直播的UGC生产模式比PC端的直播更明显,人人都有设备,随时随地开播,完全顺应了互联网时代的开放性原则,能刺激更多人去创造和传播优质内容。
第二,网络带宽和速度在逐渐提高,网络成本在逐渐下降,为移动直播提供一个极佳的发展环境。文字、声音、视频、游戏等都会在移动直播中呈现,创造出更加丰富的用户体验。直播可以以SDK的形式接入到自己的应用中,比如,教育领域中的课后辅导完全可以以直播的形式开展业务、电商也可借助直播让用户挑选商品,促进销售。
第三,一个与VR/AR技术相结合的移动直播为整个行业的未来提供了新的发展空间。VR/AR直播能够让用户身临其境,带动主播与观众更贴切真实的互动,大大提高平台的用户参与度。
当下,有技术实力和流量优势的互联网从业者都不愿错过直播这个风口,如何快速搭建一个直播系统成了大家关心的问题,我想和大家分享下我的经验。我从事于一家直播产品开发商,我们的产品为了快速赶上市场,并没有自己完全去自己做,而是使用了趣拍云服务提供的直播SDK。
从业者都知道,一个完整直播产品应该包含以下环节:推流端(采集、前处理、编码、推流),服务端处理(转码、录制、截图、鉴黄),播放器(拉流、解码、渲染)、互动系统(聊天室、礼物系统、赞)。 下面我就一一讲述下直播SDK在各个环节所做的工作。
一、移动直播推流端需要做哪些工作?
直播推流端即主播端,主要通过手机摄像头采集视频数据和麦克风采集音频数据,经过一系列前处理、编码、封装,然后推流到CDN进行分发。
1、采集
移动直播SDK通过手机摄像头和麦克风直接采集音视频数据。其中,视频采样数据一般采用RGB或YUV格式、音频采样数据一般采用PCM格式。采集到的原始音视频的体积是非常大的,需要经过压缩技术处理来提高传输效率。
2、前处理
在这个环节主要处理美颜、水印、模糊等效果。美颜功能几乎是直播的标配功能。我们调研中发现太多case是因为没有美颜功能被抛弃使用的。另外国家明确提出了,所有直播都必须打有水印并回放留存15天以上。
美颜实际上是通过算法去识别图像中的皮肤部分,对皮肤区域进行色值调整。通过颜色对比找到皮肤区域,可以进行色值调整、添加白色图层或调整透明度等来等来达到美白效果。在美颜处理方面,最著名的GPUImage提供了丰富的效果,同时可以支持iOS和Android,支持自己写算法实现自己最理性的效果。GPUImage内置了120多种常见滤镜效果,添加滤镜只需要简单调用几行代码就可以了。
3、编码
为了便于手机视频的推流、拉流以及存储,通常采用视频编码压缩技术来减少视频的体积,现在比较常用的视频编码是H264。在音频方面,比较常用的是用AAC编码格式,其它如MP3、WMA也是可选方案。视频经过编码压缩大大提高了视频的存储和传输效率,当然,经过压缩后的视频在播放时必须进行解码。
相较于之前的H264,2012年诞生的H265编解码标准有了相当大的改善,做到了仅需要原来一半带宽即可播放相同质量的视频,低于15Mbps的网络也能传输1080p的高清视频。像阿里云、金山云都在推自己的H265编解码技术,随着直播的快速发展和对带宽的依赖,H265编解码技术已有全面取代H264的趋势。
H264和H265个模块技术差异:
另外,硬件编码已经成为移动直播的首选方案,软编码处理在720p以上的视频颓势非常明显。在iOS平台上硬件编码的兼容性比较好,可以直接采用,但在 Android 平台上,MediaCodec 编码器针对不同的芯片平台表现差异还是非常大的,要完全实现全平台兼容的成本还是非常高的。
4、推流
要想用于推流还必须把音视频数据使用传输协议进行封装,变成流数据。常用的流传输协议有RTSP、RTMP、HLS等,使用RTMP传输的延时通常在1–3秒,对于移动直播这种实时性要求非常高的场景,RTMP也成为移动直播中最常用的流传输协议。最后通过一定的Qos算法将音视频流数据推送到网络断,通过CDN进行分发。在直播场景中,网络不稳定是非常常见的,这时就需要Qos来保证网络不稳情况下的用户观看直播的体验,通常是通过主播端和播放端设置缓存,让码率均匀。另外,针对实时变化的网络状况,动态码率和帧率也是最常用的策略。
当然,在网络传输方面全部自己来做基本不现实,找提供推流服务的CDN服务商提供解决方案是最好的选择,可参考文章开头介绍的云视频服务商。据了解,阿里云是国内唯一能自研CDN缓存服务器的厂商,性能非常有保障。当然,大多数直播平台都会同时接入多个视频云服务提供商,这样可以做拉流线路互备,对推流后视频集群再进行优化也可提高直播的流畅性和稳定性。
二、服务端处理需要做哪些工作?
要想适配各终端和平台,服务端还需要对流进行转码,如支持RTMP、HLS、FLV等格式拉流,支持一路转多路适配不同网络和分辨率的终端设备。
1、截图、录制、水印
像阿里云等云服务商都提供了实时转码技术,将用户推流码率较高(比如720P)实时转化成较低清晰度(比如360P)的流以适应播放端的需求。如果要自己搭建实时转码系统,这个成本是极高的,一台8核设备只能实时转10路流,如果一个正常的直播平台有1000路流,就需要100台设备,加上后期的运维成本,一般公司就吃不消了。
2、鉴黄
2016年4月14日,文化部查出了斗鱼、虎牙、YY、熊猫TV、六间房、9158等涉嫌提供含宣扬*秽、暴力、教唆犯罪的网络直播平台,被列入查处名单。政府介入管制有利于直播行业打造健康的生态,进入良性发展。这也意味着为了安全直播产品鉴黄成了必需环节,使用技术手段去鉴黄是移动直播平台必然采用的方案。
市面上提供鉴黄服务的方案主要有两种,第一种是对视频进行截图,然后对进行鉴黄,返回鉴黄结果和分值。典型的企业有阿里(绿网)、图谱科技,他们目前都支持直接传入视频,经过服务端分析返回结果。通常由业务系统接入鉴黄服务,根据鉴黄结果对直播流进行控制,如切断直播流、封禁账号等。第二种是和CDN结合,直接对直播流进行分析,识别结果分为色情、疑似色情、性感和正常,业务系统根据识别结果直接控制直播流。典型的企业是Viscovery,这套方案的优点是实时性保证比较好,缺点是必须部署到CDN或自己的机房,使用成本相对高一些。
还有像趣拍云服务这种一站式直播解决方案提供商,他们的做法是,用户只需在控制台对鉴黄服务进行配置就可以针对每个应用、每一路直播流进行实时审核。在控制台中,趣拍视频云服务实时将鉴黄结果返回,用户可以直接查看色情直播和违规界面的截图,同时可以对直播流进行控制,切断问题直播流。该服务商还提供了短信、邮件和站内信功能,避免漏掉任何一个非法视频,给平台造成损失,我们就使用了这种方式。
三、播放器端需要做哪些工作?
在播放器端如何做到秒开,直播过程中保证画面和声音清晰度的同时,稳定、流程、无卡顿的直播流量,这些工作都需要播放器端配合服务端来做优化,做到精确调度。
1、拉流
拉流实际是推流的逆过程。首先通过播放端获取码流,标准的拉流格式有RTMP、HLS、FLV等。RTMP是Adobe的专利协议,开源软件和开源库都支持的比较好,如开源的librtmp库,播放端只要支持flashPlayer的就能非常简单的播放RTMP直播,直播延迟一般在1–3秒。HLS是苹果提出的基于HTTP的流媒体传输协议,HTML5可以直接打开播放,通过微信、QQ等软件分享出去,用户也可以直接观看直播,可以说移动直播app,HLS拉流协议是必须支持的,缺点是延迟通常大于10秒。FLV(HTTP-FLV)协议是使用HTTP协议传输流媒体内容的一个协议,也不用担心被Adobe的专利绑架,直播延迟同样可以做到1–3秒。
各拉流协议的差异:
我们使用的趣拍视频云服务的直播拉流技术提供了以上三种格式,满足不同业务场景的需求,如对即时性要求较高或有互动需求的可以采用RTMP或FLV格式进行直播拉流播放;对于有回放或跨平台需求的,推荐使用HLS。当然,三种协议是可以同时使用的,分别用到自己的场景就可以了。
2、解码和渲染
拉流获取封装的视频数据后,必须通过解码器解码、渲染后才能在播放器上播放。它是编码的逆过程,是指从音视频的数据中提取原始数据。前面介绍的H264和H265编码格式都是有损压缩,所以在提取后的原始数据,并非原始采样数据,存在一定的信息丢失。因此,在视频体积最小的情况下通过各种编码参数保留最好的原始画面,成为了各视频公司的核心机密。
考虑对高清的支持,解码肯定还是要选择硬解码的。前面介绍过,iOS系统由于硬件比较单一、比较封闭,支持的比较好,Android系统由于平台差异非常大,编解码要完全兼容各平台还需要很多工作要做。
四、移动直播中的交互系统
移动直播中最常见的交互有聊天室(弹幕)、点赞、打赏和礼物等,交互系统涉及消息的实时性和互动性,在技术实现上大多是使用IM的功能来实现的。对于在线人数比较多的房间,弹幕消息量是非常大,主播与用户其实都看不过来,为了缓解服务器压力,在产品策略需要做一些必要的优化。
1、聊天室
移动直播中的弹幕交互是用户和主播互动的主要方式,实际上就是IM中的聊天室功能。聊天室和群聊功能类似,但聊天室的消息是不需要分发给不在线的用户的,历史消息也不需要查看,用户只有进入聊天室后才能查看聊天消息和群成员信息。面对复杂多变的网络状况,还需要根据用户位置就近选择近对应运营商的单线机房接入弹幕消息服务,让弹幕更及时。
2、礼物系统
礼物系统更是绝大多数移动直播平台的标配了,它是这些平台主要的收入来源。送礼物的形式也增强了用户和主播之间的互动交流,也是主播依赖平台的最主要原因。
礼物的收发在技术实现上也是用聊天室接口做的,通常采用IM中的自定义消息实现,当用户收到或发送礼物时将自定义消息对应的礼物图形渲染出来。
以上就是我们在使用了第三方SDK服务后总结出来的直播产品经验,希望能帮助到创业者和从业者们。
蒋先生(微信号love-drunk-hard),直播行业老兵。
为了节约存储空间,我们在设备上播放的视频文件都是经过压缩的;在播放过程,需要进行一个反射的解压缩过程,这就是 解码
软解码的解码过程完全由 CPU 完成的,所以 对 CPU 的性能要求非常高 。如果 CPU 性能不行, 解码速度跟不上,那我们所看到的画面就是不流畅、有卡顿的,以当前市场的手机设备,软解 4K 的视频,就非常明显看到这种现象。同时,由于 CPU 是非常耗电的, CPU 的使用率越高, 耗电量越高, 所以 软解码是非常耗电的 。
而硬解码是通过 GPU 等类似具备 图形处理功能的芯片完成解码过程,而 GPU 是基于大的吞吐量、并发计算设计,对数据相关性不大的重复运算,有时加速比能达到几百倍甚至更高,所以, 使用 GPU 实现视频解码, 速度远快于软解码 。 另外,GPU 耗电量是远小于 GPU ,所以 硬解码耗电量是非常小的 。
但由于,GPU 本身限于 GPU 开发平台,只能对 GPU 本身支持的编码格式才能进行解码,所以只有 符合硬解的编码格式的视频才能使用硬解码 ,例如 H264 格式。
软解码
硬解码
这里举例的视频是 720P ,所以比较并不是很明显。 不过,还是可以看出硬解码比软解码对 CPU 的使用率小很多:
同时,帧率硬解码比软解码要高很多,也意味着硬解画面会更流畅:
建议: 对于符合硬解码的编码格式,例如H264,采用硬解码进行解码;不符合硬解码的编码格式视频,才采用软解码 。
这样,不仅仅降低对 CPU 的负荷,让画面更流畅,还大大降低耗电量。
视频解码的步骤分为:
首先,无论是 硬件解码 还是 软件解码 ,所进行的解码过程和解码结果都是完全一样的。
他们的 区别 就是视频解码的工作是由 CPU 完成,还是由 GPU 来完成而已。
因此, 在理论上硬件解码和软件解码的效果应该是完全一样的 。
但在最后一个解码步骤 PostProc ( 显示后处理,解码去块滤波操作 Deblocking ) 。
Deblocking 的意思为解码去块,能够消除 H264 压缩编码可能产生的马赛克现象,真实地还原视频图像。
Deblocking 对 CPU 提出了较高的要求,在 CPU 性能不够时 , 开启 GPU 硬件加速就会关闭解码去块滤波操作 (Deblocking) ,这时播放一些影片会看到较明显的马赛克现象,明显影响画面质量。
换句话说,确实存在, 在 CPU 性能不够的时候,启用 硬解码 ,会关闭解码去块滤波操作 (Deblocking) ,明显影响画面质量 。
但基于当前手机设备,大多数 CPU 的性能足够满足于硬解码的需求,所以, 出现这种情况的手机设备必然是低端机、远次于目前市场的微量手机 。
另外,我们对 iOS 和 Android 各种机型实际测试中,也未曾发现开启硬解后,画质明显下降的现象。
硬解和软解的区别如下:
工作方式不同
硬件解码就是通过显卡的视频加速功能对高清视频进行解码。显卡的GPU/VPU要比CPU更适合这类大数据量的、低难度的重复工作。
软解码是纯粹依靠CPU来解码的方式,将解压高清编码的任务交给CPU。
解码速度不同
硬解码最大的优点就是速度非常快(与软解码相比较而言,在相同条件下),再有就是省电。
视频的网络传输延迟
在相同的网络环境下,视频的网络传输延迟和软硬件编解码器的选择有直接关系。相比软件编解码器,独立工作的硬件编解码器能有足够的专用资源完成编解码任务,不受其他电脑中运行程序对系统调度和CPU占用的影响。
画质不同
无论是硬件解码还是软件解码,所进行的解码过程和解码结果都是一样的。有的显卡会有解码去块滤波操作,能够消除可能产生的马赛克现象,真实地还原视频图像。
什么是硬解、软解。
1、什么是硬解?
硬解是要机器中的专门的解码芯片来完成,质量因厂家的技术能力而定,部分厂商技术实力强,兼容性和解码效果做的比较好,而有些厂商技术实力稍差,兼容性和解码效果做的就不尽如意。
2、什么是软解?
软解就是用CPU来解码,需要CPU的性能与处理能力较强,但对流媒体格式兼容性比较好,因为软解库是我们自己开发的,质量我们能控制。
一个直播系统大概可以分为一下几个模块,媒体模块,服务模块,管理模块。媒体模块是其中的核心,又可分为采集,前处理,编码,传输,解码,渲染这几个环节。
1、采集
采集是直播系统中的第一环节,获取视频源。 因为iOS是软硬件种类不多,官方也提供了稳定可靠的接口,比较简单。 Android因为机型种类繁多,需要适配机型,会是很大一部分工作。 而PC也面临各种摄像头驱动,难点在于机型适配。
2、前处理
主要用于图像美化,风格化,图像处理方面。除了秀场需求以外,在UGC内容生产方式下,大量的内容对美颜都有较高的要求。美颜简单的可以通过美颜镜头,但局限性大,限于PC端的主播,更好的办法是通过软件实现,需要图像处理方面的人员,美颜算法需要需要用到GPU编程, 难点在于美颜效果是否自然,GPU占用与效果的平衡。GPU用于高性能计算,但功耗也相对高,需要考虑到手机温度对数据采集的影响。图像处理不仅仅是美颜,在交互中可能会涉及到滤镜,人脸识别,人物风格化等,使得客户拥有更好的互动体验。目前iOS上比较好的图像处理库是GPUImage,提供了丰富的预处理效果,也可利用该库自定义设计。Android上也提供了功能强大的图像处理库grafika。
3、编码
在编码方面,有两种编码方式,硬编码(硬件)与软编码(软件)。编码主要难点有两个:1、处理硬件兼容性问题。2、在高 fps、低 bitrate 和音质画质之间找到平衡。iOS 端硬件兼容性较好,可以直接采用硬编。而 Android 的硬编的支持则难得多,需要支持各种硬件机型,推荐使用软编。
4、传输
传输涉及系统的多个部分,连接主播端,服务端,客服端等多个部分。 传输效率高与否决定直播系统的性能好不好,传输是直播系统非常重要的技术核心。
涉及技术或协议:
传输协议:RTP与RTCP、RTSP、RTMP、HTTP、HLS(HTTP Live Streaming)等
控制信令:SIP和SDP、SNMP等
5、解码和渲染
拉流获取音视频数据后,需要通过解码器解码,渲染才能在播放器上播放。 H264和H265是有所压缩的,在解码恢复之后是缺损的原数据。之前提到的体积最小画质最优的编码参数,就是在这里恢复画质的,该参数组合是非常重要的技术。现在的播放器普遍都需要高清支持,解码也应选择硬解码。iOS能够较好的支持,但Android还需要很多工作去弥补Android在平台差异的缺陷。而在播放端,保证音画同步的同时,保证稳定流畅的直播流量,需要服务端与播放端做调度优化。
以上是媒体模块,还有服务模块的支付,运营,任务等系统,管理模块的客户端设计与维护、后台数据库、后台控制系统等。
现在市场提供直播能力的供应商很多。AnyChat、微吼、网易云、阿里云都可以提供直播APP开发能力。
1、从推流到拉流的通道,这当中包括数据采集→数据编码→数据传输(流媒体服务器) →解码数据→播放显示整个流程;
2、内容复制分发,也就是cdn这块,服务器收集到主播视频后再通过在全国各地的节点将视频内容分发到终端。cdn是直播中最贵的,技术难度较高,一般都是采用第三方的;如果自己做的话,也需要和cdn厂商对接有经验的技术,不然的话自己做会花费很长的时间和精力还不一定能够达到市场上完善的水平,很可能就会是给自己埋了一颗定时炸弹,一到承受临界点就会“爆炸”;
3、美颜:美颜涉及到复杂的算法和图像处理技术,美颜起初是用于上,目前上的美颜技术已经较为成熟,然而在视频上的美颜还需要很长的路要走,这个技术点也是比较难得,缺少了这个功能的话我相信你的直播平台肯定是不会有很多人愿意参与的;
4、聊天室:我们在看直播的时候,还可以在聊天室中聊天,这是应用了im及时通讯中的聊天室功能,聊天室和群聊的区别是,只有用户进入聊天室才能发言,看到好友,退出聊天室后就类似于退群,就收不到消息,看不到用户,看不到聊天记录了;
5、服务器:对于直播产品来说,流量变化是非常大的,一天中直播的流量高峰期基本在晚上,有时候搞个活动,或者某个名人来直播流量猛增,你的服务器承受不了的话肯定是要报废的,影响正常的用户体验从而降低自己直播平台的使用度。
这基本上就是一个直播系统开发的完整流程,你要相信每一步都不是简简单单就能都做到的,每一个模块流程都是一个技术需求点,所以真正想有一套自己的直播系统除了自己找有经验的人开发就是找第三方来帮忙开发了。
因为不管是在技术门槛、CDN、带宽上都是有很大门槛的,还要选择好适合自己的第三方视频云,技术上面必须要有支持否则一旦出现问题你将“死无葬身之地”。
欢迎分享,转载请注明来源:浪漫分享网
评论列表(0条)