首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用net7mma将RTSP流记录到磁盘?

如何使用net7mma将RTSP流记录到磁盘?
EN

Stack Overflow用户
提问于 2016-05-17 20:05:55
回答 1查看 3.1K关注 0票数 1

net7mma库有一点混淆。

我想要建立一个恒定的RTSP流到一个Axis摄像机,然后在某个点,记录RTSP流到磁盘。第一个应该是可能的,不确定后者是否可以在这个库中完成,或者仅仅通过将帧图像拼凑在一起。

当前正在尝试以下代码来接收流:

代码语言:javascript
复制
        RtspClient client = new RtspClient("rtsp://axiscamera/axis-media/media.amp", RtspClient.ClientProtocolType.Http);
        client.Credential = new System.Net.NetworkCredential("root", "password");
        client.AuthenticationScheme = System.Net.AuthenticationSchemes.Basic;
        client.StartPlaying();
        client.Client.RtpPacketReceieved += OnPacketReceived;

..。但这惊人地崩溃了:

抛出的异常:“Media.Common.TaggedException`1”在Media.Rtsp.dll中程序“17464 RtspTestViewer.vshost.exe”已退出,代码为-1073741819 (0xc0000005)“访问冲突”。

不确定我是否应该使用RtspSourceRtspClient,或者两者兼而有之。这该怎么做?

EN

回答 1

Stack Overflow用户

发布于 2016-05-17 20:52:39

首先,感谢你对这个项目的兴趣。

访问冲突可能是因为某些东西已经占用了端口554的独占所有权,有时wmpnetwork.exe使用端口554来支持DLNA协议,但是如果没有更多的信息,很难说,您可以使用netstat来确定已经使用的端口。

当然,保存单个流是可能的,但是库仍然没有将(组合)流合并到容器中,尽管它可以读取几乎所有的容器。

通过SessionDescription检索到的SETUP将告诉您可用的媒体轨道以及它们使用的编解码器。

然后,您必须对接收到的数据(RtpPackets / RtpFrame)进行脱节,以便对其执行任何有意义的操作,例如将其存储到磁盘或回放。

RtpPackets构成了一个RtpFrame;在大多数情况下,它们由许多包组成,其中最后一个包设置了Marker位。通常,与RtpFrame相对应的所有数据包也共享相同的Timestamp字段。

我的项目中的基本RtpFrame实现仅用于事件,应该在RtspServer类中为您的编解码器提供一个派生实现。

因此,我将使用OnFrameChanged事件,每次将RtpPacket添加到框架时,它都会触发。RtpFrameChanged事件的参数'final‘表示事件是否将是最后一次以给定的框架实例作为参数触发。

您通常可以在OnRtpFrameChanged事件中使用如下代码来进行处理。

代码语言:javascript
复制
if(final) { /* process the frame further*/ }

派生的RtpFrame实现非常适合于去解密(从RtpPackets到解码器或其他方式)或分组(从数据到RtpPackets)。

如果您检查UnitTests解决方案,您将看到我是如何使用衍生实现来实现JPEG、H.264和AAC (也许还有其他几个)。

如果您有一个您发现不支持的编解码器,那么在项目的讨论区上设置一个问题,我们就可以继续下去了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37285323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档