Tag: rtp

ohrwurm如何使用libpcap和arpspoof来破坏RTP流量?

我正在尝试评估名为ohrwurm的工具,该工具声称能够破坏两个SIP端点之间的RTP流量。 通过阅读其源代码,我不相信它有效,并且在我尝试之前想要其他人的意见。 它的前提很简单: 假设端点A的IP地址为192.168.0.11,端点B的IP地址为192.168.0.22。 在与A和B相同的子网上的第三个盒子C上,在两个SSH会话中执行以下命令: arpspoof 192.168.0.11 arpspoof 192.168.0.22 执行ohrwurm。 看一下ohrwurm的源代码,它执行以下操作: 将/ proc / sys / net / ipv4 / ip_forward设置为1。 在混杂模式下使用libpcap拦截上面两个框之间的所有IP数据包。 对于那些SIP的数据包,请抓取RTP端口号。 对于那些UDP以及之前抓取的两个RTP端口之间的数据包,请对RTP内容进行模糊处理。 这是我没有得到的。 我接受arpspoof’ing将导致A和B之间的所有IP流量通过C.然后,通过将/ proc / sys / net / ipv4 / ip_forward设置为1,我们正在让内核正确转发此IP流量我们。 但我认为libpcap是只读的? 如何修改我们在原地混杂模式中嗅探的数据包? 您会注意到ohrwurm.c第401行 ,我们甚至试图丢弃RTCP数据包! 这可能吗? 我对libpcap一无所知,我很想知道更多! 请教育我。 谢谢。

为什么RTP / RTSP干扰我的H.264 NAL?

我查看了RFC并注意到可以解释为什么会发生以下情况(虽然解码器仍然可以生成原始电影)。 我使用VSS h.264编码器传输H.264 / AVC nals,字节流看起来像这样的E5 46 0E 4F FF A0 23 …… 当我在RTP Broadcaster / RTSP接收器之后读取接收器侧的电影数据时,我得到额外的未知数据,但总是在相同的位置,在开始代码前缀(0x00000001)之前添加8个字节,在开始代码之后添加2个字节前缀看起来像这样。 XX XX XX XX XX XX XX XX 00 00 00 01 XX XX,然后我查看Wireshark,我可以看到RTP将字节添加到数据有效负载。 为什么会发生这种情况? 为什么解码器似乎能够很好地应对那些额外的字节?!

FFmpeg:协议不在白名单’文件’上!

我想从RTP流中读取,但是当我将“test.sdp”指定为avformat_open_input()我收到以下消息: [rtp @ 03928900] Protocol not on whitelist ‘file’! Failed: cannot open input. avformat_open_input() fail: Invalid data found when processing input 通常,如果我在控制台上使用-protocol_whitelist file,udp,rtp ,我会添加选项-protocol_whitelist file,udp,rtp ,它会正常工作。 所以我尝试了这个: AVDictionary *d = NULL; av_dict_set(&d, “protocol_whitelist”, “file, udp, rtp”, 0); ret = avformat_open_input(&inFormatCtx, filename, NULL, &d); 但同样的消息仍然会出现。 有任何想法吗?

如何在C语言中检测包装计数器和大负值之间的差异

为我的愚蠢道歉,因为这是我在这个论坛上的第一篇文章。 我试图通过以下代码检测包装无符号32位计数器和大负跳转之间的区别,但编译器给出了错误: 错误:由于数据类型的范围有限,比较始终为真[-Werror = type-limits] 这是我的代码片段: #define MAX_BACKWARD_JUMP -4294959295 //UINT_MAX – 8000 #define MIN_BACKWARD_JUMP -3600 #define MAX_FORWARD_JUMP 4800000 signed int rtpDelta; //Signed 32-bit unsigned int currRTPTs, prevRTPTs; //unsigned 32-bit rtpDelta = currRTPTs – prevRTPTs; if ((rtpDelta > MAX_BACKWARD_JUMP && rtpDelta MAX_FORWARD_JUMP)) { printf(“Delta in Timestamps too large\n”,rtpDelta); } 这里的想法是在RTP时间戳中捕获无效的大型Deltas。 我们有一个当前的TimeStamp和一个从对等RTP客户端接收的前一个Timestamp。 RTP时间戳的无效值的边界限制是-4294959295 <rtpDelta <-3600,如果Delta小于-3600且大于-4294959295则应该抛出错误,因为更接近UMAX_INT的值将被视为翻转。 我在这做错了什么?

无法将libavformat / ffmpeg与x264和RTP同步

我一直在研究一些流媒体软件,它使用H.264通过网络从各种摄像机和流中获取实时信息。 为了实现这一点,我直接使用x264编码器(带有“zerolatency”预设)并提供NAL,因为它们可用于libavformat以打包到RTP(最终是RTSP)。 理想情况下,此应用程序应尽可能实时。 在大多数情况下,这一直运作良好。 不幸的是,存在某种同步问题:客户端上的任何video播放似乎都显示了一些平滑的帧,然后是短暂的暂停,然后是更多的帧; 重复。 此外,似乎有大约4秒的延迟。 我尝试过的每一个video播放器都会出现这种情况:Totem,VLC和基本的gstreamer管道。 我把它煮成了一个小小的测试用例: #include #include #include #include #include #include #define WIDTH 640 #define HEIGHT 480 #define FPS 30 #define BITRATE 400000 #define RTP_ADDRESS “127.0.0.1” #define RTP_PORT 49990 struct AVFormatContext* avctx; struct x264_t* encoder; struct SwsContext* imgctx; uint8_t test = 0x80; void create_sample_picture(x264_picture_t* picture) { // create a frame to […]

在libav中读取dumepd RTP流

嗨,我需要一些帮助/指导,因为我陷入了研究的困境。 问题: 如何在API(通过编程)或控制台版本中使用gstreamer或av​​lib(ffmpeg)转换RTP数据。 数据 我有来自RTP / RTCP的RTP转储,因此我可以获得文件中每个RTP数据包的精确启动和停止。 这是一个H264video流转储。 数据是这样的,因为我需要通过libcurl获取RTCP / RTP交错流(我现在正在做) 状态 我曾尝试使用ffmpeg来使用纯RTP数据包,但似乎通过控制台或编程使用rtp涉及在ffmpeg中“启动”整个rtsp / rtp会话业务。 我已经停在那里,暂时我没有更深入地追求这条道路。 我想这可能与情人级别的RTP API如ff_rtp_parse_packet()我对这个lib太新了直接做到这一点。 然后就是gstreamer它有更多的function可以在没有编程的情况下完成它,但暂时我无法弄清楚如何将它传递给我的RTP转储。 我还试图做一点诡计,并通过socat / nc将转储流转到udp端口,并通过ffplay以sdp文件作为输入来监听,似乎有一些进展rtp至少得到识别,但是对于socat来说,有大量的数据包丢失(数据发送得太快了吗?),最后数据不可视化。 当我使用nc时 ,video严重失误,但至少没有那么多收到错误。 无论如何,数据都无法正确显示。 我知道我可以“手动”拆分数据但是想法是通过某种类型的库来实现,因为最终还会有第二个带有音频的流,它必须与video一起复用。 我很感激有关如何解决这个问题的任何帮助。 谢谢。

使用FFMPEG从IP摄像机读取RTCP数据包

我正在使用ffmpeg C库。 我需要拦截来自摄像头的RTCP数据包,以便从发件人报告中获取时间戳。 ffmpeg中是否有任何方法或结构可以提供这些信息? 我完全陷入困境,但我无法解决这个问题。 任何帮助将不胜感激。 提前致谢,