Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ffmpeg 如何使用Windows版本的gstreamer和wireshark获取.pcap文件并从RTP中提取H.264?_Ffmpeg_H.264_Gstreamer_Rtp_Wireshark - Fatal编程技术网

Ffmpeg 如何使用Windows版本的gstreamer和wireshark获取.pcap文件并从RTP中提取H.264?

Ffmpeg 如何使用Windows版本的gstreamer和wireshark获取.pcap文件并从RTP中提取H.264?,ffmpeg,h.264,gstreamer,rtp,wireshark,Ffmpeg,H.264,Gstreamer,Rtp,Wireshark,我有一个pcap文件,其中包含一个带有H.264视频的RTP捕获和带有SDP的SIP捕获。我想能够提取视频从RTP流,并保存到一个文件。(h264video.mkv或类似内容) 我已经开始考虑将gstreamer作为一个可能的解决方案,但是我在对从程序中收到的任何输出进行故障排除时遇到了问题 gst-launch -v filesrc location=testh264.rtp ! application/x-rtp,media=video,clock-rate=90000,p

我有一个pcap文件,其中包含一个带有H.264视频的RTP捕获和带有SDP的SIP捕获。我想能够提取视频从RTP流,并保存到一个文件。(h264video.mkv或类似内容)

我已经开始考虑将gstreamer作为一个可能的解决方案,但是我在对从程序中收到的任何输出进行故障排除时遇到了问题

gst-launch -v     filesrc location=testh264.rtp     
! application/x-rtp,media=video,clock-rate=90000,payload=123,encoding-name=H264     
! rtph264depay                   
! ffdec_h264                     
! xvimagesink

下面是一个我尝试过的示例,但我无法通过rtph264depay,因为我发送的文件格式无效。如何从我的pcap文件中提取h264有效负载,以便与gstreamer/rtph264depay一起使用?

您应该有可用的autovideosink,它将自动为您选择正确的视频接收器。否则,它可能类似于“dshowsink”。在为dshow或directshow对其进行grepping时,请尝试
gst-inspect
,它会告诉您使用什么。

问题是pcap文件不包含原始RTP负载,它以某种方式格式化()。
您可以使用以下方法提取原始数据:


我看到这篇文章很旧,但我也有同样的问题,下面是我的管道(使用gstreamer-1.0):


sprop参数设置了我从发送rtp流的摄像头的SDP文件中获取的数据。

我刚刚尝试了autovideosink,但收到无效的rtp有效负载时出现了此错误,dropping@user1118047然后问题要么是您的CAP、实际管道,要么是pcap捕获中的问题。但是,您的视频接收器不是问题所在。@user1118047另外,请在大写逗号后加空格。此时,我非常确定问题出在我传送到rtph264depay的文件上。看起来我需要确保我发送了正确的信息。我要发送的文件是wireshark在执行“另存为有效负载”时生成的.raw文件,但我感觉文件格式不正确,或者rtph264depay需要更多信息……有没有更简单的方法可以实现这一点?我尝试使用的方法似乎包括提取原始h264有效负载,这将需要我用自己的代码手动剥离RTP头,然后将其发送到depayloader,然后发送到解码器,然后发送到“接收器”,当流到达接收器时会发生什么?我想能够将解码后的视频保存到文件中,我能做到吗?$gst launch。。。正在将管道设置为暂停。。。管道正在预滚。。。错误:来自元素/GstPipeline:pipeline0/GstFileSrc:filesrc0:内部数据流错误。其他调试信息:..\..\..\Source\gstreamer\libs\gst\base\gstbasesrc.c(2507):gst\u base\u src\u loop():/GstPipeline:pipeline0/GstFileSrc:filesrc0:streaming任务暂停,原因未协商(-4)错误:管道不想预滚。正在将管道设置为空。。。释放管道…程序似乎没有通过管道的pcapprase部分。如果在我的管道中删除PCApprase之后的所有内容,我仍然会得到完全相同的错误,这似乎表明PCApprase是问题所在。似乎PCApprase无法解析您的文件。你用什么软件来创建它?你能把文件上传到某个地方并在这里发布链接吗?我刚刚使用了wireshark 1.6.1 38096并保存为.pcap格式。我尝试了一个只包含udp/rtp数据包的文件,还有一个同时包含rtp和sip的文件。我不想共享捕获,因为它包含关于我的大学和网络的机密信息,包括同学的视频。文件中只有udp/rtp数据包,应该没有问题,如果也有sip数据包,您需要通过指定
pcapprase
src port
属性来过滤它们。对不起,不知道如果文件格式正确会出现什么问题,请尝试在gstreamer邮件列表中询问。
$ gst-launch filesrc location=testh264.rtp
    ! pcapparse
    ! application/x-rtp,media=video,clock-rate=90000,payload=123,encoding-name=H264     
    ! rtph264depay ! ffdec_h264
    ! autovideosink
C:\gstreamer\1.0\x86_64\bin>gst-launch-1.0.exe -m -v filesrc location=C:/Work/log.pcap ! pcapparse src-port=7000 caps="application/x-rtp,media=video,payload=96,clock-rate=90000,encoding-name=H264,profile-level-id=4d0029,sprop-parameter-sets=\"Z00AKeKQFoe2BqwYBBuHiRFQ,aO48gA==\"" ! rtph264depay ! video/x-h264, width=740, height=480, framerate=(fraction)15/1 ! avdec_h264 ! avimux ! filesink location=C:/Work/out.avi