I've modified the DynamicStream class to support a playlist. Before this goes into a production environment, will there be any updated releases of these classes from Adobe that support a playlist?
Stream switching is often delayed until the next clip starts playing, so I get a transition to the previous clip in the middle of the next clip. Is that where "oldStreamName" comes in handy? Will it prevent the transition if the clip we're transitioning from has changed since the SWITCH request was made?
Also, the call to "setBandwidthLimit" was absolutely killing our streams. The buffer would quickly empty out as soon as the stream started playing again.
I removed the "setBandwidthLimit" call, but now it takes forever to actually switch up from a low to a high quality stream. Is there a way to achieve faster switching speeds without utilizing this bandwidth limit?
(details: VOD, not live streams. Using an FMS server, serving a mix of H.264 [600 & 1000 kbps] and FLVs of varying bitrates)
The delay to render the switched stream after transition-Switch could be because of various factors. Mainly we depends on the bufferTime set at the client side and the bandwidth you are in. For example, if your bufferTime is set to 10 seconds, and you are at good bandwidth, anytime during the stream play you will have ~10 seconds of data already filled at the client side. With this if you issue a switch, the server will start sending the switched stream immediately. The server fills the data of switched stream after the ~10 seconds of data in ur buffer. So you will have to play the existing ~10sec of previous stream that was buffered already at you client side and then it starts with the switched stream. So this delay in viewing the switched stream depends on your bufferTime value set in the client application.
Once your stream switched to 2nd clip, no way you can get the 1st clip in the middle while playing 2nd. Or i got your wrong. Could you pls be elaborate on this? If this is what you are seeing, are you sure your stream switched to 2nd one and you have not issued any other switch after that. If you are doing right, pls give me more details about the media that you using with the setup information.
oldStreamName property helps you to switch to a newer stream from WHICH stream. If the stream mentioned in oldStreamName was already played in the playlist, then your switch will fail. Also if you are playing the stream which oldStreamName mentions, then the switch should be successful to the newer stream that you have mentioned.
To get faster switching, you should have less value set in your bufferTime at the client side.
Ah I see, I'll have to experiment with the bufferTime.
The problem with the switch occuring during the next video is as such:
* VIDEO1(hi:1000, lo:600), // 2 x H.264 streams
* VIDEO2(rate:undetermined), // 1 x FLV stream
* VIDEO3(hi:1000, lo:600) // 2 x H.264 streams
At the beginning of video1, we throttle the bandwidth with an external program. 40% of the way through Video1, we disable the throttle program, which causes a LO-to-HI switch. The switch does not yet occur visibly. Video2 starts playing. About halfway through Video2, we see the HI stream of Video1 start playing.
Is this where "oldStreamName" would help kill any pending switch requests for previous videos? Video1 is no longer the current video, so I don't want to see the Video1 HI stream anymore, it's a little late for that.
Initially, we issue a NetStream.play2() on the Video1 HI with "reset" set to true, and to the next 3 videos with "reset" set to false. When the stream switching is called, of course we are calling play2() with a SWITCH option, but as I've described the problem is that the switch is occuring during the NEXT video!
When you started playing NetStreamPlayOptions will be
param.oldStreamName - null
param.streamName - video1_lo
param.transition - reset
Then I think video1 has played its content and you got NetStream.Play.Complete for video1 so video2 starts playing but since switch was already issued to server with NetStreamPlayOptions
param.oldStreamName - video1_lo
param.streamName - video1_hi
param.transition - switch
So If the server receives a "switch" on an item in the playlist but the item is not currently playing, the "switch" will be converted to a "swap". So for you I think video1_lo was actually not getting played instead video2 was getting played when switch was happening so it got converted to swap and video2 was swapped with video1_hi.
This is an interesting thread.
Like Amit had mentioned, if your 'oldStreamName' is set to null or undefined or stream not found in playlist, it will switch to the 'streamName' mentioned. In your scenario, i believe the trick is with bufferTime and oldStreamName set.
Let us take a simple example, that all the 3 streams in your playlist is of 20 seconds in length. and your bufferTime is set to 10 seconds. Though your bufferTime is set to 10, you can have more than 10 secs of data in the player... let us take ~20 seconds of data. Now you have started playing the streamL1 and when you are playing 15th second of streamL1 you issue a switch command with oldStreamName set to null/undefined and streamName set to streamH1. You would expect to play the switched streamH1. But if you see the data in the client buffer, when you are playing the 15th second of streamL1, you might have the server already sent the data of stream2. So at that point of time, the first 5 seconds of data might be of streamL1 and the remaining ~15 seconds of data might be of stream2. Since it is a playlist, once the player reaches the end of file of streamL1, it will send a request to start filling data for stream2. So the player will assume that the client is playing Stream2, though you are still playing streamL1 and have stream2 stored in your buffer. In this case, as per FMS, you are switching from stream2 to streamH1. Hence you see streamH1 playing in the order of streamL1->stream2->streamH1... This case can apply for you if you have not set oldStreamName to right stream name like 'streamL1'.
To confirm this in your case, open access.log file and look for play-stop events logged init. In the above case what i have mentioned you should have the access log like...
If you see the above order in access log, then what happening is by design. You have to modify your bufferTime and check when you issue a switch your client has not buffered the second stream. Also set oldStreamName to right value.
Dear Sir/Madam Adobe Membership!
I work in Vietnam Data Communication Company – Center II in Vietnam country. With reference to your advertisement/introduction of you in your website (http://www.adobe.com/ ), I am writing to you to request some things bellows:
My company would like build video streaming application on Website (and mobile in future), maybe something likes http://youtube.com . It is streaming: films, video clips with the different sizes which are stored in folder of server with high quality, powerful, secure, extendable, high-performance, highly scalable, and custom video solutions. After I went through the Flash Media Interactive Server 3.5 of Adobe I see that it seem usefully with the streaming video application of my company. So that, before my company purchases the Flash Media Interactive 3.5 software we would like use trial the Flash Media Interactive Server 3.5 software with full features, unlimited the end users, and full functions in few months. And we hope you provide full Flash Media Interactive 3.5 software and guide clearly, more details and more focus for “how to use the Flash Media Interactive Server 3.5 for matching with our application” during use trial. If we see this software which displays well the streaming video application and it matches with our application so that we will purchase this software immediately.
Addition, did we have the encoder (video, film) software when we purchase full Flash Media Interactive Server 3.5? Because, I know that adobe media encoder CS4 supports for encoding video/film to FLV/F4V, but it is different software and do not package with Flash Media Interactive Server 3.5 software. And do you have software to encode automatically video/film like flash media live encoder? Because I think that there are some troubles to use adobe media encoder CS4 for encoding video/film such as: so slow, non-auto encoding and occupies 100% CPU performance.
Finally, adobe flash player 10 in Flash Media Interactive 3.5 has HD (+,-) feature. But I do not know to use it? Could you tell us more?
Please give me your hotmail for chatting and reply us early!
Thank for your prompt help!
Thao Nguyen Thi,
Online application Center
Vietnam Data Communication Company – Center II (VDC2).
I wonder if anyone from this thread can help me with my problem. It looks like from this thread dynamic streaming with a playlist is possible, but when an switch is initiated in past the first video it fails and the stream just ends prematurely, even with the correct oldStreamName. Please see http://forums.adobe.com/thread/901045?tstart=0