这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战git
随着短视频的火爆,手机端的直播也愈来愈流行,某音某手的催生下,不少app中也加入了直播功能。按产品经理的话来讲:有没有人看是一方面,可是你的有。 因而乎苦逼的程序员在威逼利诱下苦苦的啃着流媒体等从未接触过的字眼。程序员
graph LR PC[PC] -- 推流 --> server[流媒体服务器] Android[Android] -- 推流 --> server[流媒体服务器] IOS[IOS] -- 推流 --> server[流媒体服务器] server -- 播放 --> web[web] server -- 播放 --> Android1[Android] server -- 播放 --> IOS1[IOS]
流媒体并非单独的一门技术,而是一套网络传输和音视频编解码的解决方案。github
若是再详细一些,它能够分为如下部分:web
网络传输 socket技术浏览器
协议层 rtmp服务器
封装层 flvmarkdown
编解码 h264 aac网络
能够说上面随便提到的技术对开发者来讲都是难点!app
那么咱们应该怎么办?socket
随着直播愈来愈火,相应的直播解决方案也应运而生。
若是app上不是专门作直播,只是须要有直播功能,建议使用第三方平台的解决方案,不少大厂都有了一整套的解决方案,为了不广告嫌疑,这里我就不推荐了,有兴趣你们自行搜索看看。
接着一款开源的流媒体的搭建 - Red5
我研究过一个现象,使用某远程软件,局域网中使用Android手机控制Windows,画面不复杂时,居然能够达到20ms以内,可把我惊呆了。毕竟编解码速度加上网络的速度传输,可能到达了极限。
我后来尝试过Android设置之间进行屏幕共享,使用硬编码硬解码能够达到100ms,并以为没有思路能够再优化了。
因此某软件确实牛啊牛啊!
这样再思考一下。
若是对稳定性高实时性要求不那么高的场景,可使用流媒体,好比直播。
若是对实时性要求高,可使用点对点技术,好比无纸化会议、远程控制、远程测试平台。
安装以前须要配置jdk的环境变量。
下载后移动red5文件夹到某个目录
配置red5的环境变量。
添加变量名:red5_home
变量值:E:\red5-server
添加变量名:ClassPath
变量值:.(不配置此变量,或者此变动的值不是“.”,red5启动的过程会抛异常)
到red5目录下,双击“red5.bat”文件,启动red5
找到red5-server\conf\red5.properties文件,进行编辑
http.host、http.port 对应 可访问的地址和端口(无需求可不更改)
rtmp.host、rtmp.port 对应推送流的地址和端口
如图:
此时,一个简单的流媒体服务器已经搭建完成。咱们再使用Android的app进行推流或者播放就能够了。