【问题标题】:A Dictionary of Queues to manage Streamed Video Frames用于管理流视频帧的队列字典
【发布时间】:2012-02-09 05:49:10
【问题描述】:

我正在开发一个系统,该系统将分析来自多个摄像机的视频帧。每个摄像头都会初始化一个 WCF 会话,并在发送视频帧之前分配一个 GUID 用于识别。随着摄像机数量的增加,处理负载超过了服务器可以实时完成的任务。因此,我正在编写一个类来管理来自运动激活相机的数据。

必须对来自摄像机的每一帧与来自其他摄像机的帧进行并行分析。每个摄像头都会用帧填充队列,以管理数据的 FIFO 特性。

队列管理让我一直在寻找想法。最初我打算创建一个字典并插入每个 GUID-Queue 对。在处理代码一段时间后,我开始认为这不是最好的方法。有人有什么建议吗?

一些简化的示例代码:

namespace DataCollection
{
    [ServiceBehavior(Name = "ClientDataView", InstanceContextMode = InstanceContextMode.Single)]
    public class DataCollectionService : IDataCollectionService
    {
        //Dictionary of Guid-Queue pairs
        CameraCollection CameraArray = new CameraCollection(); 

        public Guid RegisterCamera()
        {
            Guid ID = new Guid();
            WorkQueue FrameQueue = new WorkQueue();
            CameraArray.AddCamera(ID, FrameQueue)
            return ID;
        }

        public bool SendData(Guid ID, FrameReady newFrame)
        {
            Frame dataFrame = newFrame.OpenFrame;                
            WorkQueue que = CameraArray.GetQueueReference(ID);
            que.QueueFrame(dataFrame);
            return true;
        }
    }
}

目前,如果我为一定数量的摄像机对所有内容进行硬编码,则系统可以正常工作。让它与不同数量的相机一起工作更具挑战性。任何建议或建议将不胜感激。

【问题讨论】:

  • 根据您的 parallel 标签,我假设您使用的是 .NET 4?
  • @M.Babcock 是的,我正在.Net 4.0 框架内开发。

标签: c# .net wcf queue parallel-processing


【解决方案1】:

.Net framewok 4 有一个名为 Parallel 的类。这个类有一个扩展方法 Foreach。使用您的集合,您可以执行 Parallel.Foreach(collection,action) 之类的操作,

【讨论】:

  • 在查看了 Parallel 类之后,我想我最终可能会使用它。它以目前的形式工作,但这是一种更简洁的方法,可以将数据处理付诸实践。
猜你喜欢
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
相关资源
最近更新 更多