首先在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发生那么数据捕获就会停止,我暂时还没有找到方法来解决这个问题,希望有高人能指点下!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架