上个星期做了TCPMP的播放器,音频和图片很容易就搞定了,毕竟做了很多版本了,但在视频播放器上转了很久,总有些视频文件播放时要就不显示,要就花屏.开始以为是开发平台速度引起的(CPU 400M+DSP),后来用别人的播放器又可以正常播放,摸索了很久,终开找到原因了,和大家分享.
TCPMP花屏现象解决方法
现象:
1.完全不能播放,但不是硬件引起的原因
解决方法:设置显示大小时要注意比例,一般为4:3 或 15:9,还有几种,但比例一定要对,要不可能不能正常播放视频文件。
play* VideoPlayer;
#define VIDEO_VIEWPORT_X 130
#define VIDEO_VIEWPORT_Y 22
#define VIDEO_VIEWPORT_HEIGHT 178
#define VIDEO_VIEWPORT_WIDTH 340
rect Viewport;
Viewport.x = VIDEO_VIEWPORT_X;
Viewport.y = VIDEO_VIEWPORT_Y;
Viewport.Height = VIDEO_VIEWPORT_HEIGHT;
Viewport.Width = VIDEO_VIEWPORT_WIDTH;
VideoPlayer->Set(VideoPlayer,PLAYER_SKIN_VIEWPORT,&Viewport,sizeof(rect));
VideoPlayer->Set(VideoPlayer,PLAYER_UPDATEVIDEO,NULL,0);
2.有的视频可以播放,有的视频文件播放时有声音,但是看不见图像,一屏的雪花点或条纹。
解决方法:和视频驱动的缓存方式有关,在TCPMP中有两种缓存方式:帧缓存和GDI缓存.在有如上现象时把帧缓存改成GDI缓存.
play* VideoPlayer;
#define VIDEO_DRIVER_RAWFPS 0
#define VIDEO_DRIVER_GDI 1
#define VIDEO_DRIVER_NOVIDEO 2
//启用GDI缓冲视频驱动
int VideoAccel=0;
VideoPlayer->Set(VideoPlayer,PLAYER_VIDEO_ACCEL,&VideoAccel,sizeof(VideoAccel));
VideoPlayer->Set(VideoPlayer,PLAYER_VOUTPUTID,ARRAYBEGIN(VOutput_Video,int)+VIDEO_DRIVER_GDI,sizeof(int));
(秩名) |