簡體   English   中英

用於 H264 音頻/視頻流的 RTSP 客戶端

[英]RTSP Client for H264 Audio/Video Stream

我正在尋找一種簡單的方法來獲取 IP 攝像機 RTSP 流的數據(使用 H264 音頻/視頻)並進入另一端

  • 逐幀字節[]
  • 音頻流

經過多次研究

  • EmguCV Capture 似乎永遠掛起(論壇沒有回答)
  • 有很多(太大) RTSP 服務器很少解碼 H264
  • 有“慢”的 ffmpeg 包裝器
  • 有一些托管的 DirectShow 包裝器

所以我不知道去哪里? 以及如何做到這一點?

似乎 iSpyCamera 正在完成這項工作,但它是一個大項目,而不是一個查詢 ip 攝像機的小庫。

似乎 Emgu CV 3.0.0 運行良好(參見 Emgu 示例)

僅當我添加“:network-caching = 1000”時,我仍然堅持使用我的IP攝像機與VLC一起使用我不知道如何使用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()));
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM