Ingest UDP stream with H264 to Wowza

Hi,

I’m trying to ingest a UDP stream into Wowza and play it back, this is despite following the articles on the Wowza forum (https://www.wowza.com/docs/how-to-publish-and-play-a-live-stream-mpeg-ts-based-encoder.

Using VLC media player I can open the stream being published on multicast from the encoder with ‘vlc udp://@232.25.12.42:10000’

In VLC media player under Tools -> Media Information -> Codec Tab I see the Codec being “H264 - MPEG-4 AVC (Part 10) (h264)”

On standard definiton video the Codec is "MPEG-1/2 Video (mpgv).

I have an Application.xml file which looks like this below:

<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, sanjosestreamingpacketizer, mpegdashstreamingpacketizer, cupertinostreamingrepeater, smoothstreamingrepeater, sanjosestreamingrepeater, dvrstreamingpacketizer, dvrstreamingrepeater -->
            <LiveStreamPacketizers>cupertinostreamingpacketizer,smoothstreamingpacketizer,sanjosestreamingpacketizer</LiveStreamPacketizers>
            <!-- Properties defined here will override any properties defined in conf/Streams.xml for any streams types loaded by this application -->
            <Properties>
            </Properties>
        </Streams>
        <Transcoder>
            <!-- To turn on transcoder set to: transcoder -->
            <LiveStreamTranscoder></LiveStreamTranscoder>
            <!-- [templatename].xml or ${SourceStreamName}.xml -->
            <Templates>${SourceStreamName}.xml,transrate.xml</Templates>
            <ProfileDir>${com.wowza.wms.context.VHostConfigHome}/transcoder/profiles</ProfileDir>
            <TemplateDir>${com.wowza.wms.context.VHostConfigHome}/transcoder/templates</TemplateDir>
            <Properties>
            </Properties>
        </Transcoder>
        <DVR>
            <!-- As a single server or as an origin, use dvrstreamingpacketizer in LiveStreamPacketizers above -->
            <!-- Or, in an origin-edge configuration, edges use dvrstreamingrepeater in LiveStreamPacketizers above -->
            <!-- As an origin, also add dvrchunkstreaming to HTTPStreamers below -->
            <!-- If this is a dvrstreamingrepeater, define Application/Repeater/OriginURL to point back to the origin -->
           
            <!-- To turn on DVR recording set Recorders to dvrrecorder.  This works with dvrstreamingpacketizer  -->
            <Recorders></Recorders>
            <!-- As a single server or as an origin, set the Store to dvrfilestorage-->
            <!-- edges should have this empty -->
            <Store></Store>
            <!--  Window Duration is length of live DVR window in seconds.  0 means the window is never trimmed. -->
            <WindowDuration>0</WindowDuration>
            <!-- Storage Directory is top level location where dvr is stored.  e.g. c:/temp/dvr -->
            <StorageDir>${com.wowza.wms.context.VHostConfigHome}/dvr</StorageDir>
            <!-- valid ArchiveStrategy values are append, version, delete -->
            <ArchiveStrategy>append</ArchiveStrategy>
            <!-- Properties for DVR -->
            <Properties>
            </Properties>
        </DVR>
        <TimedText>
            <!-- VOD caption providers (separate with commas): vodcaptionprovidermp4_3gpp, vodcaptionproviderttml, vodcaptionproviderwebvtt,  vodcaptionprovidersrt, vodcaptionproviderscc -->
            <VODTimedTextProviders>vodcaptionprovidermp4_3gpp</VODTimedTextProviders>
           
            <!-- Properties for TimedText -->
            <Properties>
            </Properties>       
        </TimedText>
       
        <!-- HTTPStreamers (separate with commas): cupertinostreaming, smoothstreaming, sanjosestreaming, mpegdashstreaming, dvrchunkstreaming -->
        <HTTPStreamers>cupertinostreaming,smoothstreaming,sanjosestreaming</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>digest</PublishMethod>
                <PlayMethod>none</PlayMethod>
            </Authentication>
            <!-- RTP/AVSyncMethod. Valid values are: senderreport, systemclock, rtptimecode -->
            <AVSyncMethod>senderreport</AVSyncMethod>
            <MaxRTCPWaitTime>12000</MaxRTCPWaitTime>
            <IdleFrequency>75</IdleFrequency>
            <RTSPSessionTimeout>90000</RTSPSessionTimeout>
            <RTSPMaximumPendingWriteBytes>0</RTSPMaximumPendingWriteBytes>
            <RTSPBindIpAddress></RTSPBindIpAddress>
            <RTSPConnectionIpAddress>0.0.0.0</RTSPConnectionIpAddress>
            <RTSPOriginIpAddress>127.0.0.1</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>
            <RTP>
                <RTSP>
                    <!-- udp, interleave -->
                    <RTPTransportMode>udp</RTPTransportMode>
                </RTSP>
            </RTP>
            <!-- Properties defined here will override any properties defined in conf/MediaCasters.xml for any MediaCasters loaded by this applications -->
            <Properties>
                <Property>
                    <Name>forceInterleaved</Name>
                    <Value>false</Value>
                    <Type>Boolean</Type>
                </Property>
            </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>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>
        </Modules>
        <!-- Properties defined here will be added to the IApplication.getProperties() and IApplicationInstance.getProperties() collections -->
        <Properties>
        </Properties>
    </Application>
</Root>

In the content folder I’ve created an mpegts.stream file which contains udp://232.25.12.42:10000

In the Wowza console when I start the stream I get the following outputs…

INFO server comment - Wowza Media Server is started!
INFO server comment - RTPSessionDescriptionDataProviderBasic.getStreamInfo[live/_definst_]: URI: udp://232.25.12.42:10000
INFO stream create - -
INFO server comment - RTPDePacketizerMPEGTS.init: Drop incomplete video frames
INFO stream publish mpegts.stream -
INFO server comment - MulticastTransport.bind[live/_definst_]: 232.25.12.42/10000
INFO server comment - RTPMediaCaster.Reconnector[10775044:live/_definst_:mpegts.stream]: done: 1
INFO server comment - MulticastTransport.firstPacket: 232.25.12.42/10000
INFO server comment - [live/_definst_/mpegts.stream]: handleTransportStreamBlock: new MPTS.
INFO server comment - [live/_definst_/mpegts.stream]: MPEG2PATAssembler:MonitorStart
INFO server comment - [live/_definst_/mpegts.stream]: MPEG2MPTS:StartStream: PID: 0x0
INFO server comment - [live/_definst_/mpegts.stream]: Recieved PAT
INFO server comment - [live/_definst_/mpegts.stream]: PMT Version 29
INFO server comment - [live/_definst_/mpegts.stream]:     Program: 0 PMT PID: 0x10
INFO server comment - [live/_definst_/mpegts.stream]:     Program: 3900 PMT PID: 0x105
INFO server comment - [live/_definst_/mpegts.stream]:     Program: 3815 PMT PID: 0x100
INFO server comment - [live/_definst_/mpegts.stream]:     Program: 3816 PMT PID: 0x101
INFO server comment - [live/_definst_/mpegts.stream]:     Program: 3817 PMT PID: 0x102
INFO server comment - [live/_definst_/mpegts.stream]:     Program: 3819 PMT PID: 0x103
INFO server comment - [live/_definst_/mpegts.stream]: MPEG2PMTAssembler:MonitorStart: PID: 261 Program Number: 3900
INFO server comment - [live/_definst_/mpegts.stream]: MPEG2MPTS:StartStream: PID: 0x105
INFO server comment - RTPMediaCaster.streamTimeout[10775044:live/_definst_:mpegts.stream]: timeout:12000 diff:12001 reason:101
INFO server comment - RTPMediaCaster.resetConnection[10775044:live/_definst_:mpegts.stream]:
INFO server comment - RTPMediaCaster.closeRTPSession[10775044:live/_definst_:mpegts.stream]
INFO server comment - MulticastTransport.unbind[live/_definst_]: 232.25.12.42/10000 sent:0 recv:7135
INFO server comment - RTPMulticastListener.run(stop)
INFO stream unpublish mpegts.stream -
INFO stream destroy mpegts.stream -
INFO server comment - RTPMediaCaster.Reconnector[10775044:live/_definst_:mpegts.stream]: start: 2
INFO server comment - RTPSessionDescriptionDataProviderBasic.getStreamInfo[live/_definst_]: URI: udp://232.25.12.42:10000
INFO stream create - -
INFO server comment - RTPDePacketizerMPEGTS.init: Drop incomplete video frames
INFO server comment - MulticastTransport.bind[live/_definst_]: 232.25.12.42/10000
INFO stream publish mpegts.stream -
INFO server comment - RTPMediaCaster.Reconnector[10775044:live/_definst_:mpegts.stream]: done: 2
INFO server comment - MulticastTransport.firstPacket: 232.25.12.42/10000
INFO server comment - [live/_definst_/mpegts.stream]: handleTransportStreamBlock: new MPTS.
INFO server comment - [live/_definst_/mpegts.stream]: MPEG2PATAssembler:MonitorStart
INFO server comment - [live/_definst_/mpegts.stream]: MPEG2MPTS:StartStream: PID: 0x0
INFO server comment - [live/_definst_/mpegts.stream]: Recieved PAT
INFO server comment - [live/_definst_/mpegts.stream]: PMT Version 29
INFO server comment - [live/_definst_/mpegts.stream]:     Program: 0 PMT PID: 0x10
INFO server comment - [live/_definst_/mpegts.stream]:     Program: 3900 PMT PID: 0x105
INFO server comment - [live/_definst_/mpegts.stream]:     Program: 3815 PMT PID: 0x100
INFO server comment - [live/_definst_/mpegts.stream]:     Program: 3816 PMT PID: 0x101
INFO server comment - [live/_definst_/mpegts.stream]:     Program: 3817 PMT PID: 0x102
INFO server comment - [live/_definst_/mpegts.stream]:     Program: 3819 PMT PID: 0x103
INFO server comment - [live/_definst_/mpegts.stream]: MPEG2PMTAssembler:MonitorStart: PID: 261 Program Number: 3900
INFO server comment - [live/_definst_/mpegts.stream]: MPEG2MPTS:StartStream: PID: 0x105

---------- The above just repeats over and over --------------

From the output it looks like it’s reading something to do with the streams, but I can’t play back any video at all if I try connecting to the stream over rtmp (or anything else).

Any help is really appreciated.

Thanks,

Hi,

We have a troubleshooting log messages article which can be found here,

How to troubleshoot error messages

I did a search for “RTPMediaCaster.Reconnector” as this appears in you logs and found two possible matches listed below:

Cause: This MediaCaster problem is most commonly caused by some kind of network error. For example, the SHOUTcast server isn’t turned on. Here we see a live stream started, then warnings and errors that indicate that the Wowza Media Server was impacted by a dependency failure.

Cause: 2 or 4 bind lines, followed quickly by 2 or 4 unbind lines indicate a failed UDP session, ports blocked. Typically the problem is with the firewall on the computer where Wowza Media Server is installed. It could also be the router, proxy in the environment, or carrier network in RTSP streaming application.

Did you use stream manager to start the stream or has this been added to StartupStreams.xml?

If neither of these possible causes are able to help you troubleshoot the issue I recommend you open a ticket by sending an email to support@wowza.com.

Please include a zipped copy of the [Wowza-Install]/conf and [Wowza-Install]/log directories for analysis, a copy of the .stream file in use and a link to this thread for reference.

Many thanks

Jason

Hi,

Thanks for the update, I can see this is now being handled via the ticket system.

Jason

Hi,

Thanks again for posting the issue and the detailed resolution for overcoming this encoder problem, this will help many others with the same issue.

I’d also like to thank you for your feedback I will pass your comments along to our development team who will review them.

Regards,

Jason

Hi Jason,

Effectively the encoder and the Wowza Server are sitting on the same Debian box. I can run VLC from another host on my network and connect to it via UDP Multicast - there’s no firewall placed anywhere.

The stream is started using StartupStreams.xml.

I think my best course of action is to do as you suggested and log a support ticket.

Many thanks for your assistance - I will post the outcome here.

Jason,

I managed to resolve this - I have notified support.

My encoder seems to announce all of the Program PMT’s as it finds them in an arbitrary order.

I noticed from the output below that Wowza seemed to be selecting the first PID in the list but with mumudvb (the encoder) you select only specific channels to multicast (in my case I was selecting channel 3815 with PID 0x105). As you can see in the output Wowza is trying to Start Stream 0x105 which is PMT 3900.

INFO server comment - RTPMediaCaster.Reconnector[1147441139:live/definst:mpeg.stream]: done: 1

INFO server comment - [live/definst/mpeg.stream]: Received PAT

INFO server comment - [live/definst/mpeg.stream]: PAT Version 5

INFO server comment - [live/definst/mpeg.stream]: Program: 0 PMT PID: 0x10

INFO server comment - [live/definst/mpeg.stream]: Program: 3900 PMT PID: 0x105 <---- Wowza is trying this one but it isnt there

INFO server comment - [live/definst/mpeg.stream]: Program: 3815 PMT PID: 0x100 <---- This is the actual channel being multicast

INFO server comment - [live/definst/mpeg.stream]: Program: 3816 PMT PID: 0x101

INFO server comment - [live/definst/mpeg.stream]: Program: 3817 PMT PID: 0x102

INFO server comment - [live/definst/mpeg.stream]: Program: 3819 PMT PID: 0x103

INFO server comment - [live/definst/mpeg.stream]: MPEG2PMTAssembler:MonitorStart: PID: 261 Program Number: 3900 <----- Wowza Trying

INFO server comment - [live/definst/mpeg.stream]: MPEG2MPTS:StartStream: PID: 0x105

The solution was simple after a quick search around the forums which this article explains: https://www.wowza.com/docs/how-to-select-mpeg-ts-stream-by-program-id-and-also-audio-language-by-pid

I simply put selected the program id to stream in the mpeg.stream file.

udp://239.1.1.1:5500?programID=3815

And now it works!!!

I’m unsure why but VLC was able to detect that channel 3815 was being streamed - I’m unsure if this is simply the loose nature of VLC or if it’s an improvement that can be made to Wowza.

Many thanks for your assistance.