Wowza Community

MPEG2-TS (MPTS) Live Stream Setup and test using VLC Player - Not working

We have WowzaMediaServer-3.6.3 installed on CentOS release 6.5. I am trying to serve out a live stream. Specifically, we have an mpeg2 multi-program transport stream (MPTS) that the wowza server is sibscribed to. I have followed the instructions at https://www.wowza.com/docs/how-to-publish-and-play-a-live-stream-mpeg-ts-based-encoder

The image below represents an overview of what we are trying to do:

We have two network interfaces up and running on the Wowza server:

eth0 is configured with a public ip, which we specify in the VLC player on the client PC, by Media > Open Network Stream > ‘rtsp://xx.xx.xx.xx:1935/live/mpegts.stream’.

eth1 is configured with a private ip and is subscribed to a multicast stream from our cable plant headend. We have tested the stream using ts reader and know it works.

We are using tcpdump to verify activity when testing. We can see the traffic start pouring in on eth1 when we start the wowza service. We see a burst of traffic on eth0 when pressing play in VLC on the client PC. We see what we think is an inordinate number of checksum errors in the burst of traffic on eth0. We are also capturing traffic on the client PC, using wireshark. We also see and inordinate number of checksum errors there. However what we see indicates that traffic is indeed moving between the client PC and the wowza server, thus a firewall issue is not in play here. Also, to be certain firewall is not causing uissue, we have completely disabled the firewall on the wowza server for soem of our testing.

tcpdump -ni eth0 -vvv -s0 ip host [my client PC ip] and not port 22

13:20:17.231377 IP (tos 0x0, ttl 64, id 43954, offset 0, flags [DF], proto TCP (6), length 266)
    xx.xx.xx.xx.macromedia-fcs > xx.xx.xx.xx.55839: Flags [P.], cksum 0x2a69 (incorrect -> 0x4929), seq 1:227, ack 380, win 123, length 226
13:20:17.233467 IP (tos 0x0, ttl 125, id 11916, offset 0, flags [DF], proto TCP (6), length 40)
    xx.xx.xx.xx.55839 > xx.xx.xx.xx.macromedia-fcs: Flags [F.], cksum 0x6105 (correct), seq 380, ack 227, win 255, length 0
13:20:17.233685 IP (tos 0x0, ttl 64, id 43955, offset 0, flags [DF], proto TCP (6), length 40)
    xx.xx.xx.xx.macromedia-fcs > xx.xx.xx.xx.55839: Flags [F.], cksum 0x6188 (correct), seq 227, ack 381, win 123, length 0
13:20:17.235291 IP (tos 0x0, ttl 125, id 11918, offset 0, flags [DF], proto TCP (6), length 40)
    xx.xx.xx.xx.55839 > xx.xx.xx.xx.macromedia-fcs: Flags [.], cksum 0x6104 (correct), seq 381, ack 228, win 255, length 0

tcpdump -vv -ni eth1 -s0 net [my cable plant network]/4

14:03:14.300821 IP (tos 0x0, ttl 126, id 36887, offset 0, flags [DF], proto UDP (17), length 1344)
    xx.xx.xx.xx.6000 > xx.xx.xx.xx.6000: [no cksum] UDP, length 1316
14:03:14.301334 IP (tos 0x0, ttl 126, id 36888, offset 0, flags [DF], proto UDP (17), length 1344)
    xx.xx.xx.xx.6000 > xx.xx.xx.xx.6000: [no cksum] UDP, length 1316
14:03:14.301935 IP (tos 0x0, ttl 126, id 36889, offset 0, flags [DF], proto UDP (17), length 1344)
    xx.xx.xx.xx.6000 > xx.xx.xx.xx.6000: [no cksum] UDP, length 1316
14:03:14.302424 IP (tos 0x0, ttl 126, id 36890, offset 0, flags [DF], proto UDP (17), length 1344)
    xx.xx.xx.xx.6000 > xx.xx.xx.xx.6000: [no cksum] UDP, length 1316
14:03:14.303003 IP (tos 0x0, ttl 126, id 36891, offset 0, flags [DF], proto UDP (17), length 1344)
    xx.xx.xx.xx.6000 > xx.xx.xx.xx.6000: [no cksum] UDP, length 1316

We have tried a number of modifications to our config files, without success. Per the Wowza support team’s suggestion, we installed the following config files, which were supplied by them.

We have tried with and without transcoding. You will see by the config files posted below that transcoding is currently turned off.

…content/mpegts.stream file:

{uri:"udp://224.xx.xx.x:6000", 
streamTimeout:5000, 
reconnectWaitTime:3000, 
mpegtsAudioPID:"0x34", 
mpegtsVideoPID:"0x31", 
mpegtsProgramID:1, 
mpegtsAudioLanguage:"eng", 
mpegtsAudioBitrate:50000, 
mpegtsVideoBitrate:750000, 
mpegtsAudioIsAligned:true, 
mpegtsVideoIsAligned:false, 
mpegtsAdjustBFrameTimecodes:false, 
mpegtsDropIncompleteVideoFrames:true, 
mpegtsLogIncompleteVideoFrames:true, 
mpegtsMapTimeToSystemTime:false, 
mpegtsMapTimeToSystemTimeWindow:2000, 
mpegtsImportAC3:false 
}

…/conf/live/Application.xml file:

<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></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>interleave</RTPTransportMode>
                </RTSP>
            </RTP>
            <!-- 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>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>

…/conf/Server.xml file:

<Root>
    <Server>
        <CommandInterface>
            <HostPort>
                <IpAddress>*</IpAddress>
                <Port>8083</Port>
            </HostPort>
        </CommandInterface>
        <AdminInterface>
            <!-- Objects exposed through JMX interface: Server, VHost, VHostItem, Application, ApplicationInstance, MediaCaster, Module, Client, MediaStream, SharedObject, Acceptor, IdleWorker -->
            <ObjectList>Server,VHost,VHostItem,Application,ApplicationInstance,MediaCaster,Module,IdleWorker</ObjectList>
        </AdminInterface>
        <!-- JMXUrl: service:jmx:rmi://localhost:8084/jndi/rmi://localhost:8085/jmxrmi -->
        <JMXRemoteConfiguration>
            <Enable>false</Enable>
            <IpAddress>localhost</IpAddress> <!-- set to localhost or internal ip address if behind NAT -->
            <RMIServerHostName>localhost</RMIServerHostName> <!-- set to external ip address or domain name if behind NAT -->
            <RMIConnectionPort>8084</RMIConnectionPort>
            <RMIRegistryPort>8085</RMIRegistryPort>
            <Authenticate>true</Authenticate>
            <PasswordFile>${com.wowza.wms.ConfigHome}/conf/jmxremote.password</PasswordFile>
            <AccessFile>${com.wowza.wms.ConfigHome}/conf/jmxremote.access</AccessFile>
            <SSLSecure>false</SSLSecure>
        </JMXRemoteConfiguration>
        <UserAgents>Shockwave Flash|CFNetwork|MacNetwork/1.0 (Macintosh)</UserAgents>
        <ServerListeners>
            <!--
            <ServerListener>
                <BaseClass>com.wowza.wms.plugin.loadbalancer.ServerListenerLoadBalancerListener</BaseClass>
            </ServerListener>
            -->
            <!--
            <ServerListener>
                <BaseClass>com.wowza.wms.plugin.loadbalancer.ServerListenerLoadBalancerSender</BaseClass>
            </ServerListener>
            -->
        </ServerListeners>
        <VHostListeners>
            <!--
            <VHostListener>
                <BaseClass></BaseClass>
            </VHostListener>
            -->
        </VHostListeners> 
        <HandlerThreadPool>
            <PoolSize>10</PoolSize>
        </HandlerThreadPool>
        <TransportThreadPool>
            <PoolSize>10</PoolSize>
        </TransportThreadPool>
        <RTP>
            <DatagramStartingPort>6970</DatagramStartingPort>
            <DatagramPortSharing>false</DatagramPortSharing>
        </RTP>
        <!-- Properties defined here will be added to the IServer.getProperties() collection -->
        <Properties>
        </Properties>
    </Server>
</Root>

…/conf/StartupStreams.xml file:

<Root>
    <StartupStreams>        
        <StartupStream>
            <Application>live/_definst_</Application>
            <MediaCasterType>rtp</MediaCasterType>
            <StreamName>mpegts.stream</StreamName>
        </StartupStream>
        
    </StartupStreams>
</Root>

…/conf/VHost.xml file:

<Root>
    <VHost>
        <HostPortList>
            <HostPort>
                <ProcessorCount>4</ProcessorCount>
                <IpAddress>*</IpAddress>
                <!-- Separate multiple ports with commas -->
                <!-- 80: HTTP, RTMPT -->
                <!-- 554: RTSP -->
                <Port>1935</Port>
                <HTTPIdent2Response></HTTPIdent2Response>
                <SocketConfiguration>
                    <ReuseAddress>true</ReuseAddress>
                    <!-- suggested settings for video on demand applications -->
                    <ReceiveBufferSize>65000</ReceiveBufferSize>
                    <ReadBufferSize>65000</ReadBufferSize>
                    <SendBufferSize>65000</SendBufferSize>
                    <!-- suggest settings for low latency chat and video recording applications
                    <ReceiveBufferSize>32000</ReceiveBufferSize>
                    <ReadBufferSize>32000</ReadBufferSize>
                    <SendBufferSize>32000</SendBufferSize>
                    -->
                    <KeepAlive>true</KeepAlive>
                    <!-- <TrafficClass>0</TrafficClass> -->
                    <!-- <OobInline>false</OobInline> -->
                    <!-- <SoLingerTime>-1</SoLingerTime> -->
                    <!-- <TcpNoDelay>false</TcpNoDelay> -->
                    <AcceptorBackLog>100</AcceptorBackLog>
                </SocketConfiguration>
                <HTTPStreamerAdapterIDs>cupertinostreaming,smoothstreaming,sanjosestreaming,dvrchunkstreaming,mpegdashstreaming</HTTPStreamerAdapterIDs>
                <HTTPProviders>
                    <HTTPProvider>
                        <BaseClass>com.wowza.wms.http.HTTPCrossdomain</BaseClass>
                        <RequestFilters>*crossdomain.xml</RequestFilters>
                        <AuthenticationMethod>none</AuthenticationMethod>
                    </HTTPProvider>
                    <HTTPProvider>
                        <BaseClass>com.wowza.wms.http.HTTPClientAccessPolicy</BaseClass>
                        <RequestFilters>*clientaccesspolicy.xml</RequestFilters>
                        <AuthenticationMethod>none</AuthenticationMethod>
                    </HTTPProvider>
                    <HTTPProvider>
                        <BaseClass>com.wowza.wms.http.HTTPProviderMediaList</BaseClass>
                        <RequestFilters>*jwplayer.rss|*jwplayer.smil|*medialist.smil|*manifest-rtmp.f4m</RequestFilters>
                        <AuthenticationMethod>none</AuthenticationMethod>
                    </HTTPProvider>
                    <HTTPProvider>
                        <BaseClass>com.wowza.wms.http.HTTPServerVersion</BaseClass>
                        <RequestFilters>*</RequestFilters>
                        <AuthenticationMethod>none</AuthenticationMethod>
                    </HTTPProvider>
                </HTTPProviders>
            </HostPort>
            
            <!-- 443 with SSL -->
            <!--
            <HostPort>
                <ProcessorCount>4</ProcessorCount>
                <IpAddress>*</IpAddress>
                <Port>443</Port>
                <HTTPIdent2Response></HTTPIdent2Response>
                <SSLConfig>
                    <KeyStorePath>${com.wowza.wms.context.VHostConfigHome}/conf/keystore.jks</KeyStorePath>
                    <KeyStorePassword>[password]</KeyStorePassword>
                    <KeyStoreType>JKS</KeyStoreType>
                    <SSLProtocol>TLS</SSLProtocol>
                    <Algorithm>SunX509</Algorithm>
                    <CipherSuites></CipherSuites>
                    <Protocols></Protocols>
                </SSLConfig>
                <SocketConfiguration>
                    <ReuseAddress>true</ReuseAddress>
                    <ReceiveBufferSize>65000</ReceiveBufferSize>
                    <ReadBufferSize>65000</ReadBufferSize>
                    <SendBufferSize>65000</SendBufferSize>
                    <KeepAlive>true</KeepAlive>
                    <AcceptorBackLog>100</AcceptorBackLog>
                </SocketConfiguration>
                <HTTPStreamerAdapterIDs>cupertinostreaming,smoothstreaming,sanjosestreaming,dvrchunkstreaming,mpegdashstreaming</HTTPStreamerAdapterIDs>
                <HTTPProviders>
                    <HTTPProvider>
                        <BaseClass>com.wowza.wms.http.HTTPCrossdomain</BaseClass>
                        <RequestFilters>*crossdomain.xml</RequestFilters>
                        <AuthenticationMethod>none</AuthenticationMethod>
                    </HTTPProvider>
                    <HTTPProvider>
                        <BaseClass>com.wowza.wms.http.HTTPClientAccessPolicy</BaseClass>
                        <RequestFilters>*clientaccesspolicy.xml</RequestFilters>
                        <AuthenticationMethod>none</AuthenticationMethod>
                    </HTTPProvider>
                    <HTTPProvider>
                        <BaseClass>com.wowza.wms.http.HTTPProviderMediaList</BaseClass>
                        <RequestFilters>*jwplayer.rss|*jwplayer.smil|*medialist.smil|*manifest-rtmp.f4m</RequestFilters>
                        <AuthenticationMethod>none</AuthenticationMethod>
                    </HTTPProvider>
                    <HTTPProvider>
                        <BaseClass>com.wowza.wms.http.HTTPServerVersion</BaseClass>
                        <RequestFilters>*</RequestFilters>
                        <AuthenticationMethod>none</AuthenticationMethod>
                    </HTTPProvider>
                </HTTPProviders>
            </HostPort>
            -->
            
            <!-- Admin HostPort -->
            <HostPort>
                <ProcessorCount>1</ProcessorCount>
                <IpAddress>*</IpAddress>
                <Port>8086</Port>
                <HTTPIdent2Response></HTTPIdent2Response>
                <SocketConfiguration>
                    <ReuseAddress>true</ReuseAddress>
                    <ReceiveBufferSize>16000</ReceiveBufferSize>
                    <ReadBufferSize>16000</ReadBufferSize>
                    <SendBufferSize>16000</SendBufferSize>
                    <KeepAlive>true</KeepAlive>
                    <AcceptorBackLog>100</AcceptorBackLog>
                </SocketConfiguration>
                <HTTPStreamerAdapterIDs></HTTPStreamerAdapterIDs>
                <HTTPProviders>
                    <HTTPProvider>
                        <BaseClass>com.wowza.wms.http.streammanager.HTTPStreamManager</BaseClass>
                        <RequestFilters>streammanager*</RequestFilters>
                        <AuthenticationMethod>admin-digest</AuthenticationMethod>
                    </HTTPProvider>
                    <HTTPProvider>
                        <BaseClass>com.wowza.wms.http.HTTPServerInfoXML</BaseClass>
                        <RequestFilters>serverinfo*</RequestFilters>
                        <AuthenticationMethod>admin-digest</AuthenticationMethod>
                    </HTTPProvider>
                    <HTTPProvider>
                        <BaseClass>com.wowza.wms.http.HTTPConnectionInfo</BaseClass>
                        <RequestFilters>connectioninfo*</RequestFilters>
                        <AuthenticationMethod>admin-digest</AuthenticationMethod>
                    </HTTPProvider>
                    <HTTPProvider>
                        <BaseClass>com.wowza.wms.http.HTTPConnectionCountsXML</BaseClass>
                        <RequestFilters>connectioncounts*</RequestFilters>
                        <AuthenticationMethod>admin-digest</AuthenticationMethod>
                    </HTTPProvider>
                    <HTTPProvider>
                        <BaseClass>com.wowza.wms.transcoder.httpprovider.HTTPTranscoderThumbnail</BaseClass>
                        <RequestFilters>transcoderthumbnail*</RequestFilters>
                        <AuthenticationMethod>admin-digest</AuthenticationMethod>
                    </HTTPProvider>
                    <HTTPProvider>
                        <BaseClass>com.wowza.wms.http.HTTPProviderMediaList</BaseClass>
                        <RequestFilters>medialist*</RequestFilters>
                        <AuthenticationMethod>admin-digest</AuthenticationMethod>
                    </HTTPProvider>
                    <HTTPProvider>
                        <BaseClass>com.wowza.wms.livestreamrecord.http.HTTPLiveStreamRecord</BaseClass>
                        <RequestFilters>livestreamrecord*</RequestFilters>
                        <AuthenticationMethod>admin-digest</AuthenticationMethod>
                    </HTTPProvider>
                    <HTTPProvider>
                        <BaseClass>com.wowza.wms.http.HTTPServerVersion</BaseClass>
                        <RequestFilters>*</RequestFilters>
                        <AuthenticationMethod>none</AuthenticationMethod>
                    </HTTPProvider>
                </HTTPProviders>
            </HostPort>
        
        </HostPortList>
        
        <HTTPStreamerAdapters>
            <HTTPStreamerAdapter>
                <ID>smoothstreaming</ID>
                <Name>smoothstreaming</Name>
                <Properties>
                </Properties>
            </HTTPStreamerAdapter>
            <HTTPStreamerAdapter>
                <ID>cupertinostreaming</ID>
                <Name>cupertinostreaming</Name>
                <Properties>
                </Properties>
            </HTTPStreamerAdapter>
            <HTTPStreamerAdapter>
                <ID>sanjosestreaming</ID>
                <Name>sanjosestreaming</Name>
                <Properties>
                </Properties>
            </HTTPStreamerAdapter>
            <HTTPStreamerAdapter>
                <ID>dvrchunkstreaming</ID>
                <Name>dvrchunkstreaming</Name>
                <Properties>
                </Properties>
            </HTTPStreamerAdapter>
            <HTTPStreamerAdapter>
                <ID>mpegdashstreaming</ID>
                <Name>mpegdashstreaming</Name>
                <Properties>
                </Properties>
            </HTTPStreamerAdapter>
        </HTTPStreamerAdapters>
        <HandlerThreadPool>
            <PoolSize>120</PoolSize>
        </HandlerThreadPool>
        <TransportThreadPool>
            <PoolSize>80</PoolSize>
        </TransportThreadPool>
        <IdleWorkers>
            <WorkerCount>4</WorkerCount>
            <CheckFrequency>50</CheckFrequency>
            <MinimumWaitTime>5</MinimumWaitTime>
        </IdleWorkers>
        <NetConnections>
            <ProcessorCount>4</ProcessorCount>
            <IdleFrequency>250</IdleFrequency>
            <SocketConfiguration>
                <ReuseAddress>true</ReuseAddress>
                <ReceiveBufferSize>65000</ReceiveBufferSize>
                <ReadBufferSize>65000</ReadBufferSize>
                <SendBufferSize>65000</SendBufferSize>
                <KeepAlive>true</KeepAlive>
                <!-- <TrafficClass>0</TrafficClass> -->
                <!-- <OobInline>false</OobInline> -->
                <!-- <SoLingerTime>-1</SoLingerTime> -->
                <!-- <TcpNoDelay>false</TcpNoDelay> -->
                <AcceptorBackLog>100</AcceptorBackLog>
            </SocketConfiguration>
        </NetConnections>
        <HTTPTunnel>
            <KeepAliveTimeout>2000</KeepAliveTimeout>
        </HTTPTunnel>
        <Client>
            <ClientTimeout>90000</ClientTimeout>
            <IdleFrequency>250</IdleFrequency>
        </Client>
        <!-- RTP/Authentication/Methods defined in Authentication.xml. Default setup includes; none, basic, digest -->
        <RTP>
            <IdleFrequency>75</IdleFrequency>
            <DatagramConfiguration>
                <Incoming>
                    <ReuseAddress>true</ReuseAddress>
                    <ReceiveBufferSize>1024000</ReceiveBufferSize>
                    <SendBufferSize>65000</SendBufferSize>
                    <MulticastBindToAddress>true</MulticastBindToAddress>                    
                    <MulticastInterfaceAddress>xx.xx.xx.x</MulticastInterfaceAddress>                    
                    <TrafficClass>0</TrafficClass>
                    <MulticastTimeout>50</MulticastTimeout>
                    <DatagramMaximumPacketSize>4096</DatagramMaximumPacketSize>
                </Incoming>
                <Outgoing>
                    <ReuseAddress>true</ReuseAddress>
                    <ReceiveBufferSize>65000</ReceiveBufferSize>
                    <SendBufferSize>65000</SendBufferSize>
                    <!-- <MulticastBindToAddress>true</MulticastBindToAddress> -->
                    <!-- <MulticastInterfaceAddress>192.168.1.22</MulticastInterfaceAddress> -->
                    <!-- <TrafficClass>0</TrafficClass> -->
                    <MulticastTimeout>50</MulticastTimeout>
                    <DatagramMaximumPacketSize>4096</DatagramMaximumPacketSize>
                </Outgoing>
            </DatagramConfiguration>
            <UnicastIncoming>
                <ProcessorCount>4</ProcessorCount>
            </UnicastIncoming>
            <UnicastOutgoing>
                <ProcessorCount>8</ProcessorCount>
            </UnicastOutgoing>
            <MulticastIncoming>
                <ProcessorCount>4</ProcessorCount>
            </MulticastIncoming>
            <MulticastOutgoing>
                <ProcessorCount>4</ProcessorCount>
            </MulticastOutgoing>
        </RTP>
        <Application>
            <ApplicationTimeout>60000</ApplicationTimeout>
            <PingTimeout>12000</PingTimeout>
            <UnidentifiedSessionTimeout>30000</UnidentifiedSessionTimeout>
            <ValidationFrequency>20000</ValidationFrequency>
            <MaximumPendingWriteBytes>0</MaximumPendingWriteBytes>
            <MaximumSetBufferTime>60000</MaximumSetBufferTime>
        </Application>
        <StartStartupStreams>true</StartStartupStreams>
        <!-- Properties defined here will be added to the IVHost.getProperties() collection -->
        <Properties>
        </Properties>
    </VHost>
</Root>

Hi,

Is there an actual problem with the streaming or is it just the checksum errors that you are concerned about?

TCP checksum errors can be caused by a number of things and they are normally network related.

  • TCP Offload is enabled on your nic cards. This is the most likely as it improves performance. with offload enabled, tcpdump looks at the packets before the checksum calculations have been performed so you will see errors in tcpdump but not in the actual network traffic. You can confirm this by temporarily disabling TCP Offload.

  • One of the routers or switches in the network is faulty and is causing the checksum errors.

    Wowza passes the packets that are to be sent to the player to the network layer as complete packets. The tcp layer will be splitting thes into mtu sized chunks for sending across the network. If there are checksum errors it is because of something that the tcp layer is doing wrong and not something that the Wowza server is doing wrong.

    Please see the following link for more info.

    http://sokratisg.net/2012/04/01/udp-tcp-checksum-errors-from-tcpdump-nic-hardware-offloading/

    Roger.

Roger,

I am part of the rainier connect group. The issue is primarily with the stream not working, but we were concerned with the checksum errors we were seeing in tcpdump. Thanks for the info on TCP Offload and tcpdump. We will try this.

In working with support via email Andrew (@wowza) was able to use our captures and configuration files to stream correctly using his a lab/test server. Looks like an OS or OS configuration issue. He sent logs back show that the wowza server had subscribed sucessfully to the multicast stream and what that looked like.

(Andrew’s test system @ wowza using our own capture)

INFO server comment - RTPMediaCaster.Reconnector[1939350017:live/definst:mpegts.stream]: start: 4

INFO server comment - RTPMulticastListener.run(stop)

INFO server comment - RTPSessionDescriptionDataProviderBasic.getStreamInfo[live/definst]: URI: udp://224.112.112.3:6000

INFO stream create - -

INFO server comment - RTPDePacketizerMPEGTS.init: audioIsAligned: true

INFO server comment - RTPDePacketizerMPEGTS.init: Drop incomplete video frames

INFO server comment - RTPDePacketizerMPEGTS.init: Log incomplete video frames

INFO server comment - MulticastTransport.bind[live/definst]: 224.112.112.3/6000

INFO stream publish mpegts.stream -

INFO server comment - RTPMediaCaster.Reconnector[1939350017:live/definst:mpegts.stream]: done: 4

INFO server comment - MulticastTransport.firstPacket: 224.112.112.3/6000

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]: Received PAT

INFO server comment - [live/definst/mpegts.stream]: PAT Version 0

INFO server comment - [live/definst/mpegts.stream]: Program: 1 PMT PID: 0x30

INFO server comment - [live/definst/mpegts.stream]: MPEG2PMTAssembler:MonitorStart: PID: 48 Program Number: 1

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

INFO server comment - [live/definst/mpegts.stream]: Received new PMT

INFO server comment - [live/definst/mpegts.stream]: PMT: Version 22 PCR pid: 0x31

INFO server comment - [live/definst/mpegts.stream]: Stream: Type: 0x02 PID: 0x31 Video

INFO server comment - [live/definst/mpegts.stream]: Stream: Type: 0x81 PID: 0x34 Audio

INFO server comment - [live/definst/mpegts.stream]: RTPDePacketizerMPEGTS.pmtAvailable: IMPORT: videoPID[prg:0x1,pid:0x31,filter:0x31]: streamType:MPEG2:2

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

INFO server comment - [live/definst/mpegts.stream]: Skipping Audio PID: 52 because of language filter: eng

So on our server :

  1. Wowza requests subscription to the correct multicast stream.

  2. Tcpdump shows that the stream is being delivered to the correct interface.

  3. Wowza does not seem to be receiving the stream.

Answer OS level issue.

Luckily this resonated with another technician here to look for reverse path forwarding checks within Linux, and we found that this is a feature enable by default. Now… had we set a route to the multicast address we were subscribing to this would not have occurred. However, we were adamant that we should not have to do this given the server is directly connected to the multicast network. Also things would get messy should we have to receive multicast streams on multiple interfaces.

Below are notes from the tech that found this…

Linux does a reverse path forwarding check on all incoming packets by default. (http://stackoverflow.com/questions/5483779/receiving-multicast-on-a-server-with-multiple-interfaces-linux)

echo 0 > /proc/sys/net/ipv4/conf/(interface)/rp_filter (turns reverse path filtering off for this interface.)

With this at 1, the default, it looks at each packet coming in, and rejects it at the OS level if it does not have a route to it. now wowza looks like it’s decoding the PAT and PMT table, at least…