问题标签 [rtcp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
690 浏览

rtp - 录制 RTP 流和后续播放

我正在寻找一些用 C 编写的开源库,它将 RTP 数据包(RTCP 数据包也可用)转储到一个文件中,以便可以播放该文件。为简单起见,为了解决问题,我只想录制音频(例如作品编码)。如果没有这样的图书馆,是否有任何文献可以指导我如何处理这个问题?

我认为会涉及到一些问题,但不会像在实时 P2P RTP 交互中那样多,就像在 webRTC 调用中那样。

任何指针?

0 投票
2 回答
584 浏览

javascript - 如何使用 JsSIP 打印 RTP 和 RTCP 数据包消息?

我正在使用 JsSIP 拨打 SIP 电话。我可以在控制台中看到像 From、To、Via 这样的信令消息。

在此处输入图像描述

同理,我们能看到RTP和RTCP报文传输消息吗?

0 投票
1 回答
223 浏览

streaming - 对多个流媒体和单个接收器使用 RTP 协议是否有意义?

我正在学习并尝试使用 RTP/RTCP 协议。我的情况是有 1 到 n 个流媒体和 1 个(或可能是 1 到 m,如果需要)接收器,但是流媒体本身并不了解彼此(由于技术原因,他们不能直接了解,例如作为不同的网络,有限的带宽等......)。所以它更像是多个单播会话,但接收者实际上都知道它们,从它们中收集数据,只是发送者彼此不知道。

现在阅读该协议,在我看来,其中很大一部分与发送一些反馈、碰撞检测等有关。所以我有疑问,RTP真的适用于这种情况吗?是否已经在某处以这种方式使用?

在我看来,收集有关 RTP 提供的数据传输的统计数据(数据发送、丢失、时间等)仍然是有益的,只是感觉协议的大部分内容都被遗漏了......

另外我还有一个问题,通过各种 RTP 库,它们都假设发送方也会打开端口以接收 RTP/RTCP 数据,RTP 是否禁止使用单向通信?我的意思是应用程序只会流式传输数据,而不期望收到任何返回。图书馆(例如ccRTP)似乎只假设双向通信......

0 投票
0 回答
317 浏览

c++ - 如何使用 JRTPLIB 在实时流中提取 RTCP 信息?C++

通过使用jrtplib,我为 RTP h264 视频流编写了服务器端和客户端,并将它们调整为客户端可以使用 RTSP 来控制服务器流式传输的视频的质量。

现在我被要求通过 RTCP 改进这些应用程序以使其具有适应性。据说jrtplib会自动处理 RTCP 数据包,因为它的用户可以完全专注于流媒体,我决定使用它自己的 RTCP 结构。但是,尽管我已经阅读了所有文档和示例,甚至是头文件,但我找不到如何处理由RTPSession类触发并可能存储在RTPRawPacket类中的数据的解决方案。

我需要帮助。提前致谢。

注意:这些都是为了教育目的,我仍然是一个初学者(学生),所以对于大部分代码我都得到了互联网的帮助,我无法完全控制这个主题。

0 投票
0 回答
337 浏览

ffmpeg - 将 Jitter 从 RTP 时间戳单位转换为毫秒

我有一个视频会议应用程序,我想向用户显示 Interarrival Jitter。我从 FFmpeg 获取此信息,它遵循RFC 3550 附录 A.8,因此信息以时间戳为单位。我不确定如何转换它。我目前将抖动除以 90.000(视频流时基)。这个对吗?

类似问题:Live555 的抖动单位

0 投票
1 回答
1366 浏览

gstreamer - GStreamer:计算接收到的视频帧/缓冲区中的延迟以检测 Tx 和 Rx 之间的通信延迟

我正在研究一个应用程序,它需要检测接收视频帧的延迟,然后在检测到延迟时采取行动。接收视频帧的延迟被视为渲染窗口上的视频冻结。动作是在视频冻结发生后在实时视频之间插入一个 IMU 帧。以下是管道:

Tx-Rx 使用 WiFi 以 adhoc 模式连接,无需更多设备。也只传输视频,音频在这里不是问题。

Tx(iMX6 设备):

接收(Ubuntu PC):

现在根据我的应用程序,我打算检测 Rx 设备接收帧的延迟。延迟可能由多种因素引起,包括:

  • 拥塞
  • 数据包丢失
  • 噪音等

一旦检测到延迟,我打算在实时视频帧之间插入一个 IMU(惯性测量单元)帧(自定义可视化)。例如,如果每 3 帧都有延迟,则视频将如下所示:

其中 V - 接收到的视频帧和 I - 在 Rx 设备上插入的 IMU 帧

  1. 因此,根据我的应用程序要求,要实现这一点,我必须了解从 Tx 发送的视频帧的时间戳,并将此时间戳与 Rx 设备上的当前时间戳一起使用,以获得传输延迟。

    帧延迟 = Rx 的当前时间 - Tx 的帧时间戳

由于我以 30 fps 的速度工作,理想情况下,我应该期望每 33 毫秒在 Rx 设备上接收一次视频帧。考虑到它的 WiFi 和其他延迟(包括编码/解码)的情况,我知道这 33 毫秒的精度很难实现,对我来说完全没问题。

  1. 因为,我使用的是 RTP/RTCP ,所以我查看了 WebRTC,但它更适合仅针对从 Tx -> Rx 发送的一小部分数据发送 SR/RR(网络统计信息)。我还尝试使用 UDP 源超时功能,该功能检测源是否在预定义的时间内没有数据包,并发出信号通知超时。但是,这仅在 Tx 设备完全停止(使用 Ctrl+C 停止管道)时才有效。如果数据包被延迟,则不会发生超时,因为内核会缓冲一些旧数据。

我有以下问题:

  1. 使用每个视频帧/RTP 缓冲区的时间戳来检测 Rx 设备接收帧的延迟是否有意义?对于这样的用例,要考虑什么更好的设计?或者考虑每个帧/缓冲区的时间戳是否太多开销,我可以考虑视频帧因子的时间戳,例如每 5 个视频帧/缓冲区或每 10 个帧/缓冲区?此外,RTP 数据包与 FPS 不同,这意味着对于 30 fps 的视频,我可以在 GStreamer 中接收超过 30 个 RTP 缓冲区。考虑到每个交替帧延迟的最坏情况,视频将具有以下序列:

    我知道每个交替帧的精度很难处理,所以我的目标是至少在 66 毫秒内检测和插入 IMU 帧。实时视频帧和插入帧之间的切换也是一个问题。我使用 OpenGL 插件来进行 IMU 数据操作。

  2. 我应该在 Rx 设备上考虑哪些时间戳?为了计算延迟,我需要 Tx 和 Rx 设备之间的通用参考,我对此一无所知。我可以访问 RTP 缓冲区的 PTS 和 DTS,但由于没有可用的参考,我无法使用它来检测延迟。有没有其他方法可以做到这一点?

  3. 我的帽子有以下参数(只显示了几个参数):

    caps = application/x-rtp , clock-rate = 90000, timestamp-offset = 2392035930,seqnum-offset= 23406

这可以用来计算 Tx 和 Rx 的参考吗?我不确定我是否理解这些数字以及如何在 Rx 设备上使用它们来获得参考。关于理解这些参数的任何指示?

  1. 可以为此类应用程序采取的任何其他可能的方法。我的上述想法可能太不切实际了,我愿意接受解决这个问题的建议。
0 投票
1 回答
34 浏览

webrtc - 从哪里开始学习有关为音频视频发送 rtp 数据包的基础知识

有人可以提供有关两个 sip 客户端之间实际视频流的培训或文档吗?我知道客户端 apis 的基础知识,但对如何格式化 rtp 数据包、如何通过有线发送和如何被其他客户端接收知之甚少

什么是标头以及丢包期间会发生什么以及视频如何转换为 rtp 数据包

0 投票
1 回答
903 浏览

javascript - 如何更改 Webrtc rtcpMuxPolicy?

我正在尝试更改rtcpMuxPolicybundlePolicy但似乎无法更改

这是我的代码:

尝试1:

尝试2:

对于这两个示例,我仍然看到默认值:

我只能注意到一个变化,那就是iceServers数组是空的,但是 bundlePolicy,rtcpMuxPolicy仍然是默认值。

我有与 Android 应用程序通信的 WebRtc Web 解决方案,并且在流式传输视频时一切正常,当我添加 dataChannel 时出现问题,即

在我的 Web 解决方案中添加上述行后,android 会抛出错误消息:

setSDP 错误:无法设置远程报价 sdp:会话错误代码:ERROR_CONTENT。会话错误描述:无法设置 RTCP 多路复用器过滤器..

0 投票
1 回答
234 浏览

rtp - [rtp/rtcp server]如何准备一个存储的媒体文件进行流式传输?

现在我正在尝试了解 rtp/rtcp 协议(RFC3550)。我知道在一般情况下,音频和视频流是分开的。但是,如果我想在服务器中播放存储的媒体文件(例如 *.mp4),服务器 如何从该媒体文件中获取这些曲目?

0 投票
2 回答
281 浏览

c++ - FFmpeg - RTCP BYE 数据包

我正在开发一些依赖于 Wi-Fi RAK5206 电子板的 C++ 项目。我正在使用 ffmpeg 库来获取视频和音频流,我遇到了可以启动和停止流四次的问题,但是当我想第五次启动时出现错误。错误描述是Invalid data found when processing input当我调用avformat_open_input函数并且我需要重新启动电子板,重新连接到 Wi-Fi 等时发生。

我通过 Wireshark 应用程序发现 VLC 正在工作,并且在TEARDOWN被调用时它正在发送一些 BYE 数据包。我想知道错误是否取决于他们,因为我没有从我的应用程序发送。如何进行设置以强制 ffmpeg 发送 BYE 数据包?

我在rtpenc.h文件中找到了一些声明,当我想连接时设置和尝试这些选项,但显然没有成功。我用于设置选项和打开输入的代码: