如何对直播流进行录制?
转载请注明:文章来自www.wowza.cn
注意: 要访问最新的技术资料,请访问http://www.ttstream.com/wowza/
直播流的录制,在以前是一个免费的插件(Addon),在Wowza Media Server 3.5时代已经被整合进了Wowza 标准产品中。www.wowza.cn,同时它还提供了一套API让你对直播流的录制有更多的控制。现在Wowza Media Server可以让你采用多方控制直播过程,包括一个基于WEB的控制界面、一个HTTP接口(http URL 及参数)以及通过API编程来控制。 强大的API让你可以将直播流分割为多个MP4文件(QuickTime container)或FLV文件(Flash Video container), 分割的方式可以依据播放时长,时钟(特定的时间点)或是文件大小。

注意:

内容


准备工作

设定一个认证方式

发布一个直播流

支持的文件格式

使用基于WEB浏览器的管理界面进行录制

使用http接口进行录制

查看直播流的录制状态

写程序自己控制录制

自定义录制文件的命名

用模版字符串定义录制片段的文件名

配置说明

依据时钟在特定的时间定期进行录制

用参数设置替换直播流录制的参数

故障排查

通过启用更多的Debug信息来检查关于录制的设置都是否能正常工作

如何获得LiveStreamRecord插件、API以及代码例子

相关的文章

如何将录制文件的名字设置为以前带序号的命名管理(HTTPLiveStreamRecord)

如何自己写程序启动和暂停对直播流的录制(IMediaStreamActionNotify3)

如何设计你的nDVR工作流程

附录: 理解linux下的 crontab 语法

准备工作


设置一个认证方式

Wowza Media Server中的直播流录制功能可以通过Http服务来控制,要启用这个http服务需要在[install-dir]/conf/VHost.xml文件的每一个端口中进行配置。默认的HTTP服务配置如下:
Code:
<HTTPProvider>
	<BaseClass>com.wowza.wms.livestreamrecord.http.HTTPLiveStreamRecord</BaseClass>
	<RequestFilters>livestreamrecord*</RequestFilters>
	<AuthenticationMethod>admin-digest</AuthenticationMethod>
</HTTPProvider>
        
这个AuthenticationMethod 属性设置了访问这个Http服务的认证方式。默认值为(admin-digest),表示用摘要认证Digest authentication (一个经过加密的盘问/回答机制来验证用户身份)方式来控制对HTTP服务的访问,如果你要从一个远程电脑上的Web浏览器上控制直播流的录制,建议你采用这个认证方式。 要使用这个认证方式,你必须要在[install-dir]/conf/admin.password文件中设定一个用户名和密码。用一个文本编辑器打开这个文件在新的一行输入用户名和密码。举个例子,你可以添加一个用户名myuser和一个密码mypassword:
Code:
# Admin password file (format [username][space][password])
#username password
myuser mypassword
        
如果要设置为不用认证就可以访问这个Http服务,请用文本编辑器打开VHost.xml文件,将AuthenticationMethod属性设置为none。如果是从一台远程电脑上的WEB浏览器上控制直播流的录制,因为安全原因不建议你这么做。

发布一个直播流

要对直播流进行录制或用于日后的VOD点播,你首先要配置一个直播应用,然后将直播流发布出来(比如从一个编码器拉流或推流)。

在Wowza Media Server上:

  1. 创建一个应用文件夹[install-dir]/applications/live.

  2. 创建一个配置文件夹[install-dir]/conf/live,并将[install-dir]/conf/Application.xml拷贝到这个新的文件夹。

  3. 用一个文本编辑器打开这个新的[install-dir]/conf/live/Application.xml文件,修改下面的设置(可能有些已经是设置好了的):

    注意:要跳过下面的设置步骤,你可以右键 这里来下载一个已经配置好的Application.xml文件。
    1. Streams/StreamType属性设置为:
      Code:
      <StreamType>live</StreamType>
    2. HTTPStreamers属性设置为:
      Code:
      <HTTPStreamers>cupertinostreaming,smoothstreaming,sanjosestreaming</HTTPStreamers>
    3. Streams/LiveStreamPacketizers属性设置为:
      Code:
      <LiveStreamPacketizers>cupertinostreamingpacketizer,smoothstreamingpacketizer,sanjosestreamingpacketizer</LiveStreamPacketizers>
    4. RTP/Authentication/PlayMethod属性设置为:
      Code:
      <PlayMethod>none</PlayMethod>
  4. 启动Wowza Media Server。要获得更多信息,请阅读启动和停止服务(Standalone) or 启动和停止服务(System Service).


在编码器侧推流:

  • 在编码器上输入Wowza Media Server的URL和StreamName信息,点击发布启动按钮。下面的例子以编码器采用RTMP推流为例子。
    Code:
    Server URL: rtmp://[wowza-ip-address]/live
    Stream Name: myStream
                
    www.wowza.cn

注意:在编码器上推流的具体操作依据你使用的编码器的不同而不同。要获得更多如何配置你的编码器,请联系编码器厂家或阅读使用手册,或者参考各种编码器技术

支持的文件格式

直播流录制功能支持将直播流录制为MP4 (QuickTime container) 文件或FLV (Flash Video container) 文件。

如果要录制为MP4文件,直播流必须采用以下编码格式:

视频

  • H.264

音频
  • AAC
  • MPEG-1 Layer 3 (MP3)
  • Speex


使用WEB浏览器进行录制操作


Wowza Media Server提供了一个基于WEB浏览器操作的录制管理界面。www.wowza.cn,你可以用从本地或远程电脑上访问这个管理界面以对录制进行控制包括启动、停止、文件名、存储路径、文件格式以及其它一些细节。 此外,你还可以依据播放时长、时钟、文件大小将录制的直播流分割为多个文件。请按下面的步骤进行:

  1. 请先确认你已经完成了前面介绍的准备工作。要了解它,请阅读准备工作 章节。

  2. 启动Wowza Media Server。

  3. 在Wowza Media Server本机或一台远程电脑上,用WEB浏览器访问下面的URL: http://[wowza-ip-address]:8086/livestreamrecord.

  4. Live Stream Record页面, 点击start recording

    录制的配置

    当你点击start recording后,将会出现Start Recording的WEB对话框。

    录制的配置

  5. Start Recording对话框中,你可以选择如何将录制的直播流分割为多个文件的一些选项。

    将直播流录制为一个文件

    Action中选择Start Recording 将会把直播流录制为一个文件(这也是默认的设置)。然后在Recording Options, 选择下面多个选项中的一个来决定当直播流重启后的录制策略:

    • Version existing file.当直播流重新启动后将生成一个新的文件(这是默认的设置)。举例说明,加入你已经录制了一个文件为myStream.mp4,当直播里重起后又开始录制时,将生成一个新的文件myStream_2013-05-12-15.08.10.645-PDT_0.mp4

    • Append to existing file. 重新录制的文件数据将会添加到原有的文件上(例如myStream.mp4)。

    • Overwrite existing file. 重新录制的文件将覆盖原有的文件(例如myStream.mp4)。


    将录制的直播流分割为多个文件

    要将直播流录制为多个文件,请选择下面的选项组合以设定如何分割文件:

    • 依据文件大小来分割,请在Action中选择Start Recording Segment By Size。然后在Segment Size 输入框中输入一个最大的文件大小(MB)。默认值为10 MB。

    • 依据播放时长来分割,请在Action中选择Start Recording Segment By Duration。然后在Segment Duration输入框中输入一个最大播放时长,格式为<hours>:<minutes>:<seconds>.<milliseconds>。默认值为15分钟(00:15:00.000)。

    • 依据时钟编排一个录制计划,请在Action中选择Start Recording Segment By Schedule。然后在Segment Schedule输入框中按crontab 表达式输入计划的时钟参数。默认值为在每一个整点开始录制。

  6. (可选项)。在Start Recording对话框中,你可以设置录制文件的相关参数。在Custom Output Path and File Name部分,点击Enable然后对下面的信息进行配置:

    • Stream Format. 选择文件格式,可以是MP4 (默认)或 FLV

    • Path. 设置一个保存录制文件的物理路径。默认的设置为[install-dir]/content目录。如果你希望设置为另外一个路径,你先要确认这个路径是真实存在的,然后再填上这个路径。

    • File Name. 如果要改变默认的录制文件名,请修改默认的模版字符串。你可以添加任何合法的字符串以及模版字符串的key变量,要了解更多,请阅读使用模版字符串定义录制的文件名

  7. 点击Submit

当你点击Submit后,Wowza Media Server将开始录制直播流,Wowza Media Server: Live Stream Record页面将显示录制的相关设置。

录制的配置

注意:在你点击Submit后。Wowza Media Server: Live Stream Recordweb页面中的录制状态可能为Waiting for stream,这时你只要刷新Web页面就可以显示最新录制状态Recording in progress
Live Stream RecordWEB页面,你可以点击stop recording停止录制。如果你点击split recording,Wowza Media Server将会把直播流录制为一个新的文件。

注意: 当你点击split recording,Wowza Media Server 将立即停止向现有文件写入录制数据并关闭这个文件,然后再打开一个新的分割文件并继续往这个文件中写入录制数据。只要文件没有超过分割文件的最大设定值,wowza就会继续把录制数据写入这个文件,直到文件超过分割文件的最大设定值b>Segment Duration或者你再次点击了split recording

使用Http接口来录制直播流


你可以使用HTTPget方法和URL查询参数来录制直播流。下面展现了录制一个直播流时最简单的URL:
Code:
http://[wowza-ip-address]:8086/livestreamrecord?app=live&streamname=myStream&action=startRecording
相关URL参数:

  • app=[app-name]
  • streamname=[stream-name] (必须是直播流)
  • action=startRecording | stopRecording | splitRecordingNow | startRecordingSegmentByDuration | startRecordingSegmentBySize | startRecordingSegmentBySchedule


你可以在这个URL后面加上如下一些可选的参数:

  • option=version | append | overwrite
    默认值为version.

  • startonkeyframe=true | false
    默认值为false

  • recorddata=true | false
    默认值为true.

  • outputPath=[path]
    默认值为空字符串,这意味着录制的文件将被存储在Wowza Media Server的content文件夹([install-dir]/content)。如果你设置了另一个目录,你必须用绝对路径(例如C:/Content)。同时不要在路径中包含文件名。

  • outputFile=[filename].[extension]
    默认值为空字符串,这意味着录制的文件名依据[stream-name]和在format中设置的[extension]来命名。

  • format=1 | 2
    1 = FLV and 2 = MP4。默认为2

  • segmentSize=[megabytes]
    默认为10 (10 megabytes).

  • segmentDuration=[seconds]
    默认为900 (15 分钟)。

  • segmentSchedule=[crontab string]
    请阅读附录:理解crontab表达式以获得更多信息。


如果你设置了一个认证方式(请阅读设置一个认证方式)用username和password来认证,那么你需要将username和password添加到URL查询参数中,如下:
Code:
http://[username]:[password]@[wowza-ip-address]:8086/livestreamrecord?app=live&streamname=myStream&action=startRecording

查看直播流的录制状态


你可以在一个WEB页面看到一个直播流的列表以及它的录制状态,请访问下面的URL:
Code:
http://[wowza-ip-address]:8086/livestreamrecord/index.html
用浏览器访问上面的URL,将会打开一个web页面,页面中显示了所有应用下的直播流及它们的录制状态。

Wowza Media Server 3.6 可以依据应用名对直播流进行过滤。要查看某个应用下的直播流和录制状态,你可以在上面的URL中添加一个参数appFilter=[app-name]。例如下面的URL:
Code:
http://[wowza-ip-address]:8086/livestreamrecord/index.html?appFilter=live
将打开一个WEB页面并列出live应用下的所有直播流和录制状态。

你可以通过设置,要求上面的URL必须包含一个应用名(用这个应用名过滤),这样将关闭列出所有应用下直播流的功能。如果要这么做,请在[install-dir]/conf/VHost.xml文件的最后面的<Properties>中添加下面的属性:
Code:
<Property>
    <Name>liveStreamRecordRequireApplicationFilters</Name>
    <Value>true</Value>
    <Type>boolean</Type>
</Property>
          

写程序控制直播流的录制


Wowza Media Server提供了下面的录制相关API,让你可以写程序自己控制对直播流的录制:

  • public void startRecording(IMediaStream stream, String filePath, boolean append, Map<String, Object> extraMetadata, int splitOnTcDiscontinuity)。开始录制一个直播流并设定是否要依据时钟来分割文件。

    startRecording API默认是不会对录制文件进行分割的。

    要依据时钟对录制的文件进行分割时,合法的选项包括:
    • SPLIT_ON_DISCONTINUITY_DEFAULT
    • SPLIT_ON_DISCONTINUITY_ALWAYS
    • SPLIT_ON_DISCONTINUITY_NEVER

  • public void startRecordingSegmentByDuration(IMediaStream stream, String filePath, Map extraMetadata, long duration). 开始录制一个直播流,并依据一个特定的播放时长来分割文件(单位为毫秒)。例如,15000代表每个文件的播放时长为15秒。

  • public void startRecordingSegmentBySize(IMediaStream stream, String filePath, Map extraMetadata, long size). 开始录制一个直播流,并依据文件大小来分割文件(单位为字节)。例如,1048576代表一个文件最大为1megabyte (MB)。

  • public void startRecordingSegmentBySchedule(IMediaStream stream, String filePath, Map extraMetadata, String schedule). 开始录制一个直播流,并依据一个用crontab表达式建立的时钟计划来分割文件。crontab表达式可以依据分钟、小时、月、年、某个月的某些日期、某个周的某几天来间歇性的执行某些动作。要获得更多信息,请访问附录: 理解crontab表达式.

  • public void splitRecordingNow(). 立即将一个正在录制中的文件分割为新的文件。这个动作将立即停止向当前录制文件写入录制的数据并关闭这个文件,然后打开一个新的文件继续保存录制的数据。如果startRecordingSegmentByDuration API 被用于将直播流录制到多个文件,录制的数据将被写入一个新的文件直到数据到达你预先设置的startRecordingSegmentByDuration或者你再次调用了splitRecordingNow()

  • public void setFileVersionDelegate(ILiveStreamRecordFileVersio nDelegate delegate). 设置一个自定义的文件序列命名规范.

  • public void getCurrentDuration(). 获得当前录制文件的播放时长,单位为秒。

  • public void getCurrentSize(). 获得当前录制文件的大小,单位为字节。

  • public void stopRecording(). 停止对一个直播流。

要了解更多关于直播流录制的API,请阅读Javadocs ([install-dir]/documentation/serverapi)或下载Wowza Media Server Server-Side API的PDF文档。

自定义文件序列命名规范

当将录制的直播流分割为多个文件时,你可以实现ILiveStreamRecordFileVersionDelegate接口来覆盖默认的文件序列命名规范。

  • public abstract String getFilename(ILiveStreamRecord recorder). 将返回下一个录制文件的文件名字符串,这个字符串必须包含完整路径和文件名的(例如: c:\temp\saved\mystream_123.mp4).

Code:
import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class MyDelegate implements ILiveStreamRecordFileVersionDelegate
{
	public String getFilename(ILiveStreamRecord recorder)
	{
		String name;
		DateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd_HHmmssSSS");
		Date date = new Date();
		try
		{
			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+"_"+dateFormat.format(date)+oldExt;
			file = new File(name);
			if (file.exists())
			{
				file.delete();
			}
		}
		catch (Exception e)
		{
			WMSLoggerFactory.getLogger(null).error("MyDelegate.getFilename: "+e.toString());
			// return a temp filename
			name = "temp"+dateFormat.format(date)+".tmp";
		}
		return name; 
	}
}
          
www.wowza.cn

用模版字符串来定义录制直播流后生成的分割文件

在默认情况下,系统允许你通过模版字符串来定义录制直播流后产生的分割文件.

  • public void setFileTemplate(String template). 设置一个自定义的模版字符串作为文件名。

  • public String getFileTemplate(). 返回当前正在使用的作为文件名的模版字符串。


模版字符串可以按任意顺序将任意的合法的文件名字符以及任意的合法模版键值(template key)组合起来。

这些字符串可以配合以下场景使用:

  • 根据文件大小开始新的录制分割
  • 根据播放时长开始新的录制分割
  • 根据时钟计划开始新的录制分割


合法的模版键值(template key)包括:

  • ${SourceStreamName}. 直播流的StreamName。

  • ${SegmentNumber}. 一个自动增长的数字,代表了被分割的录制片段的顺序,从0开始。

  • ${RecordingStartTime}. 录制开始时间.

  • ${SegmentTime}. 录制片段被创建的时间.

注意: ${RecordingStartTime}${SegmentTime} 的格式为yyyy-MM-dd-HH.mm.ss.SSS-zzz (<year>-<month>-<day>-<hour>.<minute>.<second>.<millisecond>-<time zone>).
默认的文件名模版为${SourceStreamName}_${RecordingStartTime}_${Segmen tNumber}, 它产生录制文件名如下所示:

myStream_2013-05-12-08.51.31.104-PDT_0.mp4
myStream_2013-05-12-08.51.31.104-PDT_1.mp4
myStream_2013-05-12-08.51.31.104-PDT_2.mp4

文件名模版例子:

${SourceStreamName}_${SegmentNumber}:

mystream_0
mystream_1
mystream_2

${SourceStreamName}_t${RecordingStartTime}_ct${Seg mentTime}:

mystream_t2013-05-12-02.34.53.102-PDT_ct2013-05-12-02.00.00.000-PDT
mystream_t2013-05-12-02.34.53.102-PDT_ct2013-05-12-02.15.00.000-PDT
mystream_t2013-05-12-02.34.53.102-PDT_ct2013-05-12-02.30.00.000-PDT

消息通知

当一个新的文件被打开准备接收数据或是当前的录制片段录制结束时,你可以实现ILiveStreamRecordNotify接口来获得一个通知(请参考本章节后面关于监听例子的代码片段.)

  • public abstract void onSegmentStart(ILiveStreamRecord recorder). 当一个新的文件被打开并准备接收录制数据时收到的通知。

  • public abstract void onSegmentEnd(ILiveStreamRecord recorder). 当当前录制文件被关闭时收到的通知(此时不会再有数据被写入这个文件).

Code:
public class MyListener implements ILiveStreamRecordNotify 
{
	public void onSegmentStart(ILiveStreamRecord recorder)
	{
		// Nothing to do here
	}
	public void onSegmentEnd(ILiveStreamRecord recorder)
	{
		// move completed file to storage location
		File file = new File (recorder.getCurrentFile());
		if (!file.renameTo(new File("c:/storage"+file.getName()))) 
		{
			WMSLoggerFactory.getLogger(null).error("MyListener.onSegmentEnd: file move failed for "+file.getAbsolutePath());
		}
	}
}         

Splitting live recordings at timecode discontinuities

You can change the default behavior for splitting live recordings when a timecode discontinuity is encountered in the source stream by adding the following property to the <Properties> container at the end of the [install-dir]/conf/[application]/Application.xml file (be sure to get the correct <Properties> container—there are several in Application.xml):
Code:
<Property>
    <Name>liveStreamRecorderSplitOnTcDiscontinuity</Name>
    <Value>true</Value>
    <Type>boolean</Type>
</Property>
          
www.wowza.cn
注意: 这个属性仅仅被用于startRecording API。onSegment* API将总是将直播流按时钟来分割。

使用属性配置来覆盖直播流的录制参数


注意: 适用于Wowza Media Server 3.5.2 (patch 6) 或更高版本.
你可以使用下面的属性设置覆盖你在web方式的录制控制界面上的设置或使用录制API中的设置。 这些属性设置可以添加在[install-dir]/conf/[application]/Application.xml文件最后面的<Properties>中。

小心: 当你在Application.xml中设置这些属性将会一直被使用,你不能使用WEB管理界面和API来修改它们。
liveStreamRecordOption
Code:
<Property>
    <Name>liveStreamRecordOption</Name>
    <Value>overwrite</Value>
    <Type>String</Type>
</Property>
          
合法的Value包括:append, overwrite, or version.

liveStreamRecordStartOnKeyFrame
Code:
<Property>
    <Name>liveStreamRecordStartOnKeyFrame</Name>
    <Value>false</Value>
    <Type>boolean</Type>
</Property>
            
liveStreamRecordRecordData
Code:
<Property>
    <Name>liveStreamRecordRecordData</Name>
    <Value>false</Value>
    <Type>boolean</Type>
</Property>
            
liveStreamRecordFilePath
Code:
<Property>
    <Name>liveStreamRecordFilePath</Name>
    <Value>c:/content</Value>
    <Type>String</Type>
</Property>
            
The Value should only include the path where the recordings are stored. It must not include a filename.

liveStreamRecordSegmentSize
Code:
<Property>
    <Name>liveStreamRecordSegmentSize</Name>
    <Value>102400</Value>
    <Type>long</Type>
</Property>
            
这个Value的单位是字节

liveStreamRecordSegmentDuration
Code:
<Property>
    <Name>liveStreamRecordSegmentDuration</Name>
    <Value>10000</Value>
    <Type>long</Type>
</Property>
            
这个Value的单位为毫秒

liveStreamRecordSegmentSchedule
Code:
<Property>
    <Name>liveStreamRecordSegmentSchedule</Name>
    <Value>2 * * * * *</Value>
    <Type>String</Type>
</Property>
            
这个Value必须是一个合法crontab 表达式

故障排查


  • 在你开始对直播流进行录制时,直播流必须已经开始进入到Wowza Media Server中。

  • 你不能对一个直播流启动多个录制进程,当一个直播流正在被录制时,你又提交了一个对这个直播流进行录制的请求。那么正在录制的进程将立即结束,一个新的录制进程将遵照第二个录制请求开始工作。

  • 录制必须在播放之前完成。

  • 直播流的录制API是基于服务端的录制。对于一个直播流在客户端录制,是不支持的。

  • 当使用onSegment* API:
    • Version标志必须被设置为true 从而使录制文件能够争取的增加。
    • Overwrite标志设置为true会引起之前录制的文件被覆盖。
    • Append标志被忽略。


添加更多的Log信息来验证你的设置是否正确

你可以在[install-dir]/conf/[application]/Application.xml文件的<Properties>中添加更多的log信息来验证你对直播流的录制设置是否正确:
Code:
<Property>
    <Name>liveStreamRecorderDebugLog</Name>
    <Value>true</Value>
    <Type>boolean</Type>
</Property>
            
这些debug log 信息被记录在[install-dir]/logs/wowzamediaserver_access.log文件中。

下面是liveStreamRecorderDebugLog被使用后的一个log信息的例子。如果你在使用录制功能时发现了一些异常,你可以用这个log信息来确认你的设置是否正确。
Code:
comment	server	INFO	200	-	[com.wowza.wms.vhost.VHost@62345ce0]HttpLiveStreamRecord.recordStream: action:startRecording stream:myStream format:mp4 append:false outputPath:C:\Program Files (x86)\Wowza Media Systems\Wowza Media Server 3.6.0\content outputFile:myStream.mp4 versionFile:true startOnKeyFrame:true recordData:true segmentDuration:900000 segmentSize:10485760 segmentSchedule:0 1 * * * * fileTemplate:null
注意,如果你按照使用属性设覆盖录制的参数的指南,使用Application.xml文件中的属性设置覆盖了在WEB录制管理界面中的设置或API中的设置,请确认log中出现类似下面的信息,并以此来验证你的设置.
Code:
filePath has been overridden in application.xml, value=C:/content/myStream.mp4
versionFile has been overridden in application.xml by liveStreamRecordOption=overwrite
appendFile has been overridden in application.xml by liveStreamRecordOption=overwrite
startOnKeyFrame has been overridden in application.xml, value=false
recordData has been overridden in application.xml, value=false
segmentSize has been overridden in application.xml, value=102400
segmentDuration has been overridden in application.xml, value=10000
segmentSchedule string has been overridden in application.xml, value=2 * * * * *
            

如何获得LiveStreamRecord AddOn、API以及代码例子


下面的连接可以下载LiveStreamRecord插件包,它适用于Wowza Media Server 3.1.2及更早的版本。但这些插件包提供的功能并不像Wowza Media Server 3.5及更高版本中的录制功能那样全面。 要了解更多如何在你的Wowza Media Server版本中使用LiveStreamRecord插件包,请阅读zip压缩包中的ReadMe.html文件。

针对3.0.3.08到3.1.2.*之间版本的Wowza Media Server
LiveStreamRecord_3.0.zip

针对2.0.0.04到2.2.4.*之间版本的Wowza Media Server
LiveStreamRecord_2.0.zip

针对Wowza Media Server Pro 1.7.x
LiveStreamRecord.zip

附录: 理解crontab表达式


在Wowza Media Server中,你可以使用crontab表达式将录制的直播流基于时钟计划分割到多个文件中。crontab表达式可以用分钟、小时、月、年、一个月的某几天、一周的某几天多种方式设置一个间隔时间.合规的crontab字段如下(按顺序):

<Minute> <Hour> <Day_of_the_Month> <Month_of_the_Year> <Day_of_the_Week> <Year>

其中:

  • <Minute> - 分钟 (介于059之间),在这个时间将开始分割录制文件。

  • <Hour> - 小时(介于023之间,基于24小时时钟格式),在这个时间将开始分割录制文件。

  • <Day_of_the_Month> - 日期(介于031之间) ,在这个时间将开始分割录制文件。例如要设置在月的最后一天开始分割录制文件,可以设置为31.

  • <Month_of_the_Year> - 设置开始分割录制文件的月份。你可以设置一个月份的缩写(例如, Jan) 或等同的数字(例如1).

  • <Day_of_the_Week> - 设置在一周的某一天开始分割录制文件。你可以设置一个星期几的缩写(例如, Mon) 或者等同的数字(例如1).

  • <Year> - 设置开始分割录制文件的年份(例如2013).

crontab字段采用cron表达式(用空格分割的多个字符串的组合)格式,它提供了一个强大的机制来分割对直播流的录制。你也设置一些特殊字符来让它更加灵活。Wowza Media Server 3.5 支持nnCcron cron 格式 (http://www.nncron.ru/help/EN/working/cron-format.htm).

注意: nnCron 非标准的问号字符(?)代表了nnCron的启动时间,现在还不支持它的。
crontab表达式的例子:

下面是一些介绍cron表达式的例子。要获得更多高级的例子,请阅读nnCcron cron format 页面(http://www.nncron.ru/help/EN/working/cron-format.htm).

每隔30分钟开始录制直播流(在一个小时开始时和一个小时的一半时):

0,30 * * * * *
0,30
(简化版本)

在偶数小时里,每隔15分钟:

*/15 */2 * * * *
*/15 */2
(简化版本)

在早晨8点和下午6点开始录制直播流:

0 8,18 * * * *
0 8,18
(简化版本)

更新于: For Wowza Media Server 3.6.0 on 05-28-2013