Wowza Community

How to play a video on demand file

Keyframe timecodes have to be aligned for switching to occur. You will see logger statements indicating switching. If not the keyframe timecodes are probably not aligned. For live streaming you can debug this like this.

Server-side smil does not work with Flash. Read the Adobe articles referenced in the Live and Video on Demand tutorials. You can use the JW Player, and I think Flowplayer now also as a plugin for multi-bitrate dynamic switching. This is the JW Player tutorial:

Width and height can, and in many cases should, be different.


ffmpeg is used to produce. For example:

bin\ffmpeg -i c:\projects\wms200\content\ -y -ss 6 -t 240 -s 560x320 -acodec aac -ab 128k -ac 2 -ar 48000 -vcodec libx264 -vb 450k -vpre slow -vpre ipod640 -threads 64 c:\content\Extremists.mp4

Using the latest ffmpeg from here:

But we do not support ffmpeg, so you are on your own with this.


Well, try your preferred encoder. Make sure to set the keyframe interval (GOP) the same on all versions. If each version has aligned timecodes, it should work.


You might try adding “-g [number]” setting to the ffmpeg command.


Do it like this:



For the first issue, you might be able to fix this by re-building the server-side of the BWCheck example and change the module function checkBandwidth name to _checkbw. Or the vice versa, change _checkbw in the player to checkBandwidth

You will probably also have to reconcile onBWCheck and onBWDone with the client-side code.

On the silverlight issue, not sure. It is switching, so that’s good. But as far as it not doing what you expect, I’m not sure. But you might be making assumptions about your bandwidth that are not actual from the point of view of Wowza server’s connection to you.


I don’t think we will be able to help. Smooth streaming is built-in to Silverlight. If it is not behaving as expected, it’s either a player issue or maybe your network is not as reliable as you think it is. I would try to run tests from other locations to compare.


Great, thanks for the update.


Try reducing the video bitrate, probably significantly


Your 2nd example is correct:


or just:


Take a look at the file with GSpot:


You probably have “cupertinostreamingpacketizer” in Application.xml /Streams /LiveStreamPacketizers. For vod it should be empty, like this:



This all looks right. Are you on cellular connection? Try wifi.


To use any of the examples, copy all the files in the example’s client folder to a web site and open the html page in a browser:


Or, for testing you can copy all the files to your computer and open from a file explorer by double clicking the html file.

This error means that Wowza is already running and you are trying to start it again, or you have another program using port 1935 (FMIS or Red5 perhaps):

WARN vhost comment 2010-08-31 00:00:03 - - - - - 37473.471 - - - - - - - defaultVHost Bind failed, try again ([any]:1935): Address already in use


Your website can have a link to click to open a page that has a player configured to connect to Wowza and play that stream.

In JW player, you use the Flashvars “streamer” to set a rtmp connection to Wowza and “file” is the stream name.

Flashvars = “streamer=rtmp://[wowza-address]:1935/vod&file=flv:test.flv&provider=rtmp”

You can also have a client-side playlist in JW Player and Flowplayer. That is where there is a list of videos next to the player that the user can click. In JW player that is implemented by making the “file” flashvar point to an xml file. See their tutorials for more details on that if you are interested. Flowplayer has a similar feature.


These lines are Wowza logs not validator output, and it is good, not indicating any problem.

You are playing a smil file in the I phone, and this is the video and audio codec for the item that is playing being reported.


Did you add this property to Application.xml HTTPStreamers Properties list?


Is it modified? If so, try removing or setting to default.


One thing, the LiveStreamPacketizer cupertino Properties you have set are not relevant for vod.

If you remove a Property you can remove the Property tags.


Your results are very close at this point actually. Warn lines for some segments is to be expected when using VBR encoding. What counts is the summary at bottom, and this line in particuar:

Average segment bitrate: 444.72 kbit/s (10.06 % of target)

You want to be less than within 10% of the target, and you are just over that.

To improve this more, using the particular sample you are using (bigbuckbunnyiphone_300.mp4), try making the Application.xml /HTTPStreamer ChunkDurationTarget value “9000”. And apply Patch 5, which will improve the accuracy of the bandwidth calculation for the playlist item, against which the bitrate of each segment is compared.

Before applying patch 5, check your Wowza version in a browser:


Then see if you need to apply one or both patches on the devbuild page, starting from the bottom. You apply the oldest patch, then newer patches.

Here is Patch 5, and please see the IMPORTANT note below.

Carefully ready the IMPORTANT!!! notice in the README.txt file of the patch. Several core components have been upgraded:


Several core components have been updraded to newer versions. Before

applying this patch, delete the following files from your Wowza Media Server






Might be Flash doing port/protocol rollover. What happens when you add port 1935?:

Server: rtmp://[wowza-address]:1935/vod

Stream: mp4:sample.mp4


That’s right. Port 1935 is the default port for RTMP, and port 80 is default port for HTTP and RTMPT (tunneling) protocol. To use non-default port, it must be explicit. So these can work:



In Wowza 2 you can bind to multiple ports. These are all nice to have:

<Port>1935, 80, 443, 554</Port>

Whenever you add a port like this, restart Wowza, then check the recent startup lines in the access log to ensure that Wowza was able to bind to the port(s) you added. If not, you will see many error lines because Wowza will keep trying to bind.

It is best practice to use ports explicitly even if it is the default port for that protocol.