用于H264音频/视频流的RTSP客户端

时间:2014-08-06 23:32:21

标签: c# camera ffmpeg emgucv

我正在寻找一种简单的方法来获取IP Camera RTSP流的数据(使用H264音频/视频)并从另一侧获取

  • 逐帧字节[]
  • 音频流

经过多次研究

  • EmguCV Capture似乎永远悬而未决(论坛没有答案)
  • 有很多(太大)RTSP Server很少解码H264
  • 有“慢”ffmpeg包装器
  • 有一些托管的DirectShow包装器

所以我不知道去哪儿了?怎么做?

似乎iSpyCamera正在完成这项工作,但这是一个很大的项目,而不是一个查询ip camera的小库。

3 个答案:

答案 0 :(得分:0)

似乎Emgu CV 3.0.0运行良好(参见Emgu Sample)

如果我添加"我仍然坚持使用我的IP相机与VLC一起工作:网络缓存= 1000"我不知道如何用Emgu CV设置它

答案 1 :(得分:0)

如果rtsp挂起,你会看到设置一个rtsp服务器以保持连接,因为在收到服务器和客户端的响应后,连接将自动关闭。

答案 2 :(得分:0)

以前我使用本指南来实现RTSP streaming。这个控制台应用程序是在camera library的帮助下用C#编写的。这里是相应的代码(连接到相机并流式传输其图像):

public class MyServer : IPCameraServer
    {
        private MediaConnector _connector;
        private IIPCamera _camera;
        private IIPCameraClient _client;

        public string IpAddress { get; set; }
        public int Port { get; set; }

        public event EventHandler ClientCountChange;

        public MyServer()
        {
            _connector = new MediaConnector();
            _camera = IPCameraFactory.GetCamera("192.168.115.98:8080", "admin", "admin");

            if (_camera != null)
                _camera.Start();
        }

        protected override void OnClientConnected(IIPCameraClient client)
        {
            _client = client;
            _connector.Connect(_camera.AudioChannel, _client.AudioChannel);
            _connector.Connect(_camera.VideoChannel, _client.VideoChannel);

            var handler = ClientCountChange;
            if (handler != null)
                handler(null, new EventArgs());

            base.OnClientConnected(_client);
        }

        protected override void OnClientDisconnected(IIPCameraClient client)
        {
            _connector.Disconnect(_camera.AudioChannel, _client.AudioChannel);
            _connector.Disconnect(_camera.VideoChannel, _client.VideoChannel);
            _connector.Dispose();

            var handler = ClientCountChange;
            if (handler != null)
                handler(null, new EventArgs());

            base.OnClientDisconnected(client);
        }
    }

    class Program
    {
        static MyServer _server = new MyServer();

        static void Main(string[] args)
        {
            _server.Start();
            _server.SetListenAddress("192.168.115.10", 554);
            _server.ClientCountChange += new EventHandler(server_ClientCountChange);
            Console.WriteLine("Started");
            Console.Read();
        }

        static void server_ClientCountChange(object sender, EventArgs e)
        {
            _server.ConnectedClients.ForEach(x => Console.WriteLine(x.TransportInfo.RemoteEndPoint.ToString()));
        }
    }
相关问题