How to know when a playing video stream has anything to show?
How can I tell after issuing a NetStream::play call when there is any video arrived which I can render (Video::attachNetStream)? I can see that most of that stuff is asynchronous and highly dependent on a number of variables like FMS latency, client latency and bandwidth, server load, weather etc. I however need a reliable dependent way of figuring when there is any picture to show. I administrate our service and need to monitor content people are publishing, for that I need to browse a hundre or so streams as fast as possible. What I do is I have a number of "player" streams that play a stream name (I use Administration API to get an array of these) , wait until there is picture, show it in a video object, disconnect video from stream, create new video object, play another stream, wait until picture, show it, and so on.
I found out that I can achieve a way to check whether video has arrived by NetStream::info.videoBufferByteLength, alternatively perhaps 'videoByteCount'. I cannot create a new stream for new video object, that is too much overhead, so I reuse streams. I close a stream, play new stream name, and wait until the either of the properties above is non zero. This has been working quite alright, but still occasionally I get stale data in the subsequent video objects, even when a stream is supposed to be playing new content. I need to avoid these.
So my question boils down to the already mentioned: what would be a reliable way to do what I am doing? It's just a stream of compressed data, there must be a way for Flash Player to know what is new data and what is stale data. In fact I don't think there is supposed to be stale data in a NetStream that is already playing something else!
I know this is hardcore stuff, but we are pushing it 🙂
