当前位置: 首页 > 知识库问答 >
问题:

ffmpeg在RTP上解码h264流时确实很慢

严欣怡
2023-03-14

我需要一些帮助,使ffplay接收和解码一个实时流编码在H264。

我试图在接收Kinect视频帧的计算机a和运行ffplay的计算机B之间建立点对点流,以显示直播。

计算机A(RPI 3)

ffmpeg-f rawvideo-vcodec rawvideo-pix_fmt rgb24-s 640x480-i--线程4-预置超快-codec:v libx2 64-an-f rtp rtp:/192.168.0.100:2000

这就是ffmpeg输出的内容:

out流在10-20帧之间运行。不是很好,但我能接受。

计算机B

ffplay-protocol_whitelist“文件,udp,RTP”-probesize 32-sync ext-i streaming.sdp

streaming.sdp

v=0
0=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 192.168.0.100
t=0 0
a=tool:libavformat 57.56.100
m=video 2000 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1

我得到了流,但大约0.0001 fps,这是非常糟糕的。我的猜测是我在ffplay命令上遗漏了一些东西,因为ffmpeg显示了一个更稳定和更快的流,但我似乎找不到我遗漏的东西。

提前致谢

共有1个答案

彭洲
2023-03-14

问题不在ffmpeg上,而是在我编写的从设备中获取数据的代码上。我多次接收同一帧,并阻止线程捕获数据,使大多数帧都是第一个帧的副本。

 类似资料:
  • 我目前正在尝试从RTP流解析H264数据,然后将其发送到MediaCodec以呈现在Android的SurfaceView上。 但是,我不确定如何: 根据RTP数据包正确构建H264切片 将H264切片组装成切片后发送到媒体编解码器

  • 我正在尝试获取关于h264位流中帧的信息。特别是宏块的运动矢量。我想,我不得不为它使用ffmpeg代码,但它真的很庞大,很难理解。那么,有没有人可以给我一些从h264流的单帧原始数据中进行部分解码的技巧或Exapms? 谢谢你。

  • 我可以看到视频播放在我的TextureView,但它是相当腐败。我已经验证了我正在以正确的顺序接收完整的数据包。我已经能够正确解析RTP头。我相信我的问题与SPS和PPS以及MediaCodec有关。 正如您所看到的,我没有从我的视频流中为MediaFormat提供SPS和PPS,而是使用了一个internet示例中的硬编码集。我试图找到解释如何从数据包中提取SPS和PPS的源,但没有找到任何东西

  • 我正在尝试用android低级媒体API实时解码h264 nals。 每个nal都包含一个完整的帧,所以我希望在用我的nal提供输入并调用之后,它会“立即”(当然有一个litle延迟)显示我的帧,但它没有显示。我看到了第一个帧,出列器返回第一个缓冲区,只有在将第二个缓冲区馈送给解码器之后才返回第一个缓冲区,此时该缓冲区应该呈现第二个帧。帧编码时预置为x264,因此没有B帧等。 我想可能有一种方法可

  • 我正在尝试解码h264现场流从WIFI摄像头的madiacodec在Galaxy S3,视频播放还可以,但似乎mediacode低电平总是缓冲1秒的视频帧,一个新的帧可以解码只有一个新的传入NAL单元。这会导致大约1秒的延迟。 调用时,我可以从logcat看到分配了22个缓冲区, 我可以看到大约16个NAL单元需要推入解码器才能得到任何帧。 我的问题是为什么这个视频缓冲?如果这是问题所在,我可以尝

  • 我正在为android编写一个rtp视频流,它从android本地套接字读取h264编码的数据并将其打包。问题是我做到了,但我在客户端(Voip)中不断收到黑帧。 通信方式如下:Android- 有几件事我还不明白: 1) Android的mediarecorder给了我一个原始的h264流,我怎么知道NAL何时根据该流开始/结束?它没有任何0x000001模式,但它有一个0x0000(我假设它是