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读还有难度么?