简体   繁体   English

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

[英]RTSP Client for H264 Audio/Video Stream

I'm looking for a simple way to get data of an IP Camera RTSP Stream (using H264 Audio/Video) and get on the other side我正在寻找一种简单的方法来获取 IP 摄像机 RTSP 流的数据(使用 H264 音频/视频)并进入另一端

  • a frame by frame byte[]逐帧字节[]
  • a stream of the audio音频流

After many research经过多次研究

  • EmguCV Capture seems hanging forever (no answer from forum) EmguCV Capture 似乎永远挂起(论坛没有回答)
  • There is many (too big) RTSP Server few decode H264有很多(太大) RTSP 服务器很少解码 H264
  • There is "slow" ffmpeg wrapper有“慢”的 ffmpeg 包装器
  • There is some managed DirectShow wrapper有一些托管的 DirectShow 包装器

So I don't know where to go ?所以我不知道去哪里? And how to do this ?以及如何做到这一点?

It seems iSpyCamera is doing the job but it's a big project not a little library to query ip cameras.似乎 iSpyCamera 正在完成这项工作,但它是一个大项目,而不是一个查询 ip 摄像机的小库。

It seems Emgu CV 3.0.0 works very well (see Emgu Sample)似乎 Emgu CV 3.0.0 运行良好(参见 Emgu 示例)

I'm still stuck with my IP Camera working with VLC only if I add " :network-caching=1000" I don't know how to set that with Emgu CV仅当我添加“:network-caching = 1000”时,我仍然坚持使用我的IP摄像机与VLC一起使用我不知道如何使用Emgu CV进行设置

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

Formerly I used this guide to achieve RTSP streaming .以前我使用这个指南来实现RTSP 流 This console application has been written in C# with the help of this camera library .这个控制台应用程序是在这个相机库的帮助下用 C# 编写的。 Here's the corresponding code (connecting to the camera and streaming its image):这是相应的代码(连接到相机并流式传输其图像):

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()));
        }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM