首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >格罗弗。多个pcap到avi

格罗弗。多个pcap到avi
EN

Stack Overflow用户
提问于 2016-09-12 20:22:40
回答 1查看 753关注 0票数 1

我有多个.pcap文件01,pcap.02,...N.pcap,它们包括两个流,Audio-G.711视频-H.264。每个pcap都有~1分钟的流,我需要制作一个.avi。我使用mergecap.exe将pcaps连接到一个大的pcap。

代码语言:javascript
复制
mergecap.exe -F pcap 01.pcap 02.pcap ....N.pcap -w out.pcap

在此之后,我使用gstreamer创建.avi文件

代码语言:javascript
复制
gst-launch-1.0 filesrc location=out.pcap ! tee name=t ! pcapparse dst-ip=192.168.2.55 dst-port=5010 ^
        ! application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96 ^
        ! rtpjitterbuffer ^
        ! rtph264depay ^
        ! h264parse ^
        ! queue^
        ! mux. t. ! pcapparse dst-ip=192.168.2.55 dst-port=4010 ^
        ! application/x-rtp, media=(string)audio, clock-rate=(int)8000, encoding-name=(string)PCMA, channels=(int)1, payload=(int)8 ^
        ! rtpjitterbuffer ^
        ! rtppcmadepay ^
        ! queue ^
        ! mux. avimux name=mux ! filesink location=test.avi

这条管道适用于一口井。当我解析两个.pcaps时,它也是工作的。但是,如果超过2个数据包-> rtpjitterbuffer,则几乎每个视频数据包都会丢失。

..。

代码语言:javascript
复制
    0:00:03.856698538 12812   08E3FD28 WARN         rtpjitterbuffer gstrtpjitterbuffer.c:2163:gst_rtp_jitter_buffer_chain:<rtpjitterbuffer0> Packet #41238 too late as #57525 was already popped, dropping
    0:00:03.861442222 12812   08E3FD28 WARN         rtpjitterbuffer gstrtpjitterbuffer.c:2163:gst_rtp_jitter_buffer_chain:<rtpjitterbuffer0> Packet #41239 too late as #57525 was already popped, dropping
    0:00:03.870865810 12812   08E3FD28 WARN         rtpjitterbuffer gstrtpjitterbuffer.c:2163:gst_rtp_jitter_buffer_chain:<rtpjitterbuffer0> Packet #41240 too late as #57525 was already popped, dropping
    0:00:03.876392403 12812   08E3FD28 WARN         rtpjitterbuffer gstrtpjitterbuffer.c:2163:gst_rtp_jitter_buffer_chain:<rtpjitterbuffer0> Packet #41241 too late as #57525 was already popped, dropping

and continues...
and continues...
and continues...

..。

我试着:

  • 更改rtpjitterbuffer中的延迟
  • 删除rtpjitterbuffer
  • 不要使用发球

你的建议为什么会这样?我提醒你,每样东西都可以达到两便士。不管pcaps 1有2还是5有6,或者.

UPD。就像otopolsky描述的那样,试图使用队列,但仍然没有发挥作用。我在T元素后面排了队。但同样的错误。我认为这是因为两个不同线程中的rtpjitterbuffer在同一个变量中使用(来自主线程?)

也许还有另一种方法使音频和视频通过rtp时间戳与pcap同步?

EN

回答 1

Stack Overflow用户

发布于 2016-09-20 07:08:43

我认为80%的问题是,在处理每个tee分支之前,不要在队列中放置队列。当所有rtpjitterbuffers都在一个线程中时,它们可以彼此锁定。因此,我最好的猜测是,将队列放在pcap解译之后,或者可能放在它之前,以便完全确定:

代码语言:javascript
复制
gst-launch-1.0 filesrc ! tee name=t 
  avimux name=mux ! filesink location=test.avi
  t. ! pcapparse ! x-rtp caps ! queue ! rtpjitterbuffer ! rtph264depay ! h264parse ! mux.
  t. ! pcapparse ! x-rtp caps ! queue ! rtpjitterbuffer ! rtppcmadepay ! mux.
  t. ! pcapparse ! x-rtp caps ! queue ! rtpjitterbuffer ! rtpwhateverelse .. ! mux.

您可以使用队列的位置或放置更多的队列。请记住,队列不仅用于缓冲目的,而且主要用于将处理分离到不同的线程--它编写得很好的这里 --在开始时检查显示线程的好图片。

我希望这是答案。如果没有,那么更新问题或在评论中提问。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39458232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档