zoukankan      html  css  js  c++  java
  • 流媒体Red5服务自定义媒体文件路径

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

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

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

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

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

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

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

    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

    <bean id="streamFilenameGenerator" 
          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/" />

    <property name="absolutePath" value="true" />
    </bean>
    

      


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

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

    <property name="absolutePath" value="true" />
    </bean>

      


     

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

    recordPath=recordedStreams/

    playbackPath=videoStreams/

    如下所示:

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

     

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


  • 相关阅读:
    私有属性的另类访问方式
    获取类所有属性和查看帮助文档
    类的私有属性及私方法(请注意属性的传值方式)
    类的私有属性及私方法
    类的定义
    怎么区分类变量和实例变量?
    面向对象编程案例04--访问控制
    面向对象编程案例03---继承之高级部分
    python 面向对象编程案例01
    静态方法
  • 原文地址:https://www.cnblogs.com/pangguoming/p/9910406.html
Copyright © 2011-2022 走看看