繁体   English   中英

将视频从RTP流保存​​到文件

[英]Saving video from an RTP stream to a file

我正在尝试从IP摄像机获取和存储数据,并且希望获得有关最佳方法的一些高级建议。

到目前为止,我已经成功地与摄像头发起了RTSP对话,并使其向我发送了带有RTP有效负载的UDP数据包。 但是我不确定从这里出发。

我很高兴能够完成这项工作,我只想感谢一些指导/步骤的高级概述,以便我可以解构该项目!

在这里,OP的问题没有直接答案,因为他的问题有点宽泛,而且如果没有与OP打算使用该信息做什么的进一步信息,就很难给出准确的答案。 我在这里可以做的就是向OP建议可能采取的步骤以及要考虑的问题。

OP曾指出:

到目前为止,我已经成功地与摄像头发起了RTSP对话,并使其向我发送了带有RTP有效负载的UDP数据包。 但是我不确定从这里出发。

现在,您已经与摄像机建立了通信,并能够通过视频流接收数据包,现在就可以了解RTP有效负载是什么,或者如何解释该数据。 因此,在这一点上,您将必须对RTP协议进行研究,在我看来,它是一种网络协议。 一旦编写了可以成功使用此协议的结构和功能,就可以将UPD数据包分解为有用的信息字节。 通常,在许多情况下,无论是直接处理来自文件还是流对象的图形,视频或音频数据,它们通常都带有某种类型的标题信息。 接下来,需要了解此Header信息,该信息以结构的形式提供,该结构提供有关此文件或流所保存的内容类型的信息,以便您知道要从中提取多少字节的信息。

我知道这不仅仅是将RTP有效负载直接保存到文件的情况,但是还涉及其他哪些步骤?

所涉及的步骤可能会因您的需要以及对信息的处理方式而有所不同:您是否正在尝试将有关视频内容的属性或常规信息写入文件,例如:其压缩类型,音频-视频编解码器类型,其分辨率和帧率信息,其字节率等? 还是要尝试将实际的视频内容本身写入应用程序将用于播放或编辑的文件? 这一切都取决于您的意图。

数据是否已压缩,在这种情况下我必须将其解压缩?

在这一点上,一旦您能够成功理解RTP协议并通过理解数据包头信息并将其保存到适当的结构中来解析数据包,便可以使用该头信息来确定流中的实际内容宾语。 例如,根据有关您提供的摄像机属性的PDF,可以将视频压缩保存为H.264或MJPEG两种类型,您必须根据标题中提供的信息来确定,从这里开始,您将不得不分支您的代码,并能够读取和解析每种压缩类型,或者接受您愿意使用的一种压缩,而忽略另一种压缩。 如果您担心音频并且可用的类型是AAC(仅编码),G.711 A-Law和G.711 U-Law,则接下来是“音频压缩”,并且此处应用相同的机制。 一旦您能够克服音频和视频压缩,您将需要有关视频信息本身的重要信息,例如从标头信息中存储了什么分辨率和帧率(缓冲区大小),以便您知道要从中读取多少字节流以及将指针在流中移动多远。 如果您注意到“分辨率和帧速率”,则每种正在使用的压缩类型都有不同的可接受格式:

  • H.26
    • 1920 x 180(2.1MP)@ 30帧/秒(1080p)
    • 1280 x 720 @ 60 fps(720p)*
    • 720 x 480/576 @ 30/25 fps(D1)
    • 704 x 480/576 @ 30/20 fps(4CIF)
    • 352 x 240/288 @ 30/25 fps(CIF)
  • MJPEG
    • 720 x 480/576 @ 30/25 fps(D1)
    • 740 x 480/578 @ 30/25 fps(4CIF)
    • 352 x 240/288 @ 30/25 fps(CIF)

现在,这是关于分辨率和帧速率的,但接下来要考虑的是您正在处理视频流,因此上述情况可能不适用于您的情况,并且取决于摄像机的视频流功能的属性。这些是类型您必须考虑以下因素:

  • 单流H.264最高1080p(1920 x 1080)@ 30 fps
  • 双码流H.264和MJPEG
    • H.264:主​​码流可编程高达1280 x 720 @ 25/20 fps
    • MJPEG:辅助流可编程,最高720 x 576 @ 25/20 fps

使用这些不同类型的摄像机供您使用时,您必须考虑所有这些因素。 现在,这还取决于您的应用意图以及您打算如何处理这些信息。 您可以编写程序以接受所有这些类型,也可以编写程序以仅接受一种具有该类型特定格式的类型。 这取决于你。

我还需要做其他修改吗?

我认为除非您打算在实际应用程序中修改视频-音频信息本身,否则您将无需进行任何修改。 如果您打算在应用程序中仅读取文件以进行简单播放,则答案是没有的,只要正确保存了所有适当的信息,并且用于读取自定义文件结构的文件解析器就可以读取文件的内容,并且能够正确解析数据以进行常规播放。

在哪里可以了解我需要对此相机做些什么?

我认为您不需要有关相机本身的更多信息,因为您在问题链接中提供的PDF已经为您提供了足够的信息。 您从这里需要的是有关特定协议,数据包类型,压缩和流类型的信息和文档,一般搜索这些内容就足够了。

UDP

  • 用Google搜索Linux或Winsock的c ++编程UDP套接字。

RTP

  • 用Google搜索C ++编程的RTP数据包

视频压缩

  • 在Goggle中搜索有关流对象的H.26和MJPEG压缩以及结构信息。

音频压缩

  • 如果您也对音频感兴趣,请在Google上搜索AAC(仅编码),G.711 A-Law,G.711 U-Law。

从那里开始,一旦有了这些数据结构的有效规范作为流对象,并且需要适当的标头信息来确定保存此视频内容的类型和格式,那么您就应该能够轻松地适当地解析数据包。 现在,如何保存它们或将它们写入文件都取决于您的意图。

我提供了此指南,以帮助您以正确的方向指导您,以类似于化学家,物理学家,科学家或工程师解决任何典型问题的方式。

一般步骤是通过遵循关于当前问题的科学方法。 这些通常是:

  • 评估情况
  • 创建关于情况的假设或论点。
  • 收集已知事实
  • 确定未知
  • 起草一个模型,该模型显示已知和未知之间的关系。
  • 进行研究和实验
  • 记录或记录事件和数据
  • 分析数据
  • 得出结论

现在,在编写软件应用程序的情况下,概念相似,但是方法可能不同或有所不同,因为可能不需要上述所有步骤,或者可能需要一些其他步骤。 科学方法中未找到的应用程序开发周期中的此类步骤之一就是调试应用程序的过程。 但是一般准则仍然适用。 如果您可以坚持这种策略,那么我相信您将有信心在逐步实现目标的过程中收集所需的信息以及如何使用它。

我正在尝试从Cisco IPC摄像机获取和存储数据,并且希望获得关于最佳方法的一些高级建议。

您可能可以使用openRTSP进行此操作,它也可以输出到file 对于这种方法,你会写任何代码。 正确地实现RTP,RTSP和RTCP非常复杂且需要大量工作。 如果您有不能满足openRTSP的要求,则可以使用live555库来实现RTSP / RTP / RTCP,并编写一些最少的代码来处理接收到的视频。 如果您提出“好”问题,并确保您首先阅读FAQ,则邮件列表的响应速度非常快。

我知道这不仅仅是将RTP有效负载直接保存到文件的情况,但是还涉及其他哪些步骤?

如果您使用openRTSP,则不需要知道这一点。 如果直接使用live555库,则将传递整个视频帧,然后根据您要实现的目标将它们解码并写入文件。 如果您确实需要/想要了解RTP和RTP有效负载格式,请阅读相应的RFC,例如RFC2326RFC3550RFC6184

数据是否已压缩,在这种情况下我必须将其解压缩?

通常,您要将压缩的媒体存储在文件中,并使用媒体播放器软件在播放时对其进行解码(否则最终会产生大文件)。

在哪里可以了解我需要对此相机做些什么?

如果您只想保存视频,理想情况下,除了实现什么标准(您已经做过)之外,您无需了解其他任何信息。

暂无
暂无

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

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