2016-09-12 9 views
1

나는 여러 개의 .pcap 파일 01.pcap, 02.pcap, ... N.pcap을 가지고 있는데, 이들은 Audio-G.711 Video-H.264 스트림 두 개를 포함합니다. 모든 pcap에는 ~ 1 분의 스트리밍이 있습니다. 그리고 나는 하나의 .avi를 만들어야합니다. mergecap.exe를 사용하여 pcap을 하나의 큰 pcap에 연결합니다. 내가있는 GStreamer를 사용하는 후Gstreamer. avi로 복수 pcap

mergecap.exe -F pcap 01.pcap 02.pcap ....N.pcap -w out.pcap 

는 너무 작동, 난 두 .pcaps을 conatenate 때 .AVI은 .. 잘 하나 PCAP에 대한

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 

이 파이프 라인 작품을 접수 확인합니다. 그러나이 경우 거의 모든 비디오 패킷

을 삭제 rtpjitterbuffer pacaps- 2 개 이상> ...

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를 제거하십시오
  • 티를 사용하지 마십시오

제안 이유가 무엇입니까? 모든 것이 두 개의 pcap까지 작동한다는 것을 상기시킵니다. 상관없이 pcap 1 2 또는 5 6 또는 ...

UPD. 대기열로 놀려고했는데 otopolsky가 설명되었지만 여전히 작동하지 않았습니다. 티 요소 뒤에 큐를 넣습니다. 그러나 같은 오류. 나는 두 개의 다른 스레드에서 rtpjitterbuffer (주 스레드에서 동일한 변수를 사용하기 때문에) 같아요

아마도 RCT TIMESTAMP에 의해 pcap에서 오디오 및 비디오를 동기화하는 또 다른 방법이 있습니까?

답변

1

나는 각 티 브랜치를 처리하기 전에 대기열을 두지 않는 것이 80 %라고 생각합니다. 모든 rtpjitterbuffers가 하나의 스레드에있을 때 서로 잠글 수 있습니다. 그래서 내 추측 바로 pcapparse 후 큐를 넣어 또는 어쩌면 전에 completly 확인하기 위해 :

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. 

당신은 큐의 위치와 플레이 이상의 대기열을 넣을 수 있습니다. 대기열은 버퍼링 용도로만 사용되는 것이 아니라 처리를 다른 스레드 (주로 잘 쓰여진 here으로 작성)와 분리하는 데 사용됩니다. 처음에는 스레드를 묘사하는 멋진 그림을 확인하십시오.

HTH - 나는 그 대답을 희망한다. 그렇지 않다면 질문을 수정하거나 의견을 묻는다.