Red5应用开发(二)直播串流与录制

环境

  • 操作系统:win10 1803

  • Eclipse版本:4.7.3a (Oxygen) J2EE版本

  • Red5 Server版本: 1.0.8 Release

    环境搭建参考前一篇文章:Red5应用开发(一) 开发环境搭建 后续不再涉及red5 flash客户端的开发,所以无需再安装flash builder插件。

建立新工程

在Eclipse当中新建一个Dynamic Web Project,自定义一个项目名称,Target Runtime选择Red5 Server Runtime,Configuration处选择Modify,然后勾选Red5 Application Generation的选项。

添加依赖

Build Path中Add External JARS,添加red5的lib目录当中的slf4j-api-{Version}.jar,这个是日志相关的工具包。

修改程序

完整的工程文件见 Github

默认生成的代码即可用来接受客户端的推流,然后还需要增加录制功能。Red5的录制功能相对简单,只能够将直播流录制为FLV文件,视频分辨率与原始视频分辨率一致。

本例子当中采用的是当有视频流推入的时候,自动对视频流进行录制。覆写org.red5.server.adapter.MultiThreadedApplicationAdapter 类当中的streamPublishStart()方法,当该类的监听器监听到有视频流推入的时候会自动触发该方法。然后在该方法中编写录制部分的功能代码。

@Override
public void streamPublishStart(IBroadcastStream stream)
{
    if(true)
    {
        try 
        {
            String streamName = stream.getPublishedName();
            log.info("Recording stream: " + streamName );
            stream.saveAs(streamName, true);
        } 
        catch (IOException | ResourceNotFoundException
                 | ResourceExistException e) 
        {
            e.printStackTrace();
        }
    }
}   

IBroadcastStream对象即为客户端推入的视频流,调用 saveAs(String name, boolean isAppend)方法即可对该视频流进行录制,saveAs()的两个参数分别为录制的文件名,以及录制时是否采用叠加模式。当客户端断开连接时,会自动停止录制。默认录制的文件路径在【应用路径】/streams路径下。

自定义录制路径

如果需要修改路径,需要借助Red5提供的File Name Generator Service,参见Red5 wiki.在工程的Java包当中添加一个CustomFilenameGenerator.java的文件,文件的内容来自官方Wiki,然后修改WebContent/WEB-INF/red5-web.xml 的配置,添加以下的配置内容,

<bean id="streamFilenameGenerator" class="org.red5.core.CustomFilenameGenerator">
       <property name="recordPath" value="D:/code/RED5/recodPath/" />
       <property name="playbackPath" value="D:/code/RED5/recodPath/" />
       <property name="absolutePath" value="true" />
bean>

这些配置字段与CustomFilenameGenerator.java 的内容相对应,org.red5.core 改成所创建的项目的Java包名,recordPath、playbackPath、absolutePath为Java文件当中的三个静态字段,根据自己的需要改成对应的配置。

欢迎页面在WebContent目录下放一个index.html即可。

功能测试

将项目部署到Red5本地服务器上进行测试,利用OBS进行推流测试。OBS推流地址格式为

rtmp://127.0.0.1/liveapp ,liveapp为创建的Red5应用的名称,流名自定义即可。

你可能感兴趣的:(Red5应用开发(二)直播串流与录制)