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

本文关键字:视频 音频 H264 客户端 用于 RTSP | 更新日期: 2023-09-27 18:16:47

我正在寻找一种简单的方法来获取IP摄像机RTSP流的数据(使用H264音频/视频)并获得另一边

  • 一帧一帧字节[]
  • 音频流

经过多次研究

  • EmguCV Capture似乎永远挂着(论坛没有回答)
  • 有很多(太大)RTSP服务器很少解码H264
  • 有"慢"的ffmpeg包装
  • 有一些托管的DirectShow包装

所以我不知道该去哪里?怎么做呢?

似乎iSpyCamera正在做这项工作,但这是一个大项目,而不是一个小库来查询ip摄像机。

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

Emgu CV 3.0.0似乎工作得很好(参见Emgu样本)

我仍然坚持使用VLC的IP摄像机,只有当我添加":network-caching=1000"时,我不知道如何使用Emgu CV设置

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

以前我用这个指南来实现RTSP流。这个控制台应用程序是在这个相机库的帮助下用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()));
        }
    }