In past versions of FMS, developers were barred from accessing raw audio and video data over RTMP and had to resort to a number of hacks and proxies to get around the restriction. As time went by and new versions of the Flash Player were released, a lot of these loopholes were blocked as well.
With FMS3, there is Client.videoSampleAccess: a property of the Flash Media Server 3 that allows direct access to raw stream data for video use (“audioSampleAccess” for audio). This can be used for things like producing visual audio spectrums or grabbing a still from a video stream. It is applied within the onConnect method of the Application server class as demonstrated here:
1
2
| appClient.audioSampleAccess = "/";
appClient.videoSampleAccess = "/"; |
In the above example, the “/” signifies that any streams within the application directory are allowed to be sampled in this way. You can also specify a semicolon-delimited list of folder names instead if you need to be picky.
Something I came across today and the whole point of this post: even when you have Client.videoSampleAccess set up properly on Flash Media Server, you will still receive a security sandbox violation error #2123 if the stream data is not available. This can easily happen if you have a timer invoking BitmapData.draw every few milliseconds on loading content.
One way to get around this is using NetStatusEvent.NET_STATUS making sure it reports “NetStream.Buffer.Full” before attempting to access the stream data. Depending on what you are doing, you can oftentimes check the object recieving the stream data to be sure it is accessible first. this all seems really obvious now, but threw me for a bit of a loop, initially.