·您当前的位置:主页 > 技术教程 > Wowza教程 >

[wowza]RTP直播流推送到另一个远端的服务器

时间:2015-03-23 23:03酷播
Push Publishing 插件可以让你通过Real Time Messaging协议(RTMP)、MPEG-2 Transport Stream (MPEG-TS)以及Real-time Transport 协议(RTP)将一个直播流推送到另一个远端的服务器上
如何获取和使用wowza Push Publishing 插件?
 

Push Publishing 插件可以让你通过Real Time Messaging协议(RTMP)、MPEG-2 Transport Stream (MPEG-TS)以及Real-time Transport 协议(RTP)将一个直播流推送到另一个远端的服务器上。 例如CDN或其它运行Wowza Media Server® 或 Adobe® Media Server的服务器,或组播网络上。从而可以支持更大规模的用户。

系统使用一个映射文件,来建立输入流到推送目的地的映射,同时这个文件可以被动态更新。此外,一个输入流可以被推送到多个目的地址上。

注意: 此功能需要Wowza Media Server 3.1.2 (patch 16) 及更高版本。

获得Push Publishing 插件

要获得Push Publishing 插件, 请填写AddOn 申请表。 在这个申请表中,请确定要选择Click to Request Push Publishing 复选框。当你的申请被审核通过后,你将在会3个工作日收到一封包含下载指南的邮件。

注意: 在插件包的version.txt文件中有这个插件的更新说明。



下面是在推送时支持的传输协议:

注意: PushPublishMap.txt 文件中的key和value现在支持双引号(")以兼容JSON规范。以前的文件中,没有采用双引号时在未来的一段时间依然可以继续工作。你可以更新这个文件以兼容未来版本的Push Publishing 插件。

安装

  1. 将插件包解压缩到一个临时的文件夹。
  2. [package]/lib/wms-plugin-pushpublish.jar 拷贝到Wowza Media Server的 [install-dir]/lib/ 文件夹下。
    注意: 如果你正在使用low-level API 建立个性化的发布程序,请跳过下面的步骤。
  3. [package]/conf/PushPublishMap.txt[package]/conf/PushPublishProfiles.xml 拷贝到 [install-dir]/conf/ 文件夹下。
  4. 按照快速上手指南的介绍创建一个直播应用根据。
  5. 用文本编辑器打开[install-dir]/conf/[application]/Application.xml,在列表的最后加上下面的:
            ModulePushPublish
            Wowza PushPublishing Module
            com.wowza.wms.plugin.pushpublish.module.ModulePushPublish
    
  6. [install-dir]/conf/[application]/Application.xml文件最后面的中添加下面的属性参数:
            pushPublishProfilePath
            ${com.wowza.wms.context.VHostConfigHome}/conf/PushPublishProfiles.xml
    
    
            pushPublishMapPath
            ${com.wowza.wms.context.VHostConfigHome}/conf/PushPublishMap.txt
    
    
            pushPublishSDPStorageDir
            ${com.wowza.wms.context.VHostConfigHome}/applications/${com.wowza.wms.context.Application}/sdp
    
  7. 重启 Wowza Media Server。
注意: 默认情况下,push publishing 对所有应用使用同一个映射(map)文件。要为每一个应用配置自己的映射(map)文件,请将 [install-dir]/conf/PushPublishMap.txt 拷贝到 [install-dir]/conf/[application] 文件夹下,然后将pushPublishMapPath 属性改为下面的配置:
        pushPublishMapPath
        ${com.wowza.wms.context.VHostConfigHome}/conf/${com.wowza.wms.context.Application}/PushPublishMap.txt

配置

ModulePushPublish 模块将监听发布到这个服务器上的所有输入流(原始流)。 [install-dir]/conf/PushPublishMap.txt 映射文件被用于建立输入流和推送目的服务器之间的映射。映射文件中的每一行都代表了一个输入流以及要推送的目的服务器。 通过为一个输入流在多行配置多个目的地的方式可以实现一个输入流被推送到多个目的地的需求。 在Wowza Media Server运行时刻,映射信息可以被实时的添加和修改。但是修改并不会影响已经发布到服务器上的流。只有在映射信息被修改后发布到服务器上的流才会收影响。

映射信息的格式如下:

[src-stream-name]={profile:["profile"], [additional-configuration-items]}

例如,使用RTMP协议将一个名为myStream的流推送到另一个Wowza Media Server上, 在PushPublishMap.txt 文件中的映射信息看起来如下所示:

myStream={profile:"rtmp", streamName:"myStream", host:"www.mydestination.com"}

每一个映射信息都引用了一个Profile,它定义了Wowza将采用什么方式来推送这个流。所有可用的Profile都定义在[install-dir]/conf/PushPublishProfiles.xml文件中。Wowza支持以下profile:

rtmp Publish to Wowza Media Server or Adobe Media Server
rtmp-akamai Publish to Akamai HD Network
rtmp-limelight Publish to Limelight CDN
rtp Publish stream as native RTP
mpegts Publish stream as MPEG-TS

每一个profile都有一些各自的附加参数,可以添加到映射信息中。如下:

rtmp, rtmp-akamai, and rtmp-limelight

参数名字 描述信息
streamName 定义了 stream name (默认是输入流的stream name)
application 定义了 application name (默认是 _defapp_)
applicationInstance 定义了 application instance name (默认是_definst_)
host 定义了目的地址的IP或主机名(默认依赖profile)
port 定义了目的地址的端口号(默认是1935)
userName 定义了推送时需要的user name (如果目的地服务器要对推送进行认证,就需要这个user name)
password 定义了推送时需要的password(如果目的地服务器要对推送进行认证,就需要这个password)
secureTokenSharedSecret SecureToken 用于与远端服务器建立连接(如果目的地服务器使用SecureToken)
adaptiveStreaming 如果要做多码率自适应,需要设置为true (默认是false)
sendFCPublish 要在推送之前调用FCPublish命令,需要设置为true(默认是true)
sendReleaseStream 要在推送之前调用releaseStream命令,需要设置为true(默认为true)
sendStreamCloseCommands 要在当推送停止时发送stream close命令,需要设置为true(默认是false)
removeDefaultAppInstance 要从connect命令中删除应用的实例名_definst_,需要设置为true(默认是false)
sendOriginalTimecodes 要发送原始输入流的绝对时间戳时,需要设置为true(多码率自适应时需要,默认是false)
originalTimecodeThreshold 将原始输入流的timecodes发送到更低级别的(timecode magnitude)目的地时使用 (当目的服务器是Adobe Media Server时需要, 默认是0)
connectionFlashVersion 与远端服务器连接时,发送Flash的版本(默认依赖profile)
queryString 在与远端服务器建立连接时,作为查询字符串添加在URL上(默认是[no-value])
debugLog 设置为true以打开建立连接的日志记录开关(默认是false)
debugPackets 设置为true 以打开详细的打包日志记录开关(默认是false)
akamai.network 设置为false 以允许为Akamai AMS network扁平化(non EVENT_ANGLE_BITRATE) stream name (只针对rtmp-akamai only)(默认是 true)
akamai.streamId 用于定义StreamId (只针对rtmp-akamai )
akamai.sendToBackupServer 如果设置为true, 目的服务器将被设置为备份服务器(只针对rtmp-akamai) (默认是false)
注意: connectionFlashVersion 的值可以采用下面的变量:
${com.wowza.wms.pushpublish.CurrentFMLEVersion} 当前 Adobe® Flash® Media Live Encoder version number: FMLE/3.0 (compatible; FMSc/1.0)
${com.wowza.wms.pushpublish.CurrentFlashVersion} Adobe Flash Player version: WIN 10,0,12,36
${com.wowza.wms.pushpublish.PushPublishVersion} Wowza Media Server Push Publishing version

rtp

参数名字 描述信息
streamName SDP 文件的文件名
host 目的服务器的主机名或IP地址
videoPort 目的服务器的视频端口
audioPort 目的服务器的音频端口
timeToLive 当通过组播推流时,这是UDP包的TTL(默认是63)
streamWaitTimeout 当一个输入流进入时,这是等待这个流被识别和
接受的毫秒时间(默认是5000)

mpegts

参数名字 描述信息
streamName SDP文件的文件名
host 目的服务器的主机名或IP地址
port 目的服务器的端口
timeToLive 当通过组播推流时,这是UDP包的TTL(默认是63)
rtpWrap 设置为true 以将MPEG-TS流封装在RTP包中(默认是false)
streamWaitTimeout 当一个输入流进入时,这是等待这个流被识别和
接受的毫秒时间(默认是5000)

多个目的服务器

一个输入流可以被推送到多个目的服务器。要这么做,只要为这个输入流添加一个新的映射信息。例如,要将一个名为myStream的输入流推送到一个远端的Wowza Media Server,同时还要按MPEG-TS流的形式将其推送到一个组播地址上,你可以在映射文件中添加下面的信息:

myStream={profile:"rtmp", streamName:"myStream", host:"wowza.myserver.com", userName:"myuser", password:"mypassword"}
myStream={profile:"mpegts", streamName:"myStreamMPEGTS", host:"239.1.1.1", port:10000}

推送连接的调试

要调试连接时遇到的问题,你可以为每一个目的服务器配置2个级别的调试: debugLogdebugPackets。当使用它们时,debugLog 记录了高层面(high-level)的连接信息以及连接状态。 专业的RTMP连接信息则位于数据包层面,debugPackets 记录了详细的每一个包的信息。下面是一个同时采用了这两个级别的log的映射信息:

myStream={profile:"rtmp", streamName:"myStream", host:"wowza.myserver.com", userName:"myuser", password:"mypassword", debugLog:true, debugPackets:true}

对于更深入的调试需求,请阅读如何调试Push Publishing 插件


API

Push Publishing AddOn 包含了一个底层的(low-level)的应用程序接口(API),你可以用它创建你自己的推送程序。这些API的Javadoc文档被包含在这个插件包的documentation/javaapi 文件夹下。 模块[package]/src/ModulePushPublishSimpleExample.java 是一个简单的例子,它向你示例了如何使用这些API向一个远端的服务器推送一个RTMP流。

这个模块监听准备推送的新的输入流,将其推送到一个名为push-[streamName]的应用上。当这个输入停止时(unPublished),它也停止了推送。要使用这个模块。请下载并安装Wowza IDE 并创建包含这个Class的一个项目。要将这个模块添加到你的应用中,用文本编辑器打开[install-dir]/conf/[application]/Application.xml,在列表中添加下面的信息:

        ModulePushPublishSimpleExample
        ModulePushPublishSimpleExample
        com.wowza.wms.plugin.test.pushpublish.ModulePushPublishSimpleExample

推送的目的地


Wowza Media Server

将流推送到另一个Wowza Media Server时,请使用rtmp profile。UserNamePassword 仅仅在目的服务器要对推流进行认证时才需要。

下面是一个例子,它将流myStream 推送到一个远端的位于wowza.myserver.com上的Wowza Media Server,并假定远端要对RTMP推流进行认证并使用下面的认证信息:

  • User Name: myuser
  • Password: mypassword

映射信息的例子:

myStream={profile:"rtmp", streamName:"myStream", host:"wowza.myserver.com", userName:"myuser", password:"mypassword"}

为了实现码率自适应,就要确认关键帧是对齐的,这样会导致映射信息会略为复杂一些。例如,针对下面三个码率的流:

  • myStream_480p: 500Kbps
  • myStream_360p: 750Kbps
  • myStream_720p: 1000Kbps

下面的映射信息可以使得推送正常工作,并能确保关键帧对齐:

myStream_480p={profile:"rtmp", streamName:"myStream_480p", userName:"myuser", password:"mypassword", adaptiveStreaming:true}
myStream_360p={profile:"rtmp", streamName:"myStream_360p", userName:"myuser", password:"mypassword", adaptiveStreaming:true}
myStream_720p={profile:"rtmp", streamName:"myStream_720p", userName:"myuser", password:"mypassword", adaptiveStreaming:true}

为了能够正常播放并实现码率自适应,你必须在远端的Wowza Media Server的[install-dir]/content目录下创建一个同步多媒体集成语言(SMIL)文件。例如,上面的流对应的SMIL文件如下:

        
        

播放:

  1. 打开 [install-dir]/examples/LiveVideoStreaming/FlashRTMPPlayer/player.html
  2. Server输入框输入Wowza Media Server的服务器IP地址和应用名,格式为: rtmp://[wowza-ip-address]/[application]/
  3. Stream输入框输入stream name。
  4. 点击Connect 按钮。

Adobe Media Server

要将流推送到Adobe Media Server, 请使用rtmp profile。 UserNamePassword 仅在Adobe Media Server对推流进行认证时使用。

下面是将流myStream推送到远端的Adobe Media Server时的例子,假定它需要对推送流进行RTMP认证并使用下面的认证信息:

  • User Name: myuser
  • Password: mypassword

映射信息如下:

myStream={profile:"rtmp", streamName:"myStream", userName:"myuser", password:"mypassword", originalTimecodeThreshold:0x100000}

播放:

  1. 打开[install-dir]/examples/LiveVideoStreaming/FlashRTMPPlayer/player.html
  2. Server输入框中输入Adobe Media Server 的IP地址和应用名,格式为rtmp://[adobe-address]/[application]/
  3. Stream中输入stream name
  4. 点击Connect按钮。

MPEG-2 Transport Stream (MPEG-TS)

将MPEG-TS流推送到一个组播地址239.1.1.1:10000, 请使用下面的映射信息:

myStream={profile:"mpegts", streamName:"myStreamMPEGTS", host:"239.1.1.1", port:10000, rtpWrap:false}

将MPEG-TS流推送到一个组播地址239.1.1.1:10002,并将其封装到RTP包中,使用下面的映射信息:

myStream={profile:"mpegts", streamName:"myStreamMPEGTSWrapped", host:"239.1.1.1", port:10002, rtpWrap:true}

Real-time Transport Protocol (RTP unicast 或 multicast)

将native RTP 流推送到一个组播地址239.1.1.1,端口为10004-10007,使用下面的映射信息:

myStream={profile:"rtp", streamName:"myStreamRTP", host:"239.1.1.1", videoPort:10004, audioPort:10006}
Note: 当推送native RTP流时,视频和音频分别使用2个UDP端口。请确认VideoPortAudioPort 的值是偶数,这样会给第二个端口做出预留。
Note: 当推送native RTP流或MPEG-TS流,Wowza会在[install-dir]/applications/[application]/sdp文件夹下自动生成一个SDP文件。SDP文件的名字是映射信息中StreamName的值,并以.sdp 为文件扩展名。支持组播的播放器可以使用这个文件播放这个流。
Note: 当推送native RTP流或MPEG-TS流,单播和组播地址场景下的映射配置基本一样。唯一不同的是映射配置信息中的Host字段必须在正确的范围内。关于组播地址的范围,请参考: Multicast address

RTSP Playback (native RTP 或 MPEG-TS (RTP Wrapped))

native RTP流或MPEG-TS流(rtpWrap:true) 都可以采用RTSP/RTP来播放。要播放组播地址的RTSP/RTP流, 你必须在RTSP/RTP播放URL后面加上multicastplay 的查询参数。例如, 一个推送过来的流为myStream,那么RTSP/RTP播放URL为:

默认的单播RTSP:
rtsp://[wowza-ip-address]:1935/[application]/myStream

组播RTSP:
rtsp://[wowza-ip-address]:1935/[application]/myStream?multicastplay
以上将播放第一个被加载native RTP 或 MPEG-TS profile。如果native RTP 或 MPEG-TS 使用了多个profile,或者第一个profile是使用rtpWrap:false的MPEG-TS, 请将要播放的流的streamName作为multicastplay参数的值。
native RTP:
rtsp://[wowza-ip-address]:1935/[application]/myStream?multicastplay=myStreamRTP

MPEG-TS (rtpWrap:true):
rtsp://[wowza-ip-address]:1935/[application]/myStream?multicastplay=myStreamMPEGTSWrapped
友情链接:

热门文章推荐

请稍候...