标签: rtp

RTP序列提取

RTP 数据包由 12 字节的 RTP 标头和后续的 RTP 负载组成。标头的第 3 和第 4 字节包含 RTP 数据包序列号的最高有效字节和最低有效字节 Seq Num= (MSB< <8)+LSB

char pszPacket[12];

...

长lSeq = ???? - 如何从数据包中获取序列号?

c++ rtp

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

在 Ubuntu 中使用 Gstreamer 通过 RTP 协议流式传输 Mp4 视频

我正在尝试从本地目录获取视频文件,启用来自服务器的流并从客户端捕获这些帧。我使用了以下管道:

服务器端:

gst-launch -v  filesrc location=/home/gokul/Videos/Econ_TestVideo/radioactive.mp4 ! qtdemux ! rtpmp4vpay ! udpsink host=192.168.7.61 port=5000 sync=true


Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstRtpMP4VPay:rtpmp4vpay0.GstPad:src: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, profile-level-id=(string)1, config=(string)000001b001000001b58913000001000000012000c48d8800f528045a1443000001b24c61766335332e33352e30, payload=(int)96, ssrc=(uint)3003638799, clock-base=(uint)1542273545, seqnum-base=(uint)49176
/GstPipeline:pipeline0/GstRtpMP4VPay:rtpmp4vpay0.GstPad:sink: caps = video/mpeg, mpegversion=(int)4, systemstream=(boolean)false, profile=(string)simple, level=(string)1, codec_data=(buffer)000001b001000001b58913000001000000012000c48d8800f528045a1443000001b24c61766335332e33352e30, width=(int)1280, height=(int)720, framerate=(fraction)91/3, pixel-aspect-ratio=(fraction)1/1
/GstPipeline:pipeline0/GstRtpMP4VPay:rtpmp4vpay0: timestamp = 1542273545
/GstPipeline:pipeline0/GstRtpMP4VPay:rtpmp4vpay0: seqnum = 49176
/GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, profile-level-id=(string)1, config=(string)000001b001000001b58913000001000000012000c48d8800f528045a1443000001b24c61766335332e33352e30, payload=(int)96, ssrc=(uint)3003638799, clock-base=(uint)1542273545, seqnum-base=(uint)49176
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ... …
Run Code Online (Sandbox Code Playgroud)

ubuntu rtp video-streaming gstreamer gst-launch

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

RTP 中用于 AMR 和 G729 等编解码器的语音样本的标记位

我想知道语音数据包 RTP 中标记位的重要性,这里是否有任何 RFC 可以说明这一点。

我知道视频数据包标记位意味着同一图像的最后一个数据包,因此,它是具有与图像相对应的 PTS 时间戳的最后一个数据包,但对于编解码器的语音数据包来说,例如 AMR-NB 或 G711 alaw 或 G729,每个 RTP 数据包中的标记位通常为假。

那么,在这种情况下的RTP数据包中,标记位的含义是否发生变化?

问候尼丁

rtp

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

确定 RTP 流中 H.264 I 帧的结尾

我处理来自 IP 摄像机的 H.264 RTP 流。我使用的相机将每个 I 帧分割为多个 NAL 单元,每个单元又分割为 RTP 数据包(开始和结束标志决定每个单元的尺寸,而不是帧的尺寸)。

我如何知道帧传输何时完成并且我有足够的数据来解压缩它?由于帧由多个单元组成 - 标志不能用于确定其结束。

我工作过的大多数相机都会将每个帧分割为 RTP 数据包,其中标志确定帧的开始和结束。因此,我从等待结束标志的数据包中解压数据 - 这是一个完整的帧。

我从这台相机获得的 NAL 单元的序列是:

[NAL_UT_SPS] 序列参数集 +

[NAL_UT_PPS] 图片参数集

[NAL_UT_SEI] 补充增强信息

[NAL_UT_IDR_SLICE] I 帧图像数据的第 1 部分

[NAL_UT_IDR_SLICE] I 帧图像数据的第 2 部分

[NAL_UT_IDR_SLICE] I 帧图片数据的第 3 部分

[NAL_UT_SLICE] 第一个 P 帧

[NAL_UT_SLICE] 第二个 P 帧

[NAL_UT_SLICE] 第 3 个 P 帧

...

从这个序列中可以明显看出,我可以将 [NAL_UT_SPS] + [NAL_UT_PPS] + [NAL_UT_SEI] + 3*[NAL_UT_IDR_SLICE] 组合成一个 I 帧,我将在最近将其提供给解码器。但如何确定有多少个图片数据部分呢?当我收到第 #X 部分时,我如何知道它不是序列中的最后一个?

有任何想法吗?

compression ip camera rtp h.264

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

什么会导致UDP套接字上的ConnectionReset?

我正在尝试使用Managed Media Aggregation C#库(http://net7mma.codeplex.com)来处理来自Freebox机顶盒的RTSP/RTP流.

虽然lib可以正常使用示例RTSP提要,但是当使用来自我的机顶盒的提要时,RTP侦听器套接字(一个简单的UDP套接字侦听特定端口上的每个收入)会抛出SocketException:ConnectionReset,当然没有数据接收时显示(数据显示在Wireshark中).

通过SocketIO招抑制E_CONNRESET没有多少,仍然没有数据插座到来.

会导致这种行为的原因是什么?

(如果需要,我可以提供源代码或Wireshark跟踪)

c# sockets rtp rtsp

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

检索RTP / RTSP中的时间戳

我正在使用libav / ffmpeg连接到IP摄像机。我确实需要从帧中提取绝对时间戳,而不是pts / dts。我怎么有这个价值?

使用Wireshark,我可以从相机(轴P1355)看到以下响应:

RTP信息:url = rtsp://xxx.dyndns.org:4378 / axis-media / media.amp / trackID = 1?fps = 4&resolution = 1280x720&compression = 60; seq = 32446; rtptime = 3287715479 \ r \ n

c++ ffmpeg rtp rtsp libav

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

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

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

任何帮助将不胜感激.提前致谢,

c ffmpeg rtp rtsp

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

如何在不丢失时间信息的情况下将H264/RTP流转储到文件中?

我编写了一个应用程序,通过TCP(没有数据包丢失)从硬件摄像头接收RTP数据包并将其H264数据包转储到文件中,这样我就可以使用MPlayer或VLC播放视频.这已经有效了,我几乎完成了这里描述的步骤.播放视频的命令是mplayer -fps 24 -demuxer h264es foobar.h264vlc foobar.h264.

问题出现在我播放视频的时候.摄像机频繁更改FPS,因为在写入H264文件时丢弃RTP信息,每帧的时间戳丢失.我的问题是:我需要做些什么来修复帧频?我应该创建空/空白P帧(如果可能的话)?如果是这样,我该怎么做?

任何使用Linux兼容工具或库(如ffmpeg,libx264,libavcodec)使用shell,C/C++或Python的解决方案都非常受欢迎.

PS:我几乎没有视频编码和RTP的经验.

ffmpeg rtp h.264 x264

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

RTP、RTMP 串流播放质量问题

我正在编码 H264 并使用 RTP 从我的 Android 设备作为实时流发送到 Wowza 服务器。编码器的输出在设备上看起来很好。然而,在流式传输到 Wowza 服务器并通过 RTMP 以实时流形式查看输出视频后,我在视频中出现显着移动/变化的部分中发现了相当多的伪影/像素化。我只能猜测这与视频帧的时间有关,但我没有一个好的方法来确定这是在我的应用程序的发送端还是在 Wowza 端。

Wowza,如果你曾经试图获得他们的支持,那是完全没有用的。

我还遇到了从 Wowza 播放时 RTMP/Flash 播放器冻结的问题。我非常确定这不是带宽问题,因为这种情况发生在 Amazon EC2 服务器以及我的本地 PC 实例(即同一网络)上。我尝试了多个播放器,它们都表现出相同的问题(VLC、JWPlayer、MX Player 等)。我必须假设问题出在 Wowza 服务器或我的编码上。然而,由于某些帧存在像素化问题,我开始怀疑两者是否相关。

我很好奇是否有人在使用 Wowza 或任何其他流服务器时遇到过类似的像素化问题。我尝试使用 RTMPDump 但这不起作用,它永远不会从 Wowza 中提取完整的数据包。

android rtmp rtp video-streaming wowza

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

使用FFMPEG进行RTP流传输

我试图使用ffmpeg使用rtp流.我正在从pulseaudio获取输入并创建一个rtp流.即ffmpeg -re -f pulse -ac 2 -i SOURCE -ac 2 -acodec libmp3lame -re -f rtp rtp://192.168.1.4:70000

这是我得到的sdp输出.

v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 192.168.1.4
a=tool:libavformat 54.20.100^M
m=audio 7000 RTP/AVP 14^M
Run Code Online (Sandbox Code Playgroud)

现在,当我从同一台机器上播放这个SDP时,它就会运行.但是当我尝试从局域网中的其他机器播放它时,它不会运行.例如.使用mplayer我得到 - 无法获取流信息 - 错误.

这里出了什么问题?

或者我应该使用其他服务器进行流式传输?

streaming ffmpeg rtp

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

标签 统计

rtp ×10

ffmpeg ×4

rtsp ×3

c++ ×2

h.264 ×2

video-streaming ×2

android ×1

c ×1

c# ×1

camera ×1

compression ×1

gst-launch ×1

gstreamer ×1

ip ×1

libav ×1

rtmp ×1

sockets ×1

streaming ×1

ubuntu ×1

wowza ×1

x264 ×1