问题标签 [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.
rtp - 录制 RTP 流和后续播放
我正在寻找一些用 C 编写的开源库,它将 RTP 数据包(RTCP 数据包也可用)转储到一个文件中,以便可以播放该文件。为简单起见,为了解决问题,我只想录制音频(例如作品编码)。如果没有这样的图书馆,是否有任何文献可以指导我如何处理这个问题?
我认为会涉及到一些问题,但不会像在实时 P2P RTP 交互中那样多,就像在 webRTC 调用中那样。
任何指针?
streaming - 对多个流媒体和单个接收器使用 RTP 协议是否有意义?
我正在学习并尝试使用 RTP/RTCP 协议。我的情况是有 1 到 n 个流媒体和 1 个(或可能是 1 到 m,如果需要)接收器,但是流媒体本身并不了解彼此(由于技术原因,他们不能直接了解,例如作为不同的网络,有限的带宽等......)。所以它更像是多个单播会话,但接收者实际上都知道它们,从它们中收集数据,只是发送者彼此不知道。
现在阅读该协议,在我看来,其中很大一部分与发送一些反馈、碰撞检测等有关。所以我有疑问,RTP真的适用于这种情况吗?是否已经在某处以这种方式使用?
在我看来,收集有关 RTP 提供的数据传输的统计数据(数据发送、丢失、时间等)仍然是有益的,只是感觉协议的大部分内容都被遗漏了......
另外我还有一个问题,通过各种 RTP 库,它们都假设发送方也会打开端口以接收 RTP/RTCP 数据,RTP 是否禁止使用单向通信?我的意思是应用程序只会流式传输数据,而不期望收到任何返回。图书馆(例如ccRTP)似乎只假设双向通信......
c++ - 如何使用 JRTPLIB 在实时流中提取 RTCP 信息?C++
通过使用jrtplib,我为 RTP h264 视频流编写了服务器端和客户端,并将它们调整为客户端可以使用 RTSP 来控制服务器流式传输的视频的质量。
现在我被要求通过 RTCP 改进这些应用程序以使其具有适应性。据说jrtplib会自动处理 RTCP 数据包,因为它的用户可以完全专注于流媒体,我决定使用它自己的 RTCP 结构。但是,尽管我已经阅读了所有文档和示例,甚至是头文件,但我找不到如何处理由RTPSession类触发并可能存储在RTPRawPacket类中的数据的解决方案。
我需要帮助。提前致谢。
注意:这些都是为了教育目的,我仍然是一个初学者(学生),所以对于大部分代码我都得到了互联网的帮助,我无法完全控制这个主题。
ffmpeg - 将 Jitter 从 RTP 时间戳单位转换为毫秒
我有一个视频会议应用程序,我想向用户显示 Interarrival Jitter。我从 FFmpeg 获取此信息,它遵循RFC 3550 附录 A.8,因此信息以时间戳为单位。我不确定如何转换它。我目前将抖动除以 90.000(视频流时基)。这个对吗?
类似问题:Live555 的抖动单位
gstreamer - GStreamer:计算接收到的视频帧/缓冲区中的延迟以检测 Tx 和 Rx 之间的通信延迟
我正在研究一个应用程序,它需要检测接收视频帧的延迟,然后在检测到延迟时采取行动。接收视频帧的延迟被视为渲染窗口上的视频冻结。动作是在视频冻结发生后在实时视频之间插入一个 IMU 帧。以下是管道:
Tx-Rx 使用 WiFi 以 adhoc 模式连接,无需更多设备。也只传输视频,音频在这里不是问题。
Tx(iMX6 设备):
接收(Ubuntu PC):
现在根据我的应用程序,我打算检测 Rx 设备接收帧的延迟。延迟可能由多种因素引起,包括:
- 拥塞
- 数据包丢失
- 噪音等
一旦检测到延迟,我打算在实时视频帧之间插入一个 IMU(惯性测量单元)帧(自定义可视化)。例如,如果每 3 帧都有延迟,则视频将如下所示:
其中 V - 接收到的视频帧和 I - 在 Rx 设备上插入的 IMU 帧
因此,根据我的应用程序要求,要实现这一点,我必须了解从 Tx 发送的视频帧的时间戳,并将此时间戳与 Rx 设备上的当前时间戳一起使用,以获得传输延迟。
帧延迟 = Rx 的当前时间 - Tx 的帧时间戳
由于我以 30 fps 的速度工作,理想情况下,我应该期望每 33 毫秒在 Rx 设备上接收一次视频帧。考虑到它的 WiFi 和其他延迟(包括编码/解码)的情况,我知道这 33 毫秒的精度很难实现,对我来说完全没问题。
- 因为,我使用的是 RTP/RTCP ,所以我查看了 WebRTC,但它更适合仅针对从 Tx -> Rx 发送的一小部分数据发送 SR/RR(网络统计信息)。我还尝试使用 UDP 源超时功能,该功能检测源是否在预定义的时间内没有数据包,并发出信号通知超时。但是,这仅在 Tx 设备完全停止(使用 Ctrl+C 停止管道)时才有效。如果数据包被延迟,则不会发生超时,因为内核会缓冲一些旧数据。
我有以下问题:
使用每个视频帧/RTP 缓冲区的时间戳来检测 Rx 设备接收帧的延迟是否有意义?对于这样的用例,要考虑什么更好的设计?或者考虑每个帧/缓冲区的时间戳是否太多开销,我可以考虑视频帧因子的时间戳,例如每 5 个视频帧/缓冲区或每 10 个帧/缓冲区?此外,RTP 数据包与 FPS 不同,这意味着对于 30 fps 的视频,我可以在 GStreamer 中接收超过 30 个 RTP 缓冲区。考虑到每个交替帧延迟的最坏情况,视频将具有以下序列:
我知道每个交替帧的精度很难处理,所以我的目标是至少在 66 毫秒内检测和插入 IMU 帧。实时视频帧和插入帧之间的切换也是一个问题。我使用 OpenGL 插件来进行 IMU 数据操作。
我应该在 Rx 设备上考虑哪些时间戳?为了计算延迟,我需要 Tx 和 Rx 设备之间的通用参考,我对此一无所知。我可以访问 RTP 缓冲区的 PTS 和 DTS,但由于没有可用的参考,我无法使用它来检测延迟。有没有其他方法可以做到这一点?
我的帽子有以下参数(只显示了几个参数):
caps = application/x-rtp , clock-rate = 90000, timestamp-offset = 2392035930,seqnum-offset= 23406
这可以用来计算 Tx 和 Rx 的参考吗?我不确定我是否理解这些数字以及如何在 Rx 设备上使用它们来获得参考。关于理解这些参数的任何指示?
- 可以为此类应用程序采取的任何其他可能的方法。我的上述想法可能太不切实际了,我愿意接受解决这个问题的建议。
webrtc - 从哪里开始学习有关为音频视频发送 rtp 数据包的基础知识
有人可以提供有关两个 sip 客户端之间实际视频流的培训或文档吗?我知道客户端 apis 的基础知识,但对如何格式化 rtp 数据包、如何通过有线发送和如何被其他客户端接收知之甚少
什么是标头以及丢包期间会发生什么以及视频如何转换为 rtp 数据包
javascript - 如何更改 Webrtc rtcpMuxPolicy?
我正在尝试更改rtcpMuxPolicy
,bundlePolicy
但似乎无法更改
这是我的代码:
尝试1:
尝试2:
对于这两个示例,我仍然看到默认值:
我只能注意到一个变化,那就是iceServers
数组是空的,但是
bundlePolicy
,rtcpMuxPolicy
仍然是默认值。
我有与 Android 应用程序通信的 WebRtc Web 解决方案,并且在流式传输视频时一切正常,当我添加 dataChannel 时出现问题,即
在我的 Web 解决方案中添加上述行后,android 会抛出错误消息:
setSDP 错误:无法设置远程报价 sdp:会话错误代码:ERROR_CONTENT。会话错误描述:无法设置 RTCP 多路复用器过滤器..
rtp - [rtp/rtcp server]如何准备一个存储的媒体文件进行流式传输?
现在我正在尝试了解 rtp/rtcp 协议(RFC3550)。我知道在一般情况下,音频和视频流是分开的。但是,如果我想在服务器中播放存储的媒体文件(例如 *.mp4),服务器 如何从该媒体文件中获取这些曲目?
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文件中找到了一些声明,当我想连接时设置和尝试这些选项,但显然没有成功。我用于设置选项和打开输入的代码: