如   题 所 示~  

解决方案 »

  1.   

    你在后台调用dll了么,还是你直接用的madie player这个播放控件
      

  2.   

    不同的视频文件不同。以前手工修复过avi文件,结合自己的经验和你说说。参考:http://blog.csdn.net/happydeer/article/details/8775
    你需要准备一个十六进制编辑器和一个avi文件,对照着看。因为你一个一个字节去数很麻烦,简单地,你可以找"avih"这几个字节作为相对起始位置。typedef struct _avimainheader {
        FOURCC fcc;   // 必须为‘avih’
        DWORD  cb;    // 本数据结构的大小,不包括最初的8个字节(fcc和cb两个域)
        DWORD  dwMicroSecPerFrame;   // 视频帧间隔时间(以毫秒为单位)
        DWORD  dwMaxBytesPerSec;     // 这个AVI文件的最大数据率
        DWORD  dwPaddingGranularity; // 数据填充的粒度
        DWORD  dwFlags;         // AVI文件的全局标记,比如是否含有索引块等
        DWORD  dwTotalFrames;   // 总帧数
        DWORD  dwInitialFrames; // 为交互格式指定初始帧数(非交互格式应该指定为0)
        DWORD  dwStreams;       // 本文件包含的流的个数
        DWORD  dwSuggestedBufferSize; // 建议读取本文件的缓存大小(应能容纳最大的块)
        DWORD  dwWidth;         // 视频图像的宽(以像素为单位)
        DWORD  dwHeight;        // 视频图像的高(以像素为单位)
        DWORD  dwReserved[4];   // 保留
    } AVIMAINHEADER;
    每个dword就是4个字节(一般编辑器会一个字节2位16进制编码为一组地显示)
    从avih算起,5~9字节是视频帧间隔时间,21~25字节是总帧数,两者相乘再除以1000就是时长(秒)。码率这个不好算,因为视频一般都不是固定的码率,但是你用总文件大小和总帧数除,可以得到平均码率。原理知道了,自己写一个程序用Stream读还有难度么?
      

  3.   

    后台调用dll了,可是获得的是空对象,不知道是为什么~所以才在这里问的 - -  谢谢啊
      

  4.   

    frd = new FileRefDone(CB_FileRefDone);
                class.接口;
                GC.KeepAlive(frd);            //打开文件
                class.打开文件接口;
                //设置Overlay模式,此模式下只能有一路播放器可得到显卡支持,使用Overlay画面和进行缩放
                class.overlay接口;            //获取视频总时长
                dwMaxFileTime = 接口;
                if (dwMaxFileTime == 0)
                    return;
                //获取视频总帧数
                dwTotalFrames = class.接口;            bOpen = true;            //播放
                Play();上面的接口是你所调用的dll之中的接口程序不一样接口也不一样对照着你那个程序的接口看看