【问题标题】:RTSP Client for H264 Audio/Video Stream用于 H264 音频/视频流的 RTSP 客户端
【发布时间】:2014-08-06 23:32:21
【问题描述】:

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

  • 逐帧字节[]
  • 音频流

经过多次研究

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

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

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

【问题讨论】:

  • Net7mma 是我的堆栈,它应该适用于此。发送一个wireshark捕获,我会检查一下。
  • 我已经更新了代码,解决方案不应该再“太大”了,它也应该比 ffmpeg 或 libav 更高效,使用更少的内存。
  • 好的,谢谢,我会看看 Net7mma。我使用 EmguCV 3.0.0 得到了一些结果,但我的 Ip Camera 需要一个缓冲区(VLC 中为 1s)
  • Np,该库应该支持任何大小的缓冲区。

标签: c# camera ffmpeg emgucv


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      以前我用这个指南来实现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()));
              }
          }
      

      【讨论】:

      • Ozeki 组件是付费的,它似乎可以工作,但是,您免费获得的版本有一个非常严重的延迟和公司的标志:S
      猜你喜欢
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 2015-06-14
      • 1970-01-01
      相关资源
      最近更新 更多