流媒体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文件,会在编译期动态生成已文件名命名的静态类,因此它的访问速度当然是 ...
随机推荐
- 测试开发之前端——No9.HTML5中的视频/音频
HTML5 视频和音频的 DOM 参考手册 HTML5 DOM 为 <audio> 和 <video> 元素提供了方法.属性和事件. 这些方法.属性和事件允许您使用 JavaS ...
- 步步为营-71-asp.net的简单练习(图片处理)
1 原有图片添加水印 1.1 封装一个类,用于获取文件路径 using System; using System.Collections.Generic; using System.IO; using ...
- 正确停止线程的方式三 使用Thread类中的内置的中断标记位-----------不熟悉
package charpter10; public class Processor implements Runnable { @Override public void run() { for ( ...
- 使用spring-boot-starter-data-jpa 怎么配置使运行时输出SQL语句
在 application.properties 中加入以下配置 spring.jpa.show-sql=true
- oracle表分区创建
一.什么是分区表表分区有以下优点: 1.数据查询:数据被存储到多个文件上,减少了I/O负载,查询速度提高. 2.数据修剪:保存历史数据非常的理想. 3.备份:将大表的数据分成多个文件,方便备份和恢复. ...
- <转>用 Java 技术创建 RESTful Web 服务
转自:https://www.ibm.com/developerworks/cn/web/wa-jaxrs/#N1017E JAX-RS:一种更为简单.可移植性更好的替代方式 Dustin Amrhe ...
- 查看Windows系统里的进程已运行的时间
搜索 ProcessExplorer ,可以去微软下载它.右键点击项类,selcet conlumns...在 Process Performance 里 选择start time.有了进程的启动时间 ...
- python3安装pip3的方法
1.点击链接:https://bootstrap.pypa.io/get-pip.py,并下载get-pip.py文件; 2.文件下载完成之后,cd到当前目录,并进行安装,如下: root@zhuzh ...
- Codeforces 815C Karen and Supermarket 树形dp
Karen and Supermarket 感觉就是很普通的树形dp. dp[ i ][ 0 ][ u ]表示在 i 这棵子树中选择 u 个且 i 不用优惠券的最小花费. dp[ i ][ 1 ][ ...
- Codeforces Round #309 (Div. 2) -D. Kyoya and Permutation
Kyoya and Permutation 这题想了好久才写出来,没看题解写出来的感觉真的好爽啊!!! 题目大意:题意我看了好久才懂,就是给你一个序列,比如[4, 1, 6, 2, 5, 3],第一个 ...