流媒体Red5服务搭建以及自定义媒体介质路径

1、下载Red5Server

首先到github之中去下载 https://github.com/Red5/red5-server/releases 下载最新稳定版本的,根据实际情况下载stable版本

同时为了开发和修改以及自定义路径;

2、安装Red5 eclipse插件

需要插件 red5-eclipse-plugin

https://github.com/Red5/red5-eclipse-plugin

2.1、解压下载的插件包,解压后包结构如图所示 
这里写图片描述 
2.2、把1234四个项目分别导入最新版eclipse,Import -> Existing projects to workspace -> Select root directory,

导 入后如图所示,导入后项目不能有报错的情况存在,如果报错可能下载的eclipse版本有问题,下载最新版eclipse. 

2.3、开始安装插件,选择导出项目,如图 

2.4、切换到Plug-in Development选项,选择Deployable plug-ins and fragments,如图 

2.5、点击next,把上面三个项目全选中,下面选第三个选项,如果

2.6、点finish开始安装。 

2.8、安装完成后重启eclipse,window->show view->servers->new server.出现Red5 Server Runtime选项,说明安装成功。

3、Eclipse之中创建Red5Server

3.1、把jre换成你的JRE;RunTime Directory换成解压到E盘的目录E:/red5-server。

3.2、凡事提示jar包有问题的,都去源文件中修改名字。例如上面说找不到red-io.jar,

那么就去E:/red5-server中把red5-io-1.0.8-RELEASE.jar拷贝一份并把副本改名为red-io.jar!

再例如:red5-server-common-xx.jar把版本去掉只留下red5-server-common.jar

最后如下。点解next

3.3、根据错误,结合自己red5server所在的路径改。

finish赶快启动服务器试一下吧!

4、 创建类实现自定义媒体访问路径

使用bean对自己的项目进行配置,更换默认的视频播放目录和视频录制目录.在0.6版的时候,

我们可以直接在red5-web.properties中写入playbackPath=mypath/来进行目录定义,

但是D5发现在0.7以后的版本,这样写已经不起作用了.因此到网上查了一下,找到了这篇文章. 文章地址

 

RED5中文件名的产生控制
RED5使用scope服务来对其本身的一些功能进行控制.其中一个scope服务是IStreamFilenameGenerator,

它用来产生点播VOD流或录制流的的文件名.我们可以通过自定义该scope来达到改变默认视频目录的目的.

自己的IStreamFilenameGenerator
想要自定义视频目录的路径,我们必须implements一个自己的文件产生器,代码如下

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package  org.red5.demos.oflaDemo;
 
import  org.red5.server.api.scope.IScope;
import  org.red5.server.api.stream.IStreamFilenameGenerator;
 
public  class  CustomFilenameGenerator  implements  IStreamFilenameGenerator {
     /** Path that will store recorded videos. */
     public  String recordPath =  "recordedStreams/" ;
     /** Path that contains VOD streams. */
     public  String playbackPath =  "videoStreams/" ;
     /** Set if the path is absolute or relative */
     public  boolean  resolvesAbsolutePath =  false ;
 
     public  String generateFilename(IScope scope, String name, GenerationType type) {
         // Generate filename without an extension.
         return  generateFilename(scope, name,  null , type);
     }
 
     public  String generateFilename(IScope scope, String name, String extension, GenerationType type) {
         String filename;
         if  (type == GenerationType.RECORD)
             filename = recordPath + name;
         else
             filename = playbackPath + name;
 
         if  (extension !=  null )
             // Add extension
             filename += extension;
         System.out.println( "filename: " +filename);
         return  filename;
     }
}

  上述代码所构成的文件发生器,将产生类似recordedStreams/red5RecordDemo1234.flv的视频录制文件以及将videoStreams作为VOD点播的默认目录

修改配置文件另我们的文件管理器生效
下一步,我们自定义的文件产生器必须通过配置文件来生效,这样才能对我们的应用产生影响.
修改你的项目中WEB-INFO/red5-web.xml

  1. <bean id="streamFilenameGenerator" 
  2.       class="path.to.your.CustomFilenameGenerator" />

请注意,实际上你的CustomFilenameGenerator肯定是在其他的包中,因此这里我们用path.to.your来表示.

你需要用实际的路径来代替它,例如com.D5Power.CustomFilenameGenerator.

这样一来,你就可以通过我们编写的CustomFilenameGenerator来控制你想要的视频播放目录和录制目录了,

但是对于一个项目来说,这样似乎很麻烦,我们要修改目录的时候总是要去修改源代码,并重新进行编译.

我们需要象原来的0.6版程序一样,只通过配置文件就可以进行配置.这样更方便一些.那么,对我们的代码做一些修改吧.

向CustomFilenameGenerator中增加以下三个方法

复制代码
    
    public void setRecordPath(String path) {
        recordPath = path;
    }

    public void setPlaybackPath(String path) {
        playbackPath = path;
    }

    public void setAbsolutePath(Boolean absolute) {
        resolvesAbsolutePath = absolute;
    }

    public boolean resolvesToAbsolutePath() {
        return resolvesAbsolutePath;
    }
复制代码

接下来,把我们的bean的配置代码改成下面这样

<bean id="streamFilenameGenerator" 
      class="path.to.your.CustomFilenameGenerator">
    <property name="recordPath" value="recordedStreams/" />
    <property name="playbackPath" value="videoStreams/" />
</bean>

当然,你还可以把这两个变量的声明移到你的应用中WEB-INF/red5-web.properties文件中,于是上述代码变成了:

<bean id="streamFilenameGenerator" 
      class="path.to.your.CustomFilenameGenerator">
    <property name="recordPath" value="${recordPath}" />
    <property name="playbackPath" value="${playbackPath}" />
</bean>

 

而在red5-web.properties中多出以下两个变量的声明就可以了

recordPath=recordedStreams/

playbackPath=videoStreams/

如下所示:

recordPath=E:/Red5Medias/
playbackPath=E:/Red5Medias/

 可以创建一个演示demo的下面的例子 


猜你喜欢

转载自blog.csdn.net/jianxia801/article/details/79726501