2013-05-03 6 views
1

나는 h.264 비디오 및 aac 오디오가 포함 된 mpeg-ts 스트림을 얻는 라이브 푸시 필터를 작성했습니다. DirectShow 파이프 라인을 설정하고 출력 핀을 구성합니다. h.264 스트림을 렌더링 할 수 있지만 videotestsrc 및 "ball"패턴을 사용하여 gstreamer에서 스트리밍 할 때이 스크린 샷에서 볼 수있는 것처럼 렌더링에 아티팩트가 표시됩니다. the "ball" pattern이 스크린 샷에는 검은 색 바탕에 흰색 점이 하나만 있어야합니다. 두 가지 추가 사항은 애니메이션이 재생 될 때 나타나는 "남은 부분"입니다.H.264 MPEG-TS 스트림에서 Microsoft MPEG-TS 디멀티플렉서 및 H.264 디코더를 사용할 때 왜 이러한 아티팩트가 나타 납니까?

MPEG-2를 스트리밍하고 이에 따라 파이프 라인을 변경하면 패턴이 오류없이 렌더링됩니다. 나는 on msdn을 설명한 설정을 사용하여 H264와 AVC1을 사용하여 명시 적으로 시퀀스 헤더를 제공하는 등의 방법으로 핀을 구성하려고 시도했다. 나는 여전히 같은 종류의 유물을 얻는다.

흥미로운 점 중 하나는 유물이 I 프레임과 동일한 빈도로 표시된다는 것입니다. 우리가 I 프레임 (key-int-max = 1) 만 보내면 아티팩트가 완전히 사라집니다.

또한, I- 프레임 간격이 60 일 때, 즉 2 초마다 오류가 이미지의 상부 절반에 나타나는 것으로 보인다. 두 번째 프레임 (key-int-max = 2)마다 하나의 I- 프레임으로 변경하면 아티팩트는 이미지의 맨 위에있는 좁은 스트립에만 나타납니다. Pipeline

이 예제의 구성은 majortype = MEDIATYPE_Video가, 하위 유형 = MEDIASUBTYPE_H264, formattype =

videotestsrc live-source=true pattern=ball ! video/x-raw-yuv,format=(fourcc)I420,width=1366,height=768,framerate=30/1 ! timeoverlay halign=left valign=bottom shaded-background=true ! x264enc bitrate=4096 tune=zerolatency ! h264parse ! queue ! mux. audiotestsrc wave=ticks volume=0.2 ! voaacenc ! mux. mpegtsmux name=mux ! udpsink host=<ip> port=<port> 

이 파이프 라인의 모습입니다 :

다음 gstreamer를 파이프 라인은 비디오 스트림을 생산 FORMAT_MPEG2 동영상. 특별히 제공되는 시퀀스 헤더가 없습니다.

그래서 이런 종류의 인공물이 일반적인 구성 문제의 증상입니까?

답변

0

MPEG-2 디멀티플렉서는 H.264 콘텐츠를 처리하도록 설계되지 않았습니다. 이것이 이러한 효과가 나타나는 이유입니다.

1

송신 중에 데이터가 손실되어 오류가 발생할 수 있습니다. 문제는 사진이 P 사진보다 높은 비트 전송률을 가지고 있다는 것입니다. 만약 당신이 n/w cbr 있다면 잠재적 으로이 문제를 볼 수 있습니다. 유물이 방법으로 표시하는 이유

: 당신이 느슨한 프레임이 참조 사진이 손실되고 그것이 디코더 때문에 왜곡되어 나타납니다 때 단 1 흰색 공 비디오가 있다면 지금

과 배경의 나머지는 검은 색 마지막 유효 프레임의 프레임을 표시하려고 시도 할 수 있습니다. 마지막 유효 프레임은 화면의 검은 색 나머지 부분이 모두 정상이므로 보이지 않는 부분이 여전히 오류로 표시됩니다.

이 패턴을 다른 패턴으로 바꾸면 더 정확하게 알 수 있습니다.

사진이있는 사진은 참조 사진에 대한 질문이 없으므로 깨끗한 결과물을 얻을 수 있습니다.

전송이 잘되는지 확인하는 한 가지 방법은 출력을 파일로 덤프하고 파일의 반대편에서 파일을 읽는 것입니다. 그게 잘 작동한다면 당신의 전송이 데이터를 잃어 버리는 것을 알 수 있습니다.

또한 하단에 시계가 있기 때문에 프레임에 손실이 있으면 시계도 점프해야합니다.