前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >流媒体Red5服务自定义媒体文件路径

流媒体Red5服务自定义媒体文件路径

作者头像
庞小明
发布2018-12-06 10:39:10
1.3K0
发布2018-12-06 10:39:10
举报
文章被收录于专栏:pangguomingpangguoming

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

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

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

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

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

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

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

代码语言:javascript
复制
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中增加以下三个方法

代码语言:javascript
复制
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的配置代码改成下面这样

代码语言:javascript
复制
<bean id="streamFilenameGenerator" 
class="path.to.your.CustomFilenameGenerator">
<property name="recordPath" value="recordedStreams/" />
<property name="playbackPath" value="videoStreams/" />

<property name="absolutePath" value="true" />
代码语言:javascript
复制
</bean>

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

代码语言:javascript
复制
<bean id="streamFilenameGenerator" 
class="path.to.your.CustomFilenameGenerator">
<property name="recordPath" value="${recordPath}" />
<property name="playbackPath" value="${playbackPath}" />

<property name="absolutePath" value="true" />
代码语言:javascript
复制
</bean>

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

recordPath=recordedStreams/

playbackPath=videoStreams/

如下所示:

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-11-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云点播
面向音视频、图片等媒体,提供制作上传、存储、转码、媒体处理、媒体 AI、加速分发播放、版权保护等一体化的高品质媒体服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档