这篇直接真枪实战,搭建一个流媒体服务器,其实这些内容网上都可以搜到,我这里只是记录一下,以备忘。
我下载了最新的red5-server-1.0.2-RELEASE
下载地址:https://github.com/Red5/red5-server/releases/tag/v1.0.2-RELEASE
下载了oflaDemo这个实例的源码
SVN地址:http://red5.googlecode.com/svn/java/example/trunk
下载后解压,配置好环境变量,装好eclipse的red5插件,引入oflaDemo项目,用red5加载此项目,启动服务
如下图
访问一下看看是不是可以正常查看视频
http://localhost:5080/oflaDemo/index.html
如查不可以,连服务也启不了的话,
1、请检查RED5_HOME环境变量有没有设置
2、我在运行red5.bat的时候,报了一个关于+UseStringCache的错,我把这项从BAT里面删除了
如果可行,OK,下面开始搭建自己的项目
最终要实现的效果:
可以从自定义目录下播放视频,并可以自定义JSP页面通过名称访问视频,当然,这只是一个Demo
1、加载好oflaDemo这个项目,在org.red5.demos.oflaDemo包里面加一个类:
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 = "";
/** Path that contains VOD streams. */
public String playbackPath = "";
/** Set if the path is absolute or relative */
public boolean resolvesAbsolutePath = false;
public void setRecordPath(String path) {
recordPath = path;
}
public void setPlaybackPath(String path) {
playbackPath = path;
}
public void setAbsolutePath(Boolean absolute) {
resolvesAbsolutePath = absolute;
}
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;
return filename;
}
@Override
public boolean resolvesToAbsolutePath() {
// TODO Auto-generated method stub
return resolvesAbsolutePath;
}
}
然后在red5-web.xml里面加入
<!-- 自定义视频读取路径 -->
<bean id="streamFilenameGenerator" class="org.red5.demos.oflaDemo.CustomFilenameGenerator">
<property name="recordPath" value="${recordPath}" />
<property name="playbackPath" value="${playbackPath}" />
<property name="absolutePath" value="${absolutePath}" />
</bean>
再在red5-web.properties里面自定义路径
recordPath=D:\\recordedStreams\\
playbackPath=D:\\videoStreams\\
absolutePath=true
这里说下上面参数的意义
如果absolutePath设置成false的话,则是相对路径,相对当前项目的根路径。
OK,启动服务,将文件放在你定义好的路径下,则可以正常观看。
如果在上传文件时,再通过转码,将转好的文件放在固定的目录下,则一个上传视频,观看视频的雏形就做好了。
有时间再写下转码的内容。