Wowza Community

Re-streaming H.264 video from a Siqura FD820 IP camera

Hi all,

I’m new to Wowza and am trying to test it against a Siqura FD820 IP H.264 camera. I’d like to to Wowza to be able to re-stream several of these cameras that we’ve installed on the Internet via a Verizon cellular network connection. I can view the camera using VLC using RTSP (over TCP). I didn’t have any issues installing and getting Wowza running however I’m currently not having any luck re-streaming just one camera. To start I followed the instructions from this site: https://www.wowza.com/docs/how-to-re-stream-video-from-an-ip-camera-rtsp-rtp-re-streaming. My two issues are this:

I added the camera to the /content/camera.stream file (RTSP) and started it via the stream manager. In the Wowza logs I can see that it connects to the camera using RTSP and verified via Wireshark that RTP (TCP interleaved) data from the camera is flowing to my IP address. So based on that it does appear to have acquired the video stream. However I then see in the logs the following:

2013-05-18	21:17:04	CDT	comment	server	INFO	200	-	firstPacket: TCP:$3	-	-	-	3287.117	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
2013-05-18	21:17:05	CDT	comment	server	INFO	200	-	firstPacket: TCP:$5	-	-	-	3287.375	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
2013-05-18	21:17:13	CDT	comment	server	INFO	200	-	RTPMediaCaster.streamTimeout[15624918:live/_definst_:camera.stream]: timeout:12000 diff:12002 reason:101	-	-	-	3295.476	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
2013-05-18	21:17:13	CDT	comment	server	INFO	200	-	RTPMediaCaster.resetConnection[15624918:live/_definst_:camera.stream]: 	-	-	-	3295.476	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
2013-05-18	21:17:13	CDT	comment	server	INFO	200	-	RTPMediaCaster.closeRTPSession[15624918:live/_definst_:camera.stream]	-	-	-	3295.477	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-
2013-05-18	21:17:13	CDT	comment	server	DEBUG	200	-	*** RTSPMessageSend ***
TEARDOWN rtsp://X.X.X.X/VideoInput/1/h264/1 RTSP/1.0
Session: 647
CSeq: 7
	-	-	-	3295.477	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-	-

followed by RTSP TEARDOWN and then it reconnects and then just keeps doing this over and over. Have I configured something wrong?

I then tried to connect to Wowza using VLC to view the re-streamed camera on this URL: rtsp://127.0.0.1:1935/live/camera.stream. However, the RTSP response that I get back is the following:

Sending request: OPTIONS rtsp://127.0.0.1:1935/live/camera.stream RTSP/1.0
CSeq: 3
User-Agent: VLC media player (LIVE555 Streaming Media v2007.02.20)
Received OPTIONS response: RTSP/1.0 200 OK
Supported: play.basic, con.persistent
Cseq: 3
Server: Wowza Media Server 3.5.2 build3747
Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS, ANNOUNCE, RECORD, GET_
ARAMETER
Cache-Control: no-cache
Sending request: DESCRIBE rtsp://127.0.0.1:1935/live/camera.stream RTSP/1.0
CSeq: 4
Accept: application/sdp
User-Agent: VLC media player (LIVE555 Streaming Media v2007.02.20)
Received DESCRIBE response: RTSP/1.0 200 OK
Content-Base: rtsp://127.0.0.1:1935/live/camera.stream/
Date: Sat, 18 May 2013 20:23:48 CDT
Content-Length: 136
Session: 812996423;timeout=60
Expires: Sat, 18 May 2013 20:23:48 CDT
Cseq: 4
Content-Type: application/sdp
Server: Wowza Media Server 3.5.2 build3747
Cache-Control: no-cache
Need to read 136 extra bytes
Read 136 extra bytes: v=0
o=- 812996423 812996423 IN IP4 127.0.0.1
s=camera.stream
c=IN IP4 0.0.0.0
t=0 0
a=sdplang:en
a=range:npt=0- 0.0
a=control:*
[00000318] live555 demuxer error: Nothing to play for rtsp://127.0.0.1:1935/liv/camera.stream
[00000317] main input error: no suitable access module for `rtsp://127.0.0.1:195/live/camera.stream'
[00000294] main playlist: nothing to play

Yes, this is using a very old version of VLC (0.8.6d) but it’s the same result if I try the latest version (2.0.6). I noticed the Wowza logs the following when VLC tried to connect:

MediaReaderH264.open[2]: java.lang.Exception: QTUtils.parseQTMediaContainer: File is missing 'moov' atom.

I can make available a public URL for debugging / testing purposes if that would be helpful.

For your reference here’s the Application.xml file that I’m using:

<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, 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 -->
			<!-- 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>
			<!-- If this is a dvrstreamingrepeater, -->
			<!-- either define the general Application/Repeater/OriginURL below to point back to the origin -->
			<!-- or define this one (which affects only DVR origin-edge).  e.g. http://localhost/dvrorigin -->
			<Repeater>
				<ChunkOriginURL></ChunkOriginURL>
			</Repeater>
			<!-- Properties for DVR -->
			<Properties>
			</Properties>
		</DVR>
		<TimedText>
			<!-- VOD caption providers (separate with commas): vodcaptionproviderttml, vodcaptionprovidermp4_3gpp -->
			<VODTimedTextProviders>vodcaptionprovidermp4_3gpp</VODTimedTextProviders>
			
			<!-- Properties for TimedText -->
			<Properties>
			</Properties>		
		</TimedText>
		
		<!-- HTTPStreamers (separate with commas): cupertinostreaming, smoothstreaming, sanjosestreaming, 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>
				<Property>
					<Name>rtpIgnoreProfileLevelId</Name>
					<Value>true</Value>
					<Type>Boolean</Type>
				</Property>
			</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>
				<Property>
					<Name>debugRTSPSession</Name>
					<Value>true</Value>
					<Type>Boolean</Type>
				</Property>
				<Property>
					<Name>rtspValidationFrequency</Name>
					<Value>0</Value>
					<Type>Integer</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>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>
		</Modules>
		<!-- Properties defined here will be added to the IApplication.getProperties() and IApplicationInstance.getProperties() collections -->
		<Properties>
		</Properties>
	</Application>
</Root>

I did add some additional properties to the Application.xml because I was seeing this originally in the logs:

WARN	server	comment	2013-05-18	21:15:52	2035804933	127.0.0.1	-	0	0	3214.411	-	-	-	-	-	-	-	-	MediaReaderFLV.open: Metadata appears to be bad: 
WARN	server	comment	2013-05-18	21:15:52	2035804933	127.0.0.1	-	0	0	3214.413	-	-	-	-	-	-	-	-	Failed to find an appropriate depacketizer for this track (vnd.onvif.metadata)
WARN	server	comment	2013-05-18	21:15:52	2035804933	127.0.0.1	-	0	0	3214.413	-	-	-	-	-	-	-	-	Failed to find an appropriate depacketizer for this track (H264)
WARN	server	comment	2013-05-18	21:15:52	2035804933	127.0.0.1	-	0	0	3214.414	-	-	-	-	-	-	-	-	Failed to find an appropriate depacketizer for this track (PCMU)

Thanks,

Dave

Dave,

Try adding the /MediaCaster Property rtspFilterUnknownTracks set to “true”

<Property>
    <Name>rtspFilterUnknownTracks</Name>
    <Value>true</Value>
    <Type>Boolean</Type>
</Property>

Richard

Thanks Richard for your fast response.

Dave,

Try adding the /MediaCaster Property rtspFilterUnknownTracks set to “true”

<Property>
    <Name>rtspFilterUnknownTracks</Name>
    <Value>true</Value>
    <Type>Boolean</Type>
</Property>

Richard

Unfortunately I tried that setting a little while after posting my original question without any change in behavior. Is there anything else that you would suggest I try?

Thanks,

Dave