标签: rtp

如何在SIP/SDP呼叫中启动RTP流

我已设法使用JAIN-SIP API for Java设置SIP呼叫.

现在,我想在建立对话框后流式传输一些视频.我已经读过SDP和RTP这是可能的,我已经找到了关于如何在SIP数据包中定义SDP/RTP主体的多个例子.

但是,一旦您在节点上协商了功能等,您如何实际启动RTP流?您是在Java应用程序之外还是内部启动RTP流服务器?如果是这样,怎么样?链接是什么?

在我能够在网上找到的,节点只是"开始交换RTP数据包".

谢谢.

java streaming sip rtp sdp

9
推荐指数
1
解决办法
7279
查看次数

使用ffmpeg(libavcodec)通过RTP解码H264视频的问题

我使用SDP的profile-level-id et sprop-parameter-set设置AvCodecContext的profile_idc,level_idc,extradata和extradata_size.

我将Coded Slice,SPS,PPS和NAL_IDR_SLICE数据包的解码分开:

在里面:

uint8_t start_sequence [] = {0,0,1}; int size = recv(id_de_la_socket,(char*)rtpReceive,65535,0);

编码切片:

char *z = new char[size-16+sizeof(start_sequence)];
    memcpy(z,&start_sequence,sizeof(start_sequence));
    memcpy(z+sizeof(start_sequence),rtpReceive+16,size-16);
    ConsumedBytes = avcodec_decode_video(codecContext,pFrame,&GotPicture,(uint8_t*)z,size-16+sizeof(start_sequence));
    delete z;
Run Code Online (Sandbox Code Playgroud)

结果:ConsumedBytes> 0且GotPicture> 0(经常)

SPS和PPS:

相同的代码.结果:ConsumedBytes> 0且GotPicture = 0

我认为这是正常的

当我找到一对新的SPS/PPS时,我使用此数据包的有效负载及其大小更新extradata和extrada_size.

NAL_IDR_SLICE:

Nal单元类型是28 => idr帧被分段为此我尝试了两种方法来解码

1)我在第一个片段(没有RTP头)前加上序列0x000001,并将其发送到avcodec_decode_video.然后我将剩下的片段发送到这个函数.

2)我将第一个片段(没有RTP头)加上序列0x000001的前缀,并将其余的片段连接到它.我把这个缓冲区发送给解码器.

在这两种情况下,我都没有错误(ConsumedBytes> 0)但我没有检测到任何帧(GotPicture = 0)......

问题是什么 ?

c++ rtp h.264 libavcodec

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

RTCP/RTP通信问题

不幸的是,我仍然坚持使用一点RTP/RTCP通信来正确访问我的IP摄像头.

我想做什么

相机有一个我想读的内部缓冲区.因此,我通过RTSP与相机通信,并告诉它流式传输数据.当摄像机通过整个缓冲区时,流媒体将停止.

到目前为止我有什么

  1. 通过RTSP与DESCRIBE/ SETUP/ PLAYRequest(RTSP)通信以启动流的TCP连接.当Camera传输数据时,此连接必须保持打开状态.

  2. 我收到通过RTP发送的数据的端口(基于UDP) - 处理这个并不是我关心的问题,我甚至完全无法访问它,我只想提及它是为了完整性.

  3. 接收RTCP Sender Reports/的UDP套接字Source Descriptions.这很重要,因为我不知道流何时停止(如第2点所述,我不能只看流停止时).在这个Socket我读到RTCP Sender Report Goodbye到来,这意味着流式传输已经完成.然后我可以关闭TCP Socket(来自RTSP通信).

出了什么问题

它适用于2MB或4MB等小缓冲区.我收到了一些源描述,然后是Goodbye.但在我的特定测试案例中,我想使用16MB(仍然不到相机能力的一半).我收到发件人报告,但在某些时候(总是大约8MB +/- 300KB),相机才停止发送.

值得注意的是,我可以通过VLC访问缓冲区而不会出现问题.我甚至看过通信(RTSP和RTCP),它与我的应用程序几乎完全相同......我想在下面提到的一件事:

可能的原因

这是我需要你的建议的部分.

可能性:缺乏接收者报告

当通过VLC进行流式传输时,我注意到有一些RTCP Receiver Reports从VLC发送到摄像机(类似于循环Sender Reports).那么camere是否期望在Receiver Report特定时间内(或者在发送特定数量的字节之后)至少有一个?目前我想不出任何其他原因.

解?

  • 如果我们假设相机停止流式传输,因为没有Receiver Reports我想知道是否有办法实现它们而不需要携带太多信息.我已经阅读了一些RFC 3550,我猜这些报告消息背后仍然有一堆逻辑.现在我实际上不需要,所以我也不想在这里实现完整的RTCP协议.是否足以发送一些Receiver Report虚拟帧,以便相机继续流式传输?如果是这样,他们怎么样?

  • 如果它与缺乏无关Receiver Reports,我只是不需要它们,那么相机停止流动的原因是什么呢?有什么建议?

编辑:

好吧,我只是设法制作某种Dummy Receiver Report,它似乎工作(我只能收到12MB然后我得到了所需的再见)

我只填充了一个28Byte缓冲区,并在Header字段中使用了一些值,这意味着:

buffer[0] = 0x80;   // Version 2 , …
Run Code Online (Sandbox Code Playgroud)

c++ udp rtp rtsp rtcp

9
推荐指数
1
解决办法
3719
查看次数

制作H264 RTP流的最小SDP?

我正在寻找一个用于设置H264视频流的最低必要SDP的示例

假设只要通过SDP获得所需参数,接收器就可以播放H264.

我在这里找到了一个相关文档,但它在示例中使用了大量可选参数,我正在寻找最低要求.

sip rtp h.264 sdp

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

在Gstreamer上流式传输MP4视频文件

我是第一次使用gstreamer并尝试使用Gstreamer(RTP和UDP)将MP4视频文件从服务器传输到客户端.我试图使用的命令行:

在服务器端:

gst-launch-1.0 -v filesrc location = file_name.mp4 ! decodebin ! x264enc ! rtph264pay ! udpsink host=192.1XX.XX.XX port=9001
Run Code Online (Sandbox Code Playgroud)

在客户端:

gst-launch-1.0 -v udpsrc port=9001 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" ! rtpstreamdepay ! decodebin ! videoconvert ! autovideosink
Run Code Online (Sandbox Code Playgroud)

我能够成功流式传输视频.但是,我不希望 decodebinx264enc服务器端的操作.因此,我删除了这些操作并在服务器端使用了此命令行

gst-launch-1.0 -v filesrc location =file_name.MP4 !  rtpstreampay ! udpsink host=192.1XX.XX.XX port=9001
Run Code Online (Sandbox Code Playgroud)

我无法播放视频.

任何人都可以指导我,为什么我们需要在发送数据时在这种情况下进行解码和编码操作.有没有办法在不使用这些操作的情况下发送数据.

谢谢.

mp4 udp rtp video-streaming gstreamer

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

DTLS-SRTP和SRTP数据包之间的差异通过DTLS连接发送

我有两个SIP端点,并希望通过DTLS-SRTP发送媒体.我有点混淆以下几点

  1. 通过DTLS连接发送的DTLS-SRTP和SRTP数据包是相同还是不同?

  2. 如果不同,请你解释一下他们有什么不同?

sip rtp dtls webrtc

9
推荐指数
2
解决办法
3319
查看次数

如何使用vlc通过tcp协议强制流RTP视频?

我正在尝试通过rtp与vlc流式传输视频,默认协议是UDP,但其性能非常低(比特率,分辨率,流畅,......)

所以,我想使用vlc和rtp通过tcp协议传输视频以获得更高的性能.

有没有人可以帮助我强制vlc流rtp通过tcp协议.如果您有任何想法,请帮助我.

非常感谢!

streaming tcp vlc rtp

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

GStreamer 中的 RTP 时间戳同步

我们正在尝试同步 2 个不同的流的 RTP 时间戳。更具体地说,我们在端口 5004 和 5005 上以 24 fps、时钟速率 90000Hz 发送两个相同的未压缩视频流,但第二个流的 RTP 时间戳中有 90000/8=11250 的偏移量。因此,当使用下面的 GStreamer 管道显示两个流时,我们希望第二个流的图像晚于 1/8 秒(=3 帧)出现。

\n
caps="application/x-rtp,media=(string)video,clock-rate=90000,encoding-name=(string)RAW,sampling=(string)YCbCr-4:2:2,depth=(string)8,width=(string)640,height=(string)480,payload=96"; \\\nGST_DEBUG="*jitter*:4" \\\ngst-launch-1.0 udpsrc buffer-size=16000000 port=5004 caps="${caps}" ! rtpjitterbuffer mode=0 ! rtpvrawdepay ! queue ! videoconvert ! fpsdisplaysink \\\n               udpsrc buffer-size=16000000 port=5005 caps="${caps}" ! rtpjitterbuffer mode=0 ! rtpvrawdepay ! queue ! videoconvert ! fpsdisplaysink\n
Run Code Online (Sandbox Code Playgroud)\n

不幸的是,事实并非如此:rtpjitterbuffer 似乎计算从 RTP 时间戳接收到的数据包的 PTS 和 DTS 时间戳,但它对两个流使用不同的“基本 RTP 时间”:

\n
0:00:00.021740027 17400 0x556306a95120 INFO         rtpjitterbuffer rtpjitterbuffer.c:809:rtp_jitter_buffer_calculate_pts: resync to time 0:00:00.000000000, rtptime …
Run Code Online (Sandbox Code Playgroud)

rtp video-streaming gstreamer gstreamer-1.0

9
推荐指数
0
解决办法
2395
查看次数

简单的rtsp广播示例源

我想使用rtsp/rtp广播我的程序的屏幕(不是静态屏幕),因为这样一部手机(至少是最近的手机)可以查看流.

我正在寻找一个简单的示例程序,它采用我提供的帧,用编解码器对其进行编码,然后将其(使用rtsp)发送到任何连接的客户端.

我看过网络,到目前为止我能找到的都是完全成熟的开源媒体服务器(如darwin),这些服务器太复杂了,无法用作示例

任何帮助赞赏!

[R

ps发送jpegs到手机真的不是一个选择,因为这是非标准的,并且需要安装移动应用程序来解释'流'.

ps2 C,C++或C#会好的.

c# c++ video rtp rtsp

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

通过Websocket发送WebRTC MediaStream(通过HTTP/Websocket进行RTP)

除其他外,WebRTC用于实时浏览器到浏览器媒体通信,但在我的情况下,它将用于浏览器到服务器的音频通信.

根据我收集的信息,使用RTP over UDP传输MediaStream.

除了用于信令的协议之外,这将需要至少两个额外的端口,这是我想要避免的.

在WebRTC中,是否有可能在Websocket上使用RTP而不是在UDP上使用RTP,这样我只需要使用端口80或443?

rtp websocket webrtc

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

标签 统计

rtp ×10

c++ ×3

sip ×3

gstreamer ×2

h.264 ×2

rtsp ×2

sdp ×2

streaming ×2

udp ×2

video-streaming ×2

webrtc ×2

c# ×1

dtls ×1

gstreamer-1.0 ×1

java ×1

libavcodec ×1

mp4 ×1

rtcp ×1

tcp ×1

video ×1

vlc ×1

websocket ×1