Wowza Community

RTPPusher: package for pushing RTP/MPEG-TS unicast and multicast streams out of Wowza

https://www.wowza.com/docs/how-to-get-rtppusher-addon-multicast-and-unicast-streams-to-udp-and-rtsp

I followed the instructions in order to create an MPEG-TS/UDP or a raw RTP multicast output stream. I have noticed the following:

  • Raw RTP streams do not seem to work at all. I set the video port to 8000 and the audio port to 8002. I see something like this this in the log:
comment server  ERROR   500     -       RTPMulticastTransport.bind: java.lang.IllegalArgumentException: port out of range:-1
comment server  ERROR   500     -       RTPMulticastTransport.bind: java.lang.IllegalArgumentException: port out of range:-1
comment server  INFO    200     -       MulticastTransport.bind: 233.21.32.222/8002
comment server  INFO    200     -       MulticastTransport.bind: 233.21.32.222/8003

And indeed tcpdump shows no packets are sent to port 8000/8001. It does not matter if the lower port is assigned to audio or video, only the audio port is honored. The ‘RTP Wrapped’ option also does not make any difference.

  • The MPEG-TS muxed option seems to work, but I noticed that tcpdump reports a payload size of 1128 bytes (6 188-byte TS packets) instead of the “usual” 1316 (7 TS packets). The packet size should be configurable, both for MPEG-TS (number of TS packets) and RTP (max size, perhaps based on MTU).

  • In all cases tcpdump shows a TTL of 1. This should obviously be configurable.

The last two issues are not specific to the RTPPusher module, but should be addressed in the RTPUtils API.

Furthermore, building on the getSDPData method of RTPUtils, it would be very handy if some module (like RTPPusher) could expose the SDP in some way (through HTTP or RTSP), so that clients can be pointed to it in order to join and play the stream.

Try installing the latest patch. It should fix the error message:

http://www.wowza.com/devbuild.html

I will look into adding support for the SDP data.

Charlie

Not directly. The Silverlight player cannot directly receive a multicast RTP or MPEG-TS stream. You can write Silverlight client side code to do this but it would be quite involved.

Charlie

Seems like a good result, according to the log. I think if there is a problem it must be the network or a firewall at some point.

Richard

It should work. You have to try it.

Richard

This is not going to accomplish RTMP push. So I’m not sure if it will do what you really need it to do.

Richard

Send email to support@wowza.com with details of what you are trying to do and what arrangements you are making with bitgravity.

Include a link back to this thread.

Richard

I forgot to mention that I tested the above on WMS 2.0.0.15 build24277.

I’m currently investigating how to set up the following:

Axis Camera (encodes H264) —> Wowza (adds project-specific metadata to the stream) —> CDN (I’m currently talking to BitGravity) —> Flash Client

The problem is pushing the stream from Wowza to the CDN - can RTPPusher do this? Specifically, I need it to push either as RTMP Push or RTSP Announce.

Thanks!

/Mikael

Looking at the settings it’s not, to me, obvious how to set it up to push as RTMP Push nor RTSP Announce. Even though I got a bit of experience in the field I’m not 100% into all these protocols - what they got in common and what differentiates them.

If you can give me some guidance, I’d really appreciate it :slight_smile:

Thanks!

/m

I try to use the RTPPusher package but I it seems that I’m missing something.

I created live application on Wowza.

[root@WowzaMediaServer live]# more Application.xml 
  <Root>\
        <Application>\
                <!-- Uncomment to set application level timeout values\
                <ApplicationTimeout>60000</ApplicationTimeout>\
                <PingTimeout>12000</PingTimeout>\
                <ValidationFrequency>8000</ValidationFrequency>\
                <MaximumPendingWriteBytes>0</MaximumPendingWriteBytes>\
                <MaximumSetBufferTime>60000</MaximumSetBufferTime>\
                <MaximumStorageDirDepth>25</MaximumStorageDirDepth>\
                -->\
                <Connections>\
                        <AutoAccept>true</AutoAccept>\
                        <AllowDomains></AllowDomains>\
                </Connections>\
                <!--\
                        StorageDir path variables\
                        \
                        $\{com.wowza.wms.AppHome\} - Application home directory\
                        $\{com.wowza.wms.ConfigHome\} - Configuration home directory\
                        $\{com.wowza.wms.context.VHost\} - Virtual host name\
                        $\{com.wowza.wms.context.VHostConfigHome\} - Virtual host config directory\
                        $\{com.wowza.wms.context.Application\} - Application name\
                        $\{com.wowza.wms.context.ApplicationInstance\} - Application instance name\
                        \
                -->\
                <Streams>\
                        <StreamType>live</StreamType>\
                        <StorageDir>$\{com.wowza.wms.context.VHostConfigHome\}/content</StorageDir>\
                        <KeyDir>$\{com.wowza.wms.context.VHostConfigHome\}/keys</KeyDir>\
                        <!-- LiveStreamPacketizers (separate with commas): cupertinostreamingpacketizer, smoothstreamingpacketizer, 
cupertinostreamingrepeater, smoothstreamingrepeater -->\
                        <LiveStreamPacketizers>cupertinostreamingpacketizer,smoothstreamingpacketizer</LiveStreamPacketizers>                   \
                        <!-- Properties defined here will override any properties defined in conf/Streams.xml for any streams types loaded by this 
application -->\
                        <Properties>\
                        </Properties>\
                </Streams>\
                <!-- HTTPStreamers (separate with commas): cupertinostreaming, smoothstreaming -->\
                <HTTPStreamers>cupertinostreaming,smoothstreaming</HTTPStreamers>                       \
                <SharedObjects>\
                        <StorageDir></StorageDir>\
                </SharedObjects>\
                <Client>\
                        <IdleFrequency>-1</IdleFrequency>\
                        <Access>\
                                <StreamReadAccess>*</StreamReadAccess>\
                                <StreamWriteAccess>*</StreamWriteAccess>\
                                <StreamAudioSampleAccess></StreamAudioSampleAccess>\
                                <StreamVideoSampleAccess></StreamVideoSampleAccess>\
                                <SharedObjectReadAccess>*</SharedObjectReadAccess>\
                                <SharedObjectWriteAccess>*</SharedObjectWriteAccess>\
                        </Access>\
                </Client>\
                <RTP>\
                        <!-- RTP/Authentication/[type]Methods defined in Authentication.xml. Default setup includes; none, basic, digest -->\
                        <Authentication>\
                                <PublishMethod>none</PublishMethod>\
                                <PlayMethod>none</PlayMethod>\
                        </Authentication>\
                        <!-- RTP/AVSyncMethod. Valid values are: senderreport, systemclock, rtptimecode -->\
                        <AVSyncMethod>senderreport</AVSyncMethod>\
                        <MaxRTCPWaitTime>12000</MaxRTCPWaitTime>\
                        <IdleFrequency>75</IdleFrequency>\
                        <RTSPSessionTimeout>0</RTSPSessionTimeout>\
                        <RTSPMaximumPendingWriteBytes>0</RTSPMaximumPendingWriteBytes>\
                        <RTSPBindIpAddress>192.168.200.3</RTSPBindIpAddress>\
                        <RTSPConnectionIpAddress>192.168.200.3</RTSPConnectionIpAddress>\
                        <RTSPOriginIpAddress>192.168.200.3</RTSPOriginIpAddress>\
                        <IncomingDatagramPortRanges>*</IncomingDatagramPortRanges>\
                        <!-- Properties defined here will override any properties defined in conf/RTP.xml for any depacketizers loaded by this 
application -->\
                        <Properties>\
                        </Properties>\
                </RTP>\
                <MediaCaster>\
                        <!-- Properties defined here will override any properties defined in conf/MediaCasters.xml for any MediaCasters loaded by 
this applications -->\
                        <Properties>\
                        </Properties>\
                </MediaCaster>\
                <MediaReader>\
                        <!-- Properties defined here will override any properties defined in conf/MediaReaders.xml for any MediaReaders loaded by 
this applications -->\
                        <Properties>\
                        </Properties>\
                </MediaReader>\
                <MediaWriter>\
                        <!-- Properties defined here will override any properties defined in conf/MediaWriter.xml for any MediaWriter loaded by this 
applications -->\
                        <Properties>\
                        </Properties>\
                </MediaWriter>\
                <LiveStreamPacketizer>\
                        <!-- Properties defined here will override any properties defined in conf/LiveStreamPacketizers.xml for any 
LiveStreamPacketizers loaded by this applications -->\
                        <Properties>\
                        </Properties>\
                </LiveStreamPacketizer>\
                <HTTPStreamer>\
                        <!-- Properties defined here will override any properties defined in conf/HTTPStreamers.xml for any HTTPStreamer loaded by 
this applications -->\
                        <Properties>\
                        </Properties>\
                </HTTPStreamer>\
                <Repeater>\
                        <OriginURL></OriginURL>\
                        <QueryString><![CDATA[]]></QueryString>\
                </Repeater> \
                <Modules>\
                        <Module>\
                                <Name>base</Name>\
                                <Description>Base</Description>\
                                <Class>com.wowza.wms.module.ModuleCore</Class>\
                        </Module>\
                        <Module>\
                                <Name>properties</Name>\
                                <Description>Properties</Description>\
                                <Class>com.wowza.wms.module.ModuleProperties</Class>\
                        </Module>\
                        <Module>\
                                <Name>logging</Name>\
                                <Description>Client Logging</Description>\
                                <Class>com.wowza.wms.module.ModuleClientLogging</Class>\
                        </Module>\
                        <Module>\
                                <Name>flvplayback</Name>\
                                <Description>FLVPlayback</Description>\
                                <Class>com.wowza.wms.module.ModuleFLVPlayback</Class>\
                        </Module> \
                        <Module>\
                                <Name>ModuleRTPPusher</Name>\
                                <Description>ModuleRTPPusher</Description>\
                                <Class>com.wowza.wms.plugin.rtppush.ModuleRTPPusher</Class>\
                        </Module>\
                </Modules>\
                <!-- Properties defined here will be added to the IApplication.getProperties() and IApplicationInstance.getProperties() collections 
-->\
                <Properties>\
                        <Property>\
                                <Name>smoothStreamingMediaMajorVersion</Name>\
                                <Value>2</Value>\
                                <Type>Integer</Type>\
                        </Property>\
                </Properties>\
        </Application>\
</Root>

I uploaded h264 file to Wowza in a directory matching the one in the Application.xml file. I publish the file using the stream manager. (Publish stream successfully started [live/definst]: flv:Extremists.m4v)

Then I connect using RTPPusher client via RTMP on some port to Wowza server.

In stream name I give the name of the published stream (Extremists.mp4), in IP address field I write the mcast address I wish the streamer to send to, and in port I define my port for the mcast stream (video 1234, audio -1,by default)

I also select MPEG-TS option.

I see that the stream is active.

But the problem is that Wowza is not sending any mcast traffic.

I have route added on the server for mcasting. IP tables rules are clear.

In logs I get the message:

INFO stream play Extremists.m4v -

INFO server comment - ModuleRTPPusher.startRTPPush: RTP Session started: streamName:Extremists.m4v ipAddress:239.1.1.1 audioPort:-1 videoPort:12345

Any suggestions? Thank you

Marko

hi,

can I use multicast output of RTPPusher with Silverlight? Sorry if that is silly question as I am new to streaming.