磁力云搜,最强磁力搜索软件
直播技术的实现
其实这一块没想的那么难,但是也没想的那么简单。我一点点分析。流
首先,要理解直播是什么:
图片可以有base64编码,这一串码就是代表这个图片。
视频我们可以理解成是一张张图片的编码的和,展现出来的动图也不过是一张张图片连续播放的结果(我这么说并不准确,我只是为了方便理解)
因为直播是一个个图片传输的,在你刚开播的一秒是没有下一秒的图片的,所以这个视频的编码是要一直传输的,而这种一直传输编码的情况,我们用一个专业术语表示:流。
我不知道别的语言怎么理解,但是java中有字节流,字符流等等,所以这里的流一般是音频+视频。所以具体是什么不深究,只要知道这里的流是用来传输视频的就行。
简单直播流程
然后这里有一张图很好的说明了直播的流程:
如图,直播的流程其实主要就这么多(也可以在中间有别的操作,我说的是最简单的操作),又因为我们决定直播的形式是服务器作为中间站。所以大概流程是直播用户推流到服务器,然后有想要看直播的去服务器拉流。接下来一点点说:
采集。其实这个很好理解,打开语音,摄像头,采集数据。这里也说了,需要终端音视频引擎解决。(终端是指用户直播的设备。比如手机,pc等)
前处理。这个是已经试过的,比如我们现在手机拍照片自带美颜,你以为是你摄像头给你美颜的么?不是的,是摄像头拍出来的是正常照片,手机拍照后对这个照片进行了处理。而这里的前处理也是类似的道理,前端调用麦克风摄像头,拍/录视频的同时对这个视频进行一些加工(我们已经测试完了,反正是可以美颜,磨皮等。刚刚顺口问了下我们前端,说是用的h5 plus中一些自带的api,我是前端小白,不是很理解,反正是能实现就对了。)
编码。这个其实就类似于图片的base 64 一样,视频流传输之前肯定是要经过编码的,应该可能也有很多种设置,反正我们调试用的H264。(关于这个编码我在网上看了下,好像直接影响编码速度解码速度什么的,也就是影响延迟,卡顿,清晰度等。不过我们现在真的是只要能实现就行了,所以暂定h264.没做什么多的尝试)
推流。这个其实刚刚我解释了流是什么,推流应该不难理解,就是把自己这个视频直播的编码以流的形式传给谁。
拉流。和推流对应,就是去有流的地方,把这个直播流拉倒本地。这两个行为其实很容易理解:我把这篇图文上传到简书,也就是推到简书。你们来简书看这篇图文,也就是从简书拉到你的显示器。只不过因为直播推来的都是流而已。
解码。这个其实就不用说了吧,你当时传输的时候是按照一定编码编译的,肯定想要复原要按照这个编码方式解码。
渲染。属于后期显示问题了,就是这个视频已经传到你观看直播的画面,不同的手机会有不同的显示,同一个视频有的手机看颜色发紫(因为我手机防辐射蓝光膜),有的手机看颜色艳丽,有的手机看颜色昏黄,这个就是渲染吧。
如上,其实一个简单的直播就是这么个流程。
这家伙太懒了,什么也没留下。