本帖最后由 zxwangyun 于 2012-02-28 10:12:42 编辑

解决方案 »

  1.   

    我VS2005打不开你工程,看代码是GDI写屏的,这个效果估计不行吧
      

  2.   

    应该不是缓冲区的问题,这个问题只是出现在播放窗口大小改变的时候,也就是当窗口大小改变的时候会出现。如果窗口大小合适,就没有问题。格式这个都不影响吧?反正都是解码成rgb数据。
      

  3.   

    VS2008的工程,用GDI输出的。应该也不是刷新的问题,如果是刷新问题的话,至少有些图片是正常的。
      

  4.   

    我现在的方法是通过显示窗口句柄,创建内存dc,通过CreateDIBSection函数创建DIB,然后选入内存DC,再通过ffmpeg将视频帧解码为RGB数据到DIB的数据区域,通过BitBlt将内存dc显示,有什么问题么?DIB和内存指针都是通过判断显示窗口大小有没有改变动态创建的。
      

  5.   

    哎,终于搞定,太不容易了。
    在创建位图的时候位图宽度必须是4的整数倍。否则就出现这样的情况。
    感谢Worcy_kiddy
    (黑泡泡选手)
    的回复。
      

  6.   

    谢谢楼主的无私奉献,经过调试,已经成功,只修订了一行代码即可:
    修改前:
    int CAVPlayer::ScaleFrame(void * pframe)
    {
       //省略...
       int linesize[4] = {m_iWidth*3, 0, 0, 0};
       //省略..
    }
    修改后:---成功
    int CAVPlayer::ScaleFrame(void * pframe)
    {
       //省略...
       int linesize[4] = {(m_iWidth*3+3) &~3, 0, 0, 0};
       //省略..
    }
      

  7.   

    楼主的视频源是rtsp协议的视频流吗??
      

  8.   

    这个只能播放RTSP的?
    可以播放本地本件么?