Knightjie的gravatar头像
Knightjie 2018-10-31 11:11:54
Red5之基于Red5的直播系统开发(二)

     上一篇博客讲了关于的Red5直播系统的基本开发环境搭建,这一章就讲讲关于Red5基本通讯的实现(推流与拉流),下一篇将再完善一下项目代码讲讲Red5与SpringMVC、Maven等的整合。

    值得一提的是,虽说Red5是一个采用Java开发的Flash流媒体服务器,流化FLV、MP3文件,但是本人测试过,它不仅支持web的推拉流,也支持手机移动端的推拉流。Red5在移动手机端的推拉流将会在后面也讲一讲给大家简单演示一下。

    首先回顾一下上一篇博客的一些东西。上一篇,我们完成了基本的Red5服务端的环境搭建,搭建完成后的目录如下图所示:

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

如果浏览器显示如下:

Red5之基于Red5的直播系统开发(二)

说明是flash player被禁用了。在地址栏输入:http://localhost:5080,然后点击启用即可。如下图所示:

Red5之基于Red5的直播系统开发(二)

启用后,打开http://localhost:5080/demos/publisher.html的界面如下图所示:

Red5之基于Red5的直播系统开发(二)

上图是在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):

Red5之基于Red5的直播系统开发(二)

默认情况下,启动OBS是黑屏的。我们在“来源”中点击左下角的“+”,添加“显示器捕获”,就可以显示当前的桌面,除此之外,还可以添加“音频输入捕获”、“音频输出捕获”等。

  点击右下角的“设置”,界面如下图所示:

Red5之基于Red5的直播系统开发(二)

我们先关注左边栏的“流”设置,我们自定义流媒体服务器,URL为:

rtmp://localhost/myOnline,与Red5的web端界面Locations一致,流名称是自定义的,这里设置值为11111,可以任意取,如果有多人在推流,那么这个流名称不能重复。

当设置好后,点击右下角的“确定”,回到OBS主界面。然后点击右下角的“开始推流”,如下图所示:

Red5之基于Red5的直播系统开发(二)

可以看到OBS在向Red5本地服务器推流,下面是推流的数据流。这里就相当于是直播间的播主,当然也可以进行推流的录制等,录制的文件位置在“设置”的“输出”中设置。

   推流的实现已经完成,那么拉流呢?我们回到Red5的web端界面,将Names的值也设置为11111,点击connect,点击play,可以看到Web端在同步播放OBS的视频内容,就相当于直播一样,完成了拉流的工作。

Red5之基于Red5的直播系统开发(二)

到这里,Red5的基本推拉流工作已经可以实现了。

再补充如下几点吧。

  1.因为RTMP是Red5最主要的协议和服务,该协议在视频同步上是有延迟的,延迟大概在2~3秒左右。

  2.Red5是可以在手机移动端完成推流和拉流工作的,这里推荐一款推拉流APP:易推流,

本人使用的是iphone手机,这个app可以直接在AppStore下载。手机端拉流的App还可以使用VLC,一样效果很不错。

     App打开的界面如下,在"直播地址"栏,添加自己的直播地址进行推流,然后在电脑端通过VLC拉流,当然你想用手机端进行拉流也可以。

Red5之基于Red5的直播系统开发(二)

下面是我测试的截图:

                        手机端直播

Red5之基于Red5的直播系统开发(二)

                       电脑端同步

Red5之基于Red5的直播系统开发(二)

   到此为止,本篇博客完结。如果本博客有什么不对的地方,或是需要改进的地方,欢迎吐槽或是留言。本博客原创,转载请注明出去。


打赏
最近浏览
fan1754815410 2020年9月29日
暂无贡献等级
8086111  LV9 2020年9月10日
wangfeijiao  LV1 2020年7月8日
zuidama888  LV2 2020年4月28日
某天天  LV1 2020年4月27日
yang000 2020年4月27日
暂无贡献等级
zouchangan 2020年4月14日
暂无贡献等级
18312477462 2020年4月8日
暂无贡献等级
wdqlxl 2020年4月2日
暂无贡献等级
Misshuang  LV13 2020年3月3日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友