多协议、性能稳定、丰富API的流媒体服务器软件
利用Wowza Streaming Engine 4将独立的音频流和视频流混合成一个流
利用Wowza Streaming Engine 4的这个扩展模块,可以将独立的音频流和视频流混合成一个流。

功能介绍如下:

  • 1. 可以为多个混合输出流配置各自的音频流和视频流
  • 2. 任何兼容的直播源(无论是音频还是视频)都可以使用。也可以是来自某个文件的音频轨道
  • 3. 如果任何一个直播源掉线(处于不可用状态),其它源可以继续输出,不受影响,输出音频和视频源都掉线了,混合后的输出流才会停止
  • 4. 可以用API动态地调整流的状态及源流的来源
  • 5. 如果源流的时间戳是同步的,输出流也可以实现时间戳同步;否则,时间戳会偏离
  • 6. 可以对输出流做一个延时输出,这样可以等待输入流多一些缓冲数据. 这一点,在当音频流来自shoutcast时比较有用(它在启动时会有一些额外的帧)

大纲


前提说明
安装
模块的配置
相关参数
利用接口调整配置
使用说明
开发者

前提条件



注意:这个功能适用于Wowza Streaming Engine 4.0 及以上版本。

安装


  1. wse-plugin-avmix.zip下载这个编译后的模块.

  2. 对下载的zip压缩包解压,拷贝lib/wse-plugin-avmix.jar文件到你的Wowza安装目录下的lib文件夹下

  3. 重启 Wowza Streaming Engine.

模块的配置



要启用这个模块,你需要为你的Wowza应用,添加下面的参数定义。请参考如何配置Wowza的自定义模块以了解更多细节。

Name
Description
Fully Qualified Class Name
ModuleAVMix Mix audio and video sources. com.wowza.wms.plugin.avmix.ModuleAVMix

相关参数



在启用这个模块后,你可以用参数来对它进行控制。请参考如何配置Wowza的自定义参数以了解更多。

Path
Name
Type
Value
Notes
Root/Application avMixNames String outputName: stream1, videoName: myStream, audioName: audioStream | outputName: stream2, videoName: myOtherStream, audioName: audioStream2 这个参数用于配置每一个混合输出流的组成。请参考avMixNames参数的配置说明以了解更多(默认: 没有设置)。
Root/Application avMixSortDelay Integer 10000 这个参数是一个缓存延时设置(单位:毫秒),会让输出流做相应的延时,这样输出流会更平滑一些。-1 是没有任何延时,可以为每一个输出流做不同的配置(默认: 10000)。
Root/Application avMixUseOriginalTimecodes Boolean false 如果组成这个混合流的音频和视频都有同步时间戳,你可以将这个参数设置为true来强制使用这个源流中的时间戳,这个参数可以是全局设置,也可以为每一个混合输出流来设置。但是注意,如果原流时间不同步,可能会有一些未知异常。(默认: false)
Root/Application avMixDebugLog Boolean true 输出调试的log日志(默认: false).

avMixNames的配置说明


avMixNames参数是一个用管道符(|)分隔开的输出流定义,每一个输入流有一个音频来源和一个视频来源,参数和值的格式为name1:value1,类似于JSON的格式,参数名包括:

outputName: (必须的) 混合后的输出流的名字。

videoName: (推荐要有的) 包含视频轨道的源流名字。如果没有设置这个参数,那么输出流就不会包含任何视频。

audioName: (推荐要有的) 包含音频轨道的源流名字。如果没有设置这个参数,那么输出流就不会包含任何音频。

sortDelay: (可选的) 将会覆盖上面提到的avMixSortDelay参数的设置。

useOriginalTimecodes: (可选的额) 将会覆盖上面提到的avMixUseOriginalTimecodes参数的设置。


用接口调整配置


当这些混合流被初始化(加载)后,你还可以用JMX或另外一个模块来对这些混合流的配置进行管理。下面是这些接口的介绍:

Method
功能介绍
addOrUpdateOutputStream(String outputName, String videoName, String audioName, long sortDelay, boolean useOriginalTimecodes) 添加或更新一个混合输出流的配置。
setVideoSource(String outputName, String videoName) outputName所代表的混合输出流设置一个视频源,如果这个混合输出流不存在,则会自动创建它。
setAudioSource(String outputName, String audioName) outputName所代表的混合输出流设置一个音频源,如果这个混合输出流不存在,则会自动创建它。
removeOutputStream(String outputName) 停止并删除outputName所代表的混合输出流.
getOutputNames() 获得一个混合输出流的相关配置信息。

使用说明



当启用这个模块的Wowza应用启动时,Wowza会读取avMixNames中的参数,得到每一个混合输出流的配置信息(注意,此时输出流并没有启动)。

当源流中的任何一个(无论是音频还是视频)启动时,才会触发输出流的启动。

这个输出流会一直保持输出,当所有源流都停止时,它才会自动停止。

如果设置了缓冲延时(sortDelay参数),那么输出流的启动、播放、停止都会有相应的延时。

开发者


这个模块的源码可以在GitHub找到