有关silverlight4摄像头的数据捕获问题

首先在silverlight中式可以捕获摄像头的视频流的,我们可以自己建立一个类,然后继承自VideoSink类,VideoSink类是一个抽象类(位于System.Windows.Media命名空间下s),需要我们实现其中的4个方法
    public abstract class VideoSink
    {
        public VideoSink();
        public CaptureSource CaptureSource { get; set; }
        protected abstract void OnCaptureStarted();
        protected abstract void OnCaptureStopped();
        protected abstract void OnFormatChange(VideoFormat videoFormat);

    //sampleData就是每100纳秒捕获的数据
            //这里可以将捕获的数据流存入适当的载体里面
            //或者将数据流进行编码或压缩
        protected abstract void OnSample(long sampleTimeInHundredNanoseconds, long frameDurationInHundredNanoseconds, byte[] sampleData);
    }

然后将我们的CaptureSource赋给VideoSink中的CaptureSource ,这样VideoSink就会自动捕获摄像头中的数据了。

虽然可以捕获数据,事实上我确实捕获到了数据,但问题在于捕获的数据实在是太大了,我测试了下,每100纳秒捕获的数据能有1.2MB多,这么庞大的数据如果不经过处理可以想象下我们录几分钟的录像要产生多么庞大的数据啊!我也不会视频编码,而微软也没有在Silverlight中提供专门的编码工具,所以摄像头功能在目前来说也就是个好看不好用的东西!

其实这其中还有一个问题,就是这个VideoSink捕获数据的时候很不稳定,经常导致OnFormatChange发生,而一旦OnFormatChange发生那么数据捕获就会停止,我暂时还没有找到方法来解决这个问题,希望有高人能指点下!

原文地址:https://www.cnblogs.com/dagehaoshuang/p/1719306.html