标签: rtp

如何调试丢包?

我写了一个C++应用程序(在Linux上运行),它提供大约400 kbps的RTP流.对于大多数目的地,这工作正常,但一些目的地经验包丢失.有问题的目的地似乎有一个较慢的连接,但它应该足够快到我发送的流.

由于这些目的地能够为其他应用程序接收类似的RTP流而不丢包,我的应用程序可能有问题.

我已经验证了一些事情: - 在tcpdump中,我看到所有RTP数据包在发送机器上传出 - 有一个UDP发送缓冲区到位(我尝试了64KB到300KB之间的大小) - RTP数据包大多数保持在1400字节以下避免分裂

发送应用程序可以做些什么来最小化丢包的可能性以及调试这种情况的最佳方法是什么?

c++ linux networking rtp packet

5
推荐指数
2
解决办法
1万
查看次数

Android上的Live555

我正在尝试使用内置的Videoview/MediaPlayer在我的Android应用程序中播放RTSP视频流,但是在不同的ROM或不同的网络状态(UDP数据包被阻止)上总会出现各种问题,这真的很烦人所以我想要使用live555源和GLES和ffmpeg实现我自己的rtsp客户端.我可以弄清楚如何使用ffmpeg和GLES来显示视频,但我不熟悉live555.

Android上有live555的编译版本吗?或者我怎么能自己做?

谢谢.

android rtp rtsp video-streaming live555

5
推荐指数
1
解决办法
1万
查看次数

通过WiFi将同步媒体流式传输到多个设备

我想将同步媒体流式传输到多个设备(也称为多房间音频),类似于使用Sonos或AirPlay.我认为这很容易使用RTP组播,因为您只需要使用VLC(或GStreamer/ffmpeg/etc.服务器)设置一个组播流,所有客户端都可以连接到该组播流.这似乎可以在以太网上正常工作,但会导致WiFi问题(显然是由于大多数路由器上的组播数据包带宽分配较少).

这里描述的同步VLC流设置是一个很好的解决方案,但只适用于早期版本的VLC(0.8.6b).

是否还有其他选项可以通过WiFi同步媒体流?

media streaming synchronization vlc rtp

5
推荐指数
1
解决办法
6229
查看次数

什么是 Python 中具有良好 RTCP 支持的 RTP 库?

我正在寻找一个开源的 RTP/RTCP 库。我打算使用 Python。

python open-source rtp

5
推荐指数
1
解决办法
9806
查看次数

无法从 RTSP 服务器得到任何答复

我可以使用预制软件连接到我的 Rtsp 服务器,但是使用以下代码片段我无法从服务器获得答案。即使连接成功,服务器也没有回答我。

public class RtspClient {

private Socket server;
private InputStream is = null;
private OutputStream os = null;
private int seqid = 1;
private String request, resp;
private byte[] buffer = new byte[4096];
private int len = 0;


public RtspClient(String rIp, int rPort) {

    try {
        //INIT
        server = new Socket(rIp, rPort);
        is = server.getInputStream();
        os = server.getOutputStream();
        System.out.println("Connected to "+ rIp + ":" + rPort);

        //COMMUNICATION
        Boolean isTalking = true;
        while(isTalking == true) {

            //sending request
            String …
Run Code Online (Sandbox Code Playgroud)

java sockets rtp rtsp

5
推荐指数
1
解决办法
1897
查看次数

希望了解RTSP和H.264封装

我正在努力学习H.264,RTP,RTSP和封装文件格式,以开发视频录制应用程序.

具体来说,我应该阅读什么来理解这个问题?

我希望能够回答以下问题:

  • 我可以将H.264数据包或NAL(根据RFC 6184)保存到文件中吗?
  • 我可以将各个有效负载保存为文件吗?
  • 我可以简单地通过连接来加入RTP有效载荷吗?
  • 在MP4容器中保存几秒H.264视频需要进行哪些转换.
  • 以后加入这些MP4文件或任意拆分它们或将它们作为新的RTSP演示文稿服务必须做些什么?

我希望能够在相当低的水平上回答这些问题,以便我可以实现执行某些过程的软件(捕获RTP流,重新广播加入MP4).

背景

目标是将视频从网络摄像机录制到磁盘上.摄像机有一个RTSP服务器,提供H.264编码流,它通过RTP发送给播放器.我已经使用VLC成功播放了流,但是想要自定义流程.

rtp rtsp h.264

5
推荐指数
1
解决办法
3500
查看次数

GStreamer videotestsrc到RTP

我只是想让一个RTP示例正常工作,但是我看到的每个例子都因为缺少插件或不正确的引脚而无法执行.

这似乎是最有希望的,但是,虽然服务器和客户端似乎正常启动并转到"播放",但没有任何反应:

服务器:

gst-launch -v videotestsrc ! \
    video/x-raw-rgb, format=\(fourcc\)RGB, width=4, height=4, frame-rate=1/1 ! rtpvrawpay !
    udpsink host=127.0.0.1 
Run Code Online (Sandbox Code Playgroud)

服务器输出:

/GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)RAW, sampling=(string)RGB, depth=(string)8, width=(string)4, height=(string)4, colorimetry=(string)SMPTE240M, payload=(int)96, ssrc=(uint)3779397700, clock-base=(uint)1161131286, seqnum-base=(uint)43390
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
Run Code Online (Sandbox Code Playgroud)

客户:

gst-launch-0.10 -v udpsrc caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)RAW, sampling=(string)RGB, depth=(string)8, width=(string)4, height=(string)4, colorimetry=(string)SMPTE240M, payload=(int)96, ssrc=(uint)3779397700, clock-base=(uint)1161131286, seqnum-base=(uint)43390" ! rtpvrawdepay ! xvimagesink 
Run Code Online (Sandbox Code Playgroud)

客户输出:

Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ... …
Run Code Online (Sandbox Code Playgroud)

rtp gstreamer

5
推荐指数
1
解决办法
6760
查看次数

如何在 Android 中使用 MediaCodec Api 通过 RTP 解码 H264

正在做一个视频直播项目。

在发送方,我使用安卓手机捕获视频,获取 H264 帧并将它们打包成 RTP 数据包,遵循各自的 RFC -> RFC 3984。发送方没有问题。流由 VLC 接收和播放。

在接收器方面,又是一个安卓手机。我成功地收到了 RTP 数据包。它是一个包含 H264 动态负载的 RTP 流。我想解压缩这个流并解码它并使用android mediacodec API在接收器端呈现它。有人请指导我如何实现这一点。

谢谢你。

android rtp h.264 android-mediacodec

5
推荐指数
1
解决办法
3171
查看次数

如何在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 < MIN_BACKWARD_JUMP) 
        || (rtpDelta > MAX_FORWARD_JUMP))
        {
          printf("Delta in Timestamps too large\n",rtpDelta);
        }
Run Code Online (Sandbox Code Playgroud)

这里的想法是在RTP时间戳中捕获无效的大型Deltas.我们有一个当前的TimeStamp和一个从对等RTP客户端接收的前一个Timestamp.RTP时间戳的无效值的边界限制是-4294959295 <rtpDelta <-3600,如果Delta小于-3600且大于-4294959295,它应该抛出错误,因为更接近UMAX_INT的值将被视为翻转.我在这做错了什么?

c c++ x86 32-bit rtp

5
推荐指数
2
解决办法
1671
查看次数

通过rtp协议流媒体网络摄像头

我正在尝试在同一台笔记本电脑上的两个终端上流式传输和接收我的网络摄像头.为此,我使用以下命令: -

foo.sdp:

SDP:
v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 127.0.0.1
t=0 0
a=tool:libavformat 55.2.100
m=video 1235 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1
Run Code Online (Sandbox Code Playgroud)

发射:

ffmpeg -re -i /dev/video0 -r 24 -b 50k -s 858x500 -f mulaw -f rtp rtp://127.0.0.1:3000> foo.sdp
Run Code Online (Sandbox Code Playgroud)

接收:

ffplay -i foo.sdp
Run Code Online (Sandbox Code Playgroud)

虽然传输似乎工作正常,但当我使用接收命令时,我得到了错误:

Protocol not on whitelist 'file,crypto'!/0   
foo.sdp: Invalid data found when processing input
Run Code Online (Sandbox Code Playgroud)

ffmpeg rtp ubuntu-14.04

5
推荐指数
1
解决办法
4231
查看次数