2011-09-25 5 views
2

iPhone에서 FFmpeg를 사용하여 H264 스트림을 디코딩하고 있습니다. H264 스트림이 유효하고 SPS/PPS가 VLC, Quicktime, Flash 모두 스트림을 올바르게 디코딩하는 것처럼 정확하다는 것을 알고 있습니다. 아이폰에서 겪고있는 문제는이 그림에서 가장 잘 드러납니다.FFmpeg 디코딩 H264

enter image description here

그것은 움직임 벡터 그려지는 경우 같다. 이 이미지는 이미지에 많은 움직임이있는 동안 찍혔습니다. 장면이 정적 인 경우 모서리에 점이 있습니다. 이것은 항상 예측 프레임과 함께 발생합니다. 뭉툭한 색도 문제입니다.

나는 최적화, asm, 네온 및 다른 많은 조합을 끄는 것과 같은 FFmpeg에 대한 다양한 빌드 설정을 시도해 보았습니다. 아무것도 디코더의 동작을 변경하는 것으로 보이지 않습니다. 나는 또한 HTML, Love and Peace 릴리즈와 최신 GIT 소스와 함께 작품을 시도했다. 어쩌면 설정이 누락되었거나, 실수로 디코더의 일부 디버그 설정을 활성화했을 수 있습니다.

내가 RGBA로 이미지를 변환 할 sws_scale을 사용하고

편집. 나는 동일한 결과를 가진 다양한 다른 픽셀 포맷을 시도했다.

sws_scale(convertCtx, (const uint8_t**)srcFrame->data, srcFrame->linesize, 0, codecCtx->height, dstFrame->data, dstFrame->linesize); 

내 코덱 컨텍스트를 설정할 때 원본 형식으로 PIX_FMT_YUV420P를 사용하고 있습니다.

+0

키 프레임에서 디코딩을 시작 하시겠습니까? –

+0

좋은 질문입니다. 나는 그렇게 믿는다. 그러나 나는 두 번 점검 할 것이다. 키 프레임을 생성하기 위해 인코더를 구성하면 차단 된 이미지 만 얻을 수 있습니다. 예상대로 화살표가 없습니다. –

+0

스트림이 키 프레임으로 시작되고 있음을 확인했습니다. 아마도 FU-A RTP 패킷 어셈블러가 좋지 않을 수도 있지만 다시 확인해 보았습니다. –

답변

3

ffmpeg의 모션 벡터 시각화가 무엇을보고 있습니다. 다음 디버그 플래그 아무것도 설정되어 있지 않은지 확인 :

또한
avctx->debug & FF_DEBUG_VIS_QP 
avctx->debug & FF_DEBUG_VIS_MB_TYPE 
avctx->debug_mv 

, CPU를 사용 H264 비디오를 디코딩하는 것이 훨씬 느리고 전력 효율적인 하드웨어 디코더를 사용하는 것보다 iOS의 적을 수 있음을 유의하십시오.

+0

감사합니다. 나는 이것을 점검 할 것이다. 실시간으로 처리 할 수 ​​있다면 하드웨어 디코더를 사용할 것입니다. NALU는 RTP 패킷에서옵니다. 송수신 사이의 대기 시간을 최소화해야합니다. –

+0

그게 전부 였어. 내 FFmpeg init 코드에이 코드가 아직 있다고 믿을 수 없다. 이것을 지적 해 주셔서 감사합니다. 내가 읽었을 때까지 하루 종일 여기에 앉아 있었던 것 같습니다. 다시 한번 감사드립니다. –

+0

녹화 된 h264 비디오를 재생할 때 너무 빠르게 재생됩니다. 이 문제를 어떻게 해결할 수 있습니까? –