上一篇博客讲了关于的Red5直播系统的基本开发环境搭建,这一章就讲讲关于Red5基本通讯的实现(推流与拉流),下一篇将再完善一下项目代码讲讲Red5与SpringMVC、Maven等的整合。
值得一提的是,虽说Red5是一个采用Java开发的Flash流媒体服务器,流化FLV、MP3文件,但是本人测试过,它不仅支持web的推拉流,也支持手机移动端的推拉流。Red5在移动手机端的推拉流将会在后面也讲一讲给大家简单演示一下。
首先回顾一下上一篇博客的一些东西。上一篇,我们完成了基本的Red5服务端的环境搭建,搭建完成后的目录如下图所示:
这里先讲一下几个重要的地方:
①Application类:这个类集成了MultiThreadedApplicationAdapter类,是Red5中最基本也是最重要的类,它提供了操作SharedObjects和Streams的方法,还有连接和服务列表,是一个应用程序基本的Iscope。它实现了IstreamAwareScopeHandler接口,提供了在应用程序中控制流的方法。它还提供了一个很有用的事件控制器,可以拦截流、授权用户访问等。可以在其子类中添加各种方法,在客户端上通过NetConnection.call()方法调用服务器端的方法。这与Flash Media Server不同,FMS需要将你的客户端方法保存在服务器端,Red5提供更方便的方式进行远程的调用。
②red5-web.properties:在该文件中主要要配置两个参数webapp.contextPath配置项目的访问路径,默认配置为当前项目路径,不建议更改。webapp.virtualHosts表示访问控制,默认Red5给加了一个192的ip,如果你的内网Ip和它不同你可以修改或直接改为*,意思是所有ip都可以访问。
③red5-web.xml:打开该文件可以看到<bean id ="web.handler" class="org.red5.core.Application"> 可以看到这里配置了application.java来得到red5的各种事件状态,当然这个已经被创建了,我们可以自己修改。如果项目的包路径变化,如:com.fise.wujie 那么对应的class属性值也要做修改。
初步讲解完了Red5的项目结构后,下面讲解一下它是怎样完成基本的通信的。
在eclipse中正常启动myOnline后,在浏览器(建议谷歌浏览器)中打开:
http://localhost:5080/demos/publisher.html,
如果浏览器显示如下:
说明是flash player被禁用了。在地址栏输入:http://localhost:5080,然后点击启用即可。如下图所示:
启用后,打开http://localhost:5080/demos/publisher.html的界面如下图所示:
上图是在Web端连接Red5服务端的过程,将Locations值该为rtmp://localhost/myOnline,
rtmp是Red5最主要的流传输的协议和服务,除此之外,Red5还支持rtmpt、mrtmp等协议,
简单说下rtmp协议:它可以支持网络数据传输、语音视频流等,由于它是基于TCP连接而构建的通信协议,因此它的配置参数和服务端的TCP Socket编程模式基本一致。
ip地址栏:localhost,服务器是本地的,使用域名代替真实的Ip地址也可以,如果服务器在liunx上等,输入对应的ip地址,这里不需要端口,端口是默认的,然后再是我们的项目名。
点击上图的connect ,在右边可以看见Connect Success,说明和服务器通信成功。连接成功后我们就可以进行推流和拉流的工作。
接下来,我们研究一下推流的实现。推流的工具这里我推荐两个:OBS(Open Broadcaster Software)和VLC,以OBS为例子,OBS下载地址:https://obsproject.com/选择下载对应的版本。安装完成后如下图所示(当前的OBS版本为20.0.1):
默认情况下,启动OBS是黑屏的。我们在“来源”中点击左下角的“+”,添加“显示器捕获”,就可以显示当前的桌面,除此之外,还可以添加“音频输入捕获”、“音频输出捕获”等。
点击右下角的“设置”,界面如下图所示:
我们先关注左边栏的“流”设置,我们自定义流媒体服务器,URL为:
rtmp://localhost/myOnline,与Red5的web端界面Locations一致,流名称是自定义的,这里设置值为11111,可以任意取,如果有多人在推流,那么这个流名称不能重复。
当设置好后,点击右下角的“确定”,回到OBS主界面。然后点击右下角的“开始推流”,如下图所示:
可以看到OBS在向Red5本地服务器推流,下面是推流的数据流。这里就相当于是直播间的播主,当然也可以进行推流的录制等,录制的文件位置在“设置”的“输出”中设置。
推流的实现已经完成,那么拉流呢?我们回到Red5的web端界面,将Names的值也设置为11111,点击connect,点击play,可以看到Web端在同步播放OBS的视频内容,就相当于直播一样,完成了拉流的工作。
到这里,Red5的基本推拉流工作已经可以实现了。
再补充如下几点吧。
1.因为RTMP是Red5最主要的协议和服务,该协议在视频同步上是有延迟的,延迟大概在2~3秒左右。
2.Red5是可以在手机移动端完成推流和拉流工作的,这里推荐一款推拉流APP:易推流,
本人使用的是iphone手机,这个app可以直接在AppStore下载。手机端拉流的App还可以使用VLC,一样效果很不错。
App打开的界面如下,在"直播地址"栏,添加自己的直播地址进行推流,然后在电脑端通过VLC拉流,当然你想用手机端进行拉流也可以。
下面是我测试的截图:
手机端直播
电脑端同步
到此为止,本篇博客完结。如果本博客有什么不对的地方,或是需要改进的地方,欢迎吐槽或是留言。本博客原创,转载请注明出去。