问题标签 [rtp]
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.
android - Android 移动设备上的 RTP 客户端应用程序
大家好,我正在 Android 设备上开发一个 RTP 客户端,它可以播放来自服务器的流式视频。我对我应该如何开始感到困惑?我正在考虑使用 HTML、CSS 和 Javascript 开发一个 Web 应用程序,以后可以将其封装在 Android 中。这种方法正确吗?javascript 支持实时媒体播放器吗?请指导我,我是一个更新鲜且完全无知的人..:(
sip - 使用 mjsip/jmf 时本地 RTP 端口无法访问
我使用 mjsip 创建一个与外部 voip 提供商的 sip 会话。然后我使用 RtpManager 通过 rtp 向提供者传输一个测试 wav 文件。
程序运行没有错误,我接听了 sip 电话。但是,不传输音频。当我使用wireshark 诊断网络流量时,我看到一堆RTP 流量从我的本地主机(在某种nat 后面)到voip 提供商,没有任何返回。
过了一会儿,我从提供商收到 ICMP 错误“无法访问目标(无法访问端口)”到我的本地主机。
软件 linphone 使用相同的 localhost 和 voip 提供程序工作 - 尽管它使用不同的 sip 堆栈。
有什么建议么?
谢谢
c++ - 如何调试丢包?
我编写了一个 C++ 应用程序(在 Linux 上运行),它提供大约 400 kbps 的 RTP 流。对于大多数目的地来说,这可以正常工作,但有些目的地会出现数据包丢失。有问题的目的地似乎有一个共同的较慢的连接,但对于我发送的流来说它应该足够快。
由于这些目的地能够为其他应用程序接收类似的 RTP 流而不会丢失数据包,因此我的应用程序可能有问题。
我已经验证了一些事情: - 在 tcpdump 中,我看到所有 RTP 数据包都在发送机器上发出 - 有一个 UDP 发送缓冲区(我尝试了 64KB 和 300KB 之间的大小) - RTP 数据包大多保持在 1400 字节以下避免碎片化
发送应用程序可以做些什么来最大程度地减少数据包丢失的可能性,以及调试这种情况的最佳方法是什么?
voip - “RFC 2833 RTP 事件”连续事件和 E“结束”位
为什么E位为0时有dtmf声音,为1时没有声音?(RTP数据包出现在wireshark中)
背景:
我可以发送一个 RFC 2833 dtmf 事件,如http://www.ietf.org/rfc/rfc2833.txt中所述, 当未设置 E 位时获得以下行为:
例如,如果7874556332111111145855885#3
按下键,则所有事件都会发送并显示在诸如wireshark之类的程序中,但只有87456321458585#3
声音。因此,第一个键(我认为这可能是一个单独的问题)和事件的任何重复(即 11111)都无法发出声音。
在上面链接文档的第 3.9 节,图 2 中,他们给出了一个 911 示例,其中除了最后一个事件之外的所有事件都设置了 E 位。
当我将所有数字的“E”位设置为 1 时,我永远不会听到任何声音。
我想到了一些可能的原因,但不知道是不是原因:
1)图2显示了发送的96和97的有效载荷类型。我还没有发送这些标题。在第 3.8 节中,代码 96 和 97 被描述为“已分别为冗余机制和电话事件有效负载分配了动态有效负载类型 96 和 97”
2)在第 3.5 节,“E:”,“发送者可以延迟设置结束位,直到重新传输最后一个数据包以获取音调,而不是在第一次传输时” 有人知道如何实际执行此操作吗?
3)我有一个单独的输出流也可以播放,所以想知道它是否会干扰听到这个流。
4)还摆弄了时间戳间隔和RTP标记。
任何帮助是极大的赞赏。以下是相关区域的示例 wireshark 事件捕获:
请注意:如 ietf.org/rfc/rfc2833.txt 规范中所述,音量为零是可获得的最大音量:
"volume:对于DTMF数字和其他可表示为音调的事件,该字段描述音调的功率电平,在去掉符号后以dBm0表示。功率电平范围从0到-63 dBm0。有效DTMF的范围是从0到-36 dBm0(必须接受);低于 -55 dBm0 必须被拒绝(TR-TSY-000181,ITU-T Q.24A)。因此,较大的值表示较低的音量。此值仅针对 DTMF 数字定义。对于其他事件,它被发送者设置为零并且被接收者忽略。” 问题是“事件结束”位打开时。
java - 如何使用 RTPSocket 发送 RTP 数据包
我对 JMF 比较陌生,但已经阅读了文档并对它的工作原理有足够的了解。据说在为 RTPSockets 实现服务器端时遇到了一些麻烦。
在看了他们的插图和例子之后。我还是有点困惑。我是否要开发数据源和数据接收器类来处理传输?我想做的是将数据从我的应用程序流式传输到底层网络并通过另一个应用程序接收回来。我有并且了解接收,但无法理解发送所涉及的步骤。
非常感激任何的帮助。
networking - 通过 SDP 和陆线将 RTP 与 SIP 连接的过程
我在启动媒体会话并将其与我的 SIP 客户端结合时遇到问题。我设计了一个递归 SIP 客户端,它根据 RFC 中记录的可接受序列和我阅读的示例,重用相同的请求模板将下一个请求发送到服务器。据我所知,SIP 部分工作正常,可以很好地注册服务器邀请并进行身份验证。我还没有完成对客户端的任何调用,因为需要填充内容标头(我还没有,所以我从服务器得到一个 503,我猜这没问题)。
很长一段时间我不知道从哪里开始媒体会话,慢慢学会了如何使用JMF,我已经构建了一个处理RTP传输的对象,现在我站在十字路口,在一个一方面我有我的 SIP 信令,但它需要 SDP 内容标头来完成邀请,另一方面我有知道如何 p2p 的 RTP。
为了完成我的设计,我需要您帮助解决以下问题:
是否有一种简单的//一种简单的//一种将音频/视频格式从 JMF 转换为 SDP 媒体标头的实施方法?甚至是一个生成器,我可以输入内容头的所有参数,它会快速生成一个内容头,还是我必须自己实现这个?
一旦我完成了 SDK 的构建并且 SIP 启动并运行并且我从服务器获得了 OK 响应(在响铃之后),我如何启动媒体会话?如何根据我在 SIP 邀请中发送的呼叫者详细信息连接 p2p?
如果 2 是正确的,那么如何连接到陆线?陆线是否知道一旦他们将 OK 发送回服务器,他们会在特定端口上侦听/启动 RTP 会话?
还是我把一切都弄错了?:-/
我真的很感谢我能得到的任何帮助,我到处寻找答案,但他们并不清楚,他们忽略了问题 2,就好像这是一件显而易见的事情,但对我来说,事实并非如此。
在此先感谢亚当·泽哈维。
添加:
首先感谢您的回复以及您花时间帮助我。
我会回到问题2:
一旦您收到 Ok 响应,您就会知道 SIP 用户代理服务器 (UAS) 正在侦听的 IP 套接字(您的意思是 ADDRESS:PORT 正确吗?)以及它接受并可以开始发送您的 RTP 的编解码器。
好吧,我明白了,我想知道另一件事,在我向 UAS 发送 RTP 数据包的这段对话期间,UAS 用作两个 UAC 之间的桥梁。
现在...我可以使用 SIP 实例化会话,然后将客户端信息从一台计算机发送到另一台计算机,并在两台计算机之间建立 P2P,无需任何中间人(UAS),然后处理 SIP 会话吗?
我希望我现在能更好地解释我自己...
谢谢,亚当。
video - 为什么在发送方/接收方管道中使用 H264 只会引入巨大的延迟?
当我尝试创建使用 H264 传输视频的管道时,我得到了一些巨大的延迟,将视频从我的机器传输到......我的机器长达 10 秒!这对我的目标来说是不可接受的,我想咨询 StackOverflow 我(或其他人)做错了什么。
我从 gstrtpbin 文档页面获取管道并稍微修改它们以使用 Speex:
这是发送方管道:#!/bin/sh
接收器管道:
!/bin/sh
这些管道,H263 和 Speex 的组合,工作得很好。我在相机和麦克风附近打了个响指,然后我同时看到运动和听到声音。
然后我更改了管道以沿视频路径使用 H264。
发件人变成:#!/bin/sh
接收器变为:#!/bin/sh
这就是在 Ubuntu 10.04 下发生的情况。我没有注意到 Ubuntu 9.04 上有如此巨大的延迟——延迟在 2-3 秒之间,AFAIR。
c++ - FFMpeg 将 RGB 图像编码为 H264
我正在开发一个 DirectShow 过滤器,它有 2 个输入引脚(1 个用于音频,1 个用于视频)。我正在使用 FFMpeg 的 libavcodec/libavformat/libavutil 将视频编码为 H264,将音频编码为 AAC,并使用 RTP 对它/流进行复用。到目前为止,我能够使用 libavcodec 正确编码视频和音频,但现在我看到 FFMpeg 似乎也支持 RTP 多路复用。不幸的是,我找不到任何显示如何执行 H264 编码和 RTP 多路复用的示例代码。有人知道好的样品吗?
c# - 如何确定数据包是否为 RTP/RTCP?
我正在使用基于 WinPCap 构建的 SharpPCap 来捕获 UDP 流量。我的最终目标是从 H.323 捕获音频数据并将这些电话对话保存为 WAV 文件。但首先是第一件事——我需要弄清楚我的 UDP 数据包通过 NIC 是什么。
SharpPCap 提供了一个 UdpPacket 类,让我可以访问消息的 PayloadData。但我不确定如何处理这些数据。这是一个 Byte[] 数组,我不知道如何确定它是 RTP 还是 RTCP 数据包。
我已经用谷歌搜索了这个主题,但那里没有太多内容。任何帮助表示赞赏。
h.264 - 如何在 RTP 流中查找特定时间?
我正在流式传输具有以下结构的预先录制的 H264 视频:
在 IDR 之间(在我的结构中)我有 32 个(此处仅显示 3 个)其他框架(所有其他不是 IDR 的东西,如 SEI、SPS、PPS ... X-es)
现在,假设我的帧的时间是这样的:
现在我想寻找时间 4。如果我寻找那个帧并发送它,图片就会变得混乱,因为解码器需要一个 IDR 才能正确解码,所以我求助于找到合适的 IDR(在这种情况下是一个时间 1) 并将其作为时间 4 的帧发送。所以现在图片已正确解码,一切都很好......但是......如果我的 GOV 是 32,我需要发送非 IDR 帧有索引 31,如果它和相应的 IDR 之间的时间跨度是 3 秒,我实际上比我想要的时间早了 3 秒。现在,这并不精确,因为我无法找到 GOV 时间跨度的一半。另外,我不能设置更小的 GOV,所以我想要其他想法......
我的另一个想法是发送最后一个已知的 IDR,然后发送在我想要的之前的所有其他非 IDR 帧,只有我会将所有这些 RTP-TIME 设置为与相应的 IDR 相同。在这种情况下,图片被完美解码,但现在在上述情况下,非 IDR 帧之后的 3 秒与所需时间在解码器/播放器中得到快节奏(没有瞬时搜索)......
有任何想法吗?或者我只能寻找 IDR-s 而不是中间的帧?