Android屏幕共享与直播-初识流媒体服务器

2,050 阅读3分钟

这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战

Android屏幕共享与直播-初识流媒体服务器

随着短视频的火爆,手机端的直播也越来越流行,某音某手的催生下,很多app中也加入了直播功能。按产品经理的话来说:有没有人看是一方面,但是你的有。 于是乎苦逼的程序员在威逼利诱下苦苦的啃着流媒体等从未接触过的字眼。

一、效果gif

1.gif

二、屏幕共享与直播模型


graph LR

PC[PC] -- 推流 --> server[流媒体服务器]

Android[Android] -- 推流 --> server[流媒体服务器]

IOS[IOS] -- 推流 --> server[流媒体服务器]

server -- 播放 --> web[web]

server -- 播放 --> Android1[Android]

server -- 播放 --> IOS1[IOS]

三、流媒体的组成

流媒体并不是单独的一门技术,而是一套网络传输和音视频编解码的解决方案。

如果再详细一些,它可以分为以下部分:

  • 网络传输 socket技术

  • 协议层 rtmp

  • 封装层 flv

  • 编解码 h264 aac

可以说上面随便提到的技术对开发者来说都是难点!

那么我们应该怎么办?

随着直播越来越火,相应的直播解决方案也应运而生。

如果app上不是专门做直播,只是需要有直播功能,建议使用第三方平台的解决方案,很多大厂都有了一整套的解决方案,为了避免广告嫌疑,这里我就不推荐了,有兴趣大家自行搜索看看。

接着一款开源的流媒体的搭建 - Red5

四、应用场景

我研究过一个现象,使用某远程软件,局域网中使用Android手机控制Windows,画面不复杂时,竟然可以达到20ms之内,可把我惊呆了。毕竟编解码速度加上网络的速度传输,可能到达了极限。

我后来尝试过Android设置之间进行屏幕共享,使用硬编码硬解码可以达到100ms,并觉得没有思路可以再优化了。

所以某软件确实牛啊牛啊!

这样再思考一下。

如果对稳定性高实时性要求不那么高的场景,可以使用流媒体,比如直播。

如果对实时性要求高,可以使用点对点技术,比如无纸化会议、远程控制、远程测试平台。

五、Red5流媒体的搭建

5.1 下载

官方地址:github.com/Red5/red5-s…

5.2 安装并配置环境变量

  1. 安装之前需要配置jdk的环境变量。

  2. 下载后移动red5文件夹到某个目录

  3. 配置red5的环境变量。

添加变量名:red5_home

变量值:E:\red5-server

添加变量名:ClassPath

变量值:.(不配置此变量,或者此变更的值不是“.”,red5启动的过程会抛异常)

5.3 启动与验证

  1. 到red5目录下,双击“red5.bat”文件,启动red5

  2. 在浏览器中输入http://localhost:5080/,可成功打开,表示red5部署成功。如图

2.png

5.4 更改端口

  1. 找到red5-server\conf\red5.properties文件,进行编辑

  2. http.host、http.port 对应 可访问的地址和端口(无需求可不更改)

  3. rtmp.host、rtmp.port 对应推送流的地址和端口

如图:

3.png

此时,一个简单的流媒体服务器已经搭建完成。我们再使用Android的app进行推流或者播放就可以了。