日期:2014-05-17  浏览次数:20778 次

C# 已经一个视频的路径,如何获得这个视频的名称,时长,和码率,在线等~谢谢
如   题 所 示~  

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

------解决方案--------------------
这个得用专业的组件去解析吧
------解决方案--------------------
不同的视频文件不同。

以前手工修复过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读还有难度么?