当前您所在的位置:首页>新闻中心>新品发布
新品发布
行业动态
营销活动

Wowza技术:如何用代码来控制直播流录制的开始和停止?

发布时间:2021/02/23 浏览量:1997

Wowza® 提供了两个代码示例,它展示了如何使用LiveStreamRecordManager API对直播流的录制进行控制,当直播流被发布到Wowza的一个应用上时自动开始录制,当直播流停止发布时,自动停止录制。 

注意: 本文针对Wowza Streaming Engine™ 4.0及以上版本。

你可以下载本文讨论的包含源代码以及编译后的jar包的例子模块zip文件,它们为你展示如何使用最新的 LiveStreamRecordManager API 来实现自动录制功能。 

 

关于两个代码示例

 

StreamRecorderAutoRecordBasicExample 模块为实现对进入一个Wowza应用的所有直播流进行自动录制的需求提供了最基本的功能。它使用了StreamRecorder功能的默认配置参数。 

StreamRecorderAutoRecordAdvancedExample 模块展示了如何设置StreamRecorder的配置参数,例如segmentationType、segmentationDuration、fileFormat等等。 这个模块也实现了一个自定义的录制文件名序号,它实现了IStreamRecorderFileVersionDelegate 接口,这个模块用这个接口设置了StreamRecorder的参数,而没有用Wowza默认的那个。 
这个模块也实现了StreamRecorder的notification listener, 并且设置了StreamRecorder的参数来使用这个listener。这个listener将它在整个StreamRecorder的生命周期中所接收到的通知事件都记录在了日志中。 

StreamRecorder中的参数将被应用到这个模块创建的每一个直播流录制任务中。 

 

关于模块(Module)的基础概念

 

这两个例子模块继承了ModuleBase Java类,并实现了IModuleOnApp 接口。 


这两个例子的主要代码逻辑就是在一个Wowza的application启动的notification方法onAppStart中。 
 

ModuleAutoRecordBasicExample


源代码文件: com.wowza.wms.plugin.livestreamrecord.module.ModuleAutoRecordBasicExample.java 

这个例子展示了对进入Wowza的某个应用的所有直播流进行自动录制所必须的基本功能,代码的基本逻辑介绍如下: 

onAPPStart事件中: 

实例化一个StreamRecorderParameters 对象

Code:

StreamRecorderParameters recordParams = new StreamRecorderParameters(this.appInstance);

StreamRecorderParameters设置参数

Code:

recordParams.segmentationType = IStreamRecorderConstants.SEGMENT_NONE;

recordParams.versioningOption = IStreamRecorderConstants.OVERWRITE_FILE;

注意:

?

Code:

this.vhost.getLiveStreamRecordManager().startRecording(appInstance, recordParams);

当你为一个Wowza应用安装好这个模块后,所有进入这个应用的直播流都将会被安装上面配置的录制参数StreamRecorderParameters来录制。 
 

ModuleAutoRecordAdvancedExample


源代码文件: com.wowza.wms.plugin.livestreamrecord.module.ModuleAutoRecordAdvancedExample.java 

这个例子模块基于basic example,但做了如下改进: 

 

MyFileVersionDelegate class

直播流的录制器在保存录制文件时,需要获得一个带完整路径的文件名。Wowza Streaming Engine 有两个内建的文件名实现类: StreamRecorderFileVersionDelegate 和 StreamRecorderSimpleFileVersionDelegate

创建一个新的录制文件名实现类

你可以创建一个新的文件名实现类,实现IStreamRecorderFileVersionDelegate接口。 这个Java class 只有一个Function (getFilename) 需要被实现。你可以用包括stream name,开始录制时间在内等各种信息来组成这个文件名。你可以从这个Function传进来的参数IStreamRecorder获得这些信息。 

MyFileVersionDelegate 的示例,演示了在默认的文件名后增加了系统时间(毫秒)(默认的文件名通常是流的名字),然后将新的名字返回给调用者: 

Code:

File file = new File(recorder.getBaseFilePath());

String oldBasePath = file.getParent();

String oldName = file.getName();

String oldExt = "";

int oldExtIndex = oldName.lastIndexOf(".");

if (oldExtIndex >= 0)

{

         oldExt = oldName.substring(oldExtIndex);

         oldName = oldName.substring(0, oldExtIndex);

}

 

name = oldBasePath+"/"+oldName+"_"+DateTime.now().millisOfDay().getAsText()+oldExt;

将自定义的录制文件名实现类设置到录制参数中

将将自定义的录制文件名实现类MyFileVersionDelegate设置到录制参数中,在onAppStart方法中, 为recordParams.fileVersionDelegate接口设置一个实例,如下: 

Code:

recordParams.fileVersionDelegate = new MyFileVersionDelegate();

MyStreamRecorderListener class

直播流录制器会向注册的监听器通知录制事件,这些事件在LiveStreamRecordManager documentation有详细介绍。 这些说明详见LiveStreamRecordManager类包下的"IStreamRecorderActionNotify"接口,包括有哪些事件,什么时候会被触发。 

注意: 还有一个类似的关于LiveStreamRecordManager的事件监听接口。它提供了关于录制的另一个角度的事件监听。 具体请参见"LiveStreamRecordManager"类包下的"ILiveStreamRecordManagerActionNotify" ,在LiveStreamRecordManager documentation 有更多介绍。

创建一个新的StreamRecorderActionNotify监听器

Listener是一个简单的Java 实现类,它实现了IStreamRecorderActionNotify接口。 这个接口的所有方法都需要实现;当然,对于你不感兴趣的事件,在实现这个方法是可以什么都不做。 

MyStreamRecorderListener的这个例子中,它在每一个事件的实现中都只是输出了一句Log: 

Code:

         class MyStreamRecorderListener implements IStreamRecorderActionNotify

         {

                   @Override

                   public void onCreateRecorder(IStreamRecorder recorder)

                   {

                            /*

                            To set stream specific StreamRecorderParameter values, set them here

                            if (recorder.getStreamName().equals("mySpeciaStream"))

                            {

                                     StreamRecorderParameters params = recorder.getRecorderParams();

                                     params.fileVersionDelegate = new SpecialStreamFileVersionDelegate();

                                     params.notifyListener = new SpecialStreamOtherListener();

                            }

                            */

                            getLogger().info("MyStreamRecorderListener.onCreateRecorder[" + appInstance.getContextStr() + "]: new Recording created:" + recorder.getStreamName());

                   }

...

 

                   @Override

                   public void onSegmentEnd(IStreamRecorder recorder)

                   {

                            getLogger().info("MyStreamRecorderListener.onSegmentEnd[" + appInstance.getContextStr() + "]: segment closed:" + recorder.getStreamName());

                   }

         }

将这个监听器设置在录制的参数中

要将这个MyStreamRecorderListener的监听设置在录制中的参数中,在onAppStart方法中, 为recordParams.notifyListener 设置一个实例: 

Code:

recordParams.notifyListener = new MyStreamRecorderListener();

当这个自定义模块被部署到一个应用上后,所有发布到这个应用上的流在被录制时都将使用StreamRecorderParameters中的录制参数。 这意味着MyFileVersionDelegate 和 MyStreamRecorderListener 会被每一个流的录制器所调用。 

你也可以在每一个流启动录制时(onCreateRecorder), 为录制器设置一个自定义的StreamRecorderParameters,作为录制参数。 

注意: LiveStreamRecordManager 不支持为一个直播流配置启动多个录制器;

 

安装这个直播流自动录制模块

将下载的安装包下的lib/wms-plugin-wms-plugin-livestreamrecordautorecord_4.0.jar文件拷贝到Wowza安装目录的lib下([install-dir]/lib)。

在Wowza      Streaming Engine Manager的管理界面上, 选择你需要安装录制模块的直播应用。

在应用的面板中,点击Modulestab页。

注意: 访问Modules tab 页需要管理员具备高级操作权限。

Modules tab页,按如下操作: 

a.         点击Edit按钮。

b.         点击Add Module 按钮,添加下面两个Module中的任意一个:

Code:

Name: ModuleAutoRecordBasicExample

Description: ModuleAutoRecordBasicExample

Fully Qualified Class Name: com.wowza.wms.plugin.livestreamrecord.module.ModuleAutoRecordBasicExample

-或-

Code:

Name: ModuleAutoRecordAdvancedExample

Description: ModuleAutoRecordAdvancedExample

Fully Qualified Class Name: com.wowza.wms.plugin.livestreamrecord.module.ModuleAutoRecordAdvancedExample

点击应用的Restart 按钮。

发布到这个应用上的所有直播流的录制文件都会被保存在[install-dir]/content 目录下。

 

关于LiveStreamRecordManager 的API文档

关于LiveStreamRecordManager的 API 文档在Wowza Streaming Engine 安装目录 ([install-dir]/documentation/serverapi) 的Javadoc文档以及Wowza 相关技术文档中服务端API的"com.wowza.wms.livestreamrecord.manager" 部分。

 

Wowza Streaming Engine 4是业界功能强大、API接口丰富的流媒体Server产品,采用它作为流媒体服务器产品的案例很多,直播、在线教育、IPTV都有它的用武之地。

北京哲想软件有限公司