2013-01-22 5 views
0

런타임시 3D 엔진에서 가져온 입력 사진에서 비디오 파일을 렌더링합니다 (실제 그림 파일은 전달하지 않고 RGB 메모리 만 전달합니다). CODEC_ID_H264를 비디오 코덱으로 사용하여 MP4를 출력 할 때 완벽하게 작동합니다.avformat_write_header가 잘못된 헤더를 생성합니다 (결과 MPG가 깨졌습니다)

그러나 CODEC_ID_MPEG2VIDEO를 사용하여 MPG 파일을 만들려고하면 결과 파일이 손상됩니다. 플레이어는 비디오를 올바르게 재생할 수 없으며 그 MPG를 다른 MPG 파일과 연결하고 다른 단계에서 결과 MP4를 변환하려는 경우 결과 .mp4 파일은 두 개의 비디오를 모두 포함하지만 원래 MPG 비디오의 많은 프레임 비디오! 사운드는 잘 작동합니다.) 단순히 건너 뜁니다.

처음에는 MPG -> MP4 변환이 문제라고 생각했지만 비디오 렌더링 엔진에서 가져온 초기 MPG는 이미 깨졌으며 깨진 헤더를 말합니다. 하지만 시스템 헤더 나 시퀀스 헤더가 손상되었는지는 확실하지 않습니다. 아니면 뭔가 다를 수 있습니다. 당신이보기를 원한다면

, 여기에 파일 : 직접 렌더링 엔진 비디오에서 MP4를 만들 때 http://www.file-upload.net/download-7093306/broken.mpg.html

가 다시 동일한 먹싱 코드가 완벽하게 잘 작동, 그래서 나는 확신 입력 데이터, swscale() 등이 정확합니다. 유일한 차이점은 CODEC_ID_H264가 사용되며 몇 가지 추가 변수 (qmin, qmax 등)가 설정되어 있으며 이는 모두 H264에만 해당되므로 영향을 미치지 않아야합니다.

또한 avformat_write_header도 av_write_trailer도 오류를보고하지 않습니다.

VLC 플레이어에서 MPG의 코덱 데이터를 볼 때 FPS, 해상도 및 형식 (640x360, 30fps 및 4 : 2 : 0 YUV로 표시됨)을 표시 할 수 없습니다.

필자는 MinGW 소스에서 컴파일 한 오히려 새로운 (2 ~ 3 개월 어쩌면) FFmpeg 버전을 사용하고 있습니다.

이 문제를 해결하는 방법에 대한 아이디어는 언제든지 환영합니다. 현재, 나는 그 중 오전 :

답변

0

좋아, 문제는 avformat_write_header 아니었지만 AV_NOPTS_VALUE 각 기록 된 비디오 패킷의 PTS 값을 설정하지 않았다.

각 비디오 패킷에 대해이를 설정하면 모든 것이 정상적으로 작동합니다.

나는 특별한 PTS 값을 설정할 필요가 없으므로 AV_NOPTS_VALUE가 기본값이라고 생각했습니다.