流媒体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的下面的例子

流媒体Red5服务自定义媒体文件路径的更多相关文章
- python学习笔记(自定义库文件路径)
博主最近在弄接口自动化.主要是基于python自带的unittest框架.包括 Pubilc模块定义所有接口. Main模块根据业务需求重新封装接口便于测试. config文件导入测试业务的固定参数. ...
- python自定义库文件路径
各有各的小烦恼,各有的小期待 这是人家私事,不要大嘴巴 在Pycharm中import whois时,总是失败 原因是安装了python3.x相关操作过程,将环境变量path中关于Python的配置c ...
- 基于FFMPEG SDK流媒体开发1---解码媒体文件流信息
近期项目涉及到流媒体等开发,因为有过开发经验深知其难度所在,没办法仅仅能又一次拾起,最新版的SDK被改的一塌糊涂,只是大体的开发思路都是一样的,看多少书查多少资料都无用,一步一步的编写代码 才是学好的 ...
- spring boot 加载自定义log4j 文件路径
spring boot 使用log4j 打印时,需首先去除自带 Logger ,然后加入log4j 依赖 <dependencies> <!-- https://mvnreposit ...
- C# 获取媒体文件播放时长
引用: Interop.Shell32.dll 方法: /// <summary> /// 获取媒体文件播放时长 /// </summary> /// <param na ...
- CKFinder 自定义文件路径扩展ConfigurationPathBuilder
CKFinder 自定义文件路径扩展ConfigurationPathBuilder 打开config.xml当中可以看到如下配置 <basePathBuilderImpl>com.ckf ...
- android自定义camera以及uri和文件路径之间的转换
相对直接调用系统的camera,这种方法使用得相对还少一些.根据api文档,步骤如下: 定义一个预览类 可以参照<android高薪之路>这本书上面,有这种方法的一种完整实现 而对应的ac ...
- Ubuntu中使用Nginx+rtmp搭建流媒体直播服务
一.背景 本篇文章是继上一篇文章<Ubuntu中使用Nginx+rtmp模块搭建流媒体视频点播服务>文章而写,在上一篇文章中我们搭建了一个点播服务器,在此基础上我们再搭建一个直播服务器, ...
- .NET MVC4 实训记录之五(访问自定义资源文件)
.Net平台下工作好几年了,资源文件么,大多数使用的是.resx文件.它是个好东西,很容易上手,工作效率高,性能稳定.使用.resx文件,会在编译期动态生成已文件名命名的静态类,因此它的访问速度当然是 ...
随机推荐
- webpack——publicPath路径问题
output: { filename: "[name].js", path:path.resolve(__dirname,"build") } 如果没有指定pu ...
- window 连linux
https://blog.csdn.net/ruanjianruanjianruan/article/details/46954681 https://blog.csdn.net/u013754317 ...
- 双线程 线性dp 传纸条
/* 两种做法:一是暴力dp[i][j][k][l] 二是以走的步数k作为阶段, dp[k][i][j]表示走到第k步,第一个人横坐标走到i,第二个人横坐标走到j 可以以此推出第第一个人的坐标为[i, ...
- poj2279 线性dp
#include<iostream> #include<cstdio> #include<cstring> #define ll long long using n ...
- python3 + selenium 之窗口切换
窗口切换 此代码来源学习后对淘宝操作实践记录: 以下代码在Chrome61和IE11上正常运行,Firefox5.7上运行存在一些问题须改进,应该是火狐不兼容差link_text部分和循环经常报错,在 ...
- Django的auto_now=True没有自动更新
auto_now=True自动更新,有一个条件,就是要通过django的model层. 如create或是save方法. 如果是filter之后update方法,则直接调用的是sql,不会通过mode ...
- Hibernate的主配置文件hibernate.cfg.xml
1:Hibernate的主配置文件的名字必须是hibernate.cfg.xml(主要配置文件中主要配置:数据库连接信息,其他参数,映射信息):常用配置查看源码:Hibernate\hibernate ...
- java 使用反射在dto和entity 实体类之间进行转换
package com.example.demo.utils; import java.lang.reflect.Method; import java.util.List; import com.e ...
- springmvc中登录过滤器使用
前言 一般的javaWeb项目中我们肯定会使用过滤器来实现对一些请求的过滤,通过过滤来实现对一些请求参数的设置和校验,比如我们比较熟悉的CharacterEncodingFilter就是一个字符编 ...
- Scala入门教程---《chang哥教你一天搞定Scala》
<chang哥教你一天搞定Scala> /** * <chang哥教你一天搞定Scala> * scala是一门多范式编程语言,集成了面向对象编程和函数式编程等多种特性. * ...