Hi,
I have been trying to stream a video (H.264) recorded at about 1fps with Wowza. The playback of the video is alway delayed by 30 to 90 seconds. This happens with both on demand playback from a movie file and from an RTP live encoder. I have tried the players provided in the examples with Wowza as well as other players that allow setting the buffering interval. Without buffering, the video doesn’t play at all and with buffering set to 0.1 seconds I still get 40 second delays. The video has key frames at a 5 second interval.
I also tried this with FMS and saw similar problems. If I use an HTTP URL for the same video, the playback is fine.
Is this a known problem with the Flash player? Has anyone else faced similar issues when streaming videos with low frame rates?
Then I guess we currently do not have a workaround for this player limitation.
Charlie
Some details on reproducing the problem:
I created a 1 fps screen capture video with vlc:
vlc screen:// --screen-fps=1 --sout '#transcode{vcodec=h264,vb=1000,scale=0.5}:duplicate{dst=std{access=file,mux=mov,dst=test-1fps.mov}}'
I moved the saved file to the Wowza content folder and used a player in the examples to play it. The video playback started after a delay of about 60 seconds.
Wowza version: Wowza 2 Advanced Preview 6
Flash player version: 10.0.22.87
Yes, it is a known issue. It seems that the Flash player needs many frames (30-60 frames) of data before it can begin H.264 playback. You can try setting the NetStream.setBufferTime to zero in the player. This might help alleviate the problem.
Charlie
What is the use case of 1 frame per second video. If you switch to a different codec it will not be a problem (screen share, VP6, SorensonSpark). It is just H.264 that is a problem. We are considering a workaround for this in Wowza Media Server 2. If you install Wowza Media Server 2 Preview 6 you can try the following with a live stream:
-
Edit conf/Streams.xml and change the maxaudiolatency from 8000 to 30000 (in several places).
-
In your conf/[application]/Application.xml add the following property to the Streams/Properties container (be sure to get the correct Properties container):
<Property>
<Name>instantOnBufferTime</Name>
<Value>10000</Value>
<Type>Integer</Type>
</Property>
This will attempt to send more startup frames. It should quicken the startup time.
Charlie
Binu,
What StreamType are you using for Application.xml /Streams/StreamType ?
Richard
Richard,
The StreamType was default when I tried on demand streaming from the recorded file.
The delay increases as the frame rate of the movie is reduced. 5 fps movies begin after a 7 second delay, 4 fps movies after about 12 seconds, 2 fps movies after 28 seconds and 1 fps movies after 35 seconds.
For live streaming, I used the NativeRTPVideoStreaming sample application in the examples.
Thanks for the confirmation, Charlie.
I tried playback with bufferlength set to 0 in JWPlayer. With on demand playback, the delay is still there while the live stream doesn’t play.
Can the streaming server work around this problem by sending the initial frames faster when a low frame rate video is detected? Of course, this won’t help with live streams.
Low fps H.264 streams are often used by video-conferencing hardware for the presentation channel. We are looking at streaming and recorded playback of these streams without transcoding. This channel doesn’t have an audio track.
I will give your suggested workaround a try.
Thanks,
Binu
Charlie,
I tried the changes you suggested on Wowza 2 preview 6. The startup latency remained the same for on demand and live streams.
The videos I was testing with didn’t have an audio track. I added an audio track while testing live streaming and that didn’t make any difference.