解决方案 »
- listview 列首美化
- VB listview 不显示内容 急!!!
- 处理txt文件时遇到的问题!!请高手帮忙呀
- 访问排除
- 用vb作一个向导,帮助用户选择并连接数据源和数据库、选择数据表,并自动生成sql语句
- 遇到水晶报表在工程组中可以正常运行,生成DLL文件后出错,给高分,明日结贴
- SQLSERVER的问题:数据库连接关闭的问题
- 在webbrowser中访问有radio按钮的网页怎样选择radio按钮
- 怎样才能得到打印机的纸张来源???
- To:gameboy999(我心迷茫) 你的Winsock发送文件工程给我一个好吗?
- 怎么样取消加到ListView的ColumnHeader上的图标?
- VB编写的嵌入页面的ACTIVEX控件,有些机器远行正常,有些机器提示"对象不支持此属性或方法"
所以这里不好写代码推荐陆其明写的《Windows Media编程导向》
对WMF SDK讲得很详细
说到底,那些E文资料也只不过是辅助编程而已,
现在遇到的最实际问题,就是在程序里不知道ASF格式的Data对象和Index对象的具体GUID值,
所以无法扩展文件,如果光找一个不懂编程的老外来,他也不会知道的,即使让他去找,可能他连方向都不知道在哪里了,呵呵:)另外有个疑问,是不是一旦扩展某个标签,真的要重写整个文件吗?那不是很慢?
好像看到Header对象里有很多的0字节,不知道是不是也能用起来?
由于不想用WMP,所以那些用SDK的办法好像并不适用吧?还请各位老大指点一下,谢谢!(PS:E文是要学滴,程序现在就要用第。但学习E文是个长期的艰苦的奋斗过程,要以革命烈士为榜样,发扬伟大红军万里长征吃苦耐劳的精神不过,也没见到谁,因为不会开车就不坐车嘛。用起来先,呵呵:)
Microsoft在定义它们的文件结构时,只定义框架,具体数据编码靠解码器来定义
只有装了对应的解码器,才能解出文件中的数据(这就是“就是在程序里不知道ASF格式的Data对象和Index对象的具体GUID值”的由来)
若没有解码器,谁都无法解开文件中的数据所以最正规办法是调用WMF SDK,然后WMF去查解码器,再得到你所需的信息若是想通过识别文件格式的办法
那么得弄明白现在所有的WMF解码器的编码细节
这绝对是单个程序员无法完成的
而且每一年都有大量的新解码器出现及老解码器更新
就算某些OEM版将WMP去掉了
但至少会有WMF SDK、常用解码器
(注意WMF是流媒体播放接口,而不是Windows Media Player)
(WMP是调用WMF实现的,只是做了个界面而已)估计千千静听以前是由于技术不够
用了WMP的库
现在直接用WMF SDK
自然不需要多余的东西了现在的播放软件哪一个是自己写解码器的?
全是调用解码器(只有豪杰解霸的MPEG解码是自己写的)
导致现在播放软件泛滥
也犯不着去解码Data对象吧?现在的实际做法就是把整个Header对象读出来,修改指定的标签后,连同其它未知的子对象再合并Data及Index对象原样写回整个文件。
以前就是这样做的,修改后的标签WMP都能正常使用的。这个办法对WMA问题不大(总是要写入全部文件的)
但要是对付庞大的的WMV 那可就麻烦了,总不见得我把歌曲标题从 "A"改为"AB"就要再次读写全部文件吧?所以,想请问一下,在Header对象中,哪些是最基本、最必须的子对象(如解码器信息等),这样若写入标签长度大于原来时,可仅保留必须的子对象,而用那些非必须的子对象的空间来补充,最重要的目的就是避免重写整个Data对象(毕竟它们总是最大的部分)
因为,偶看见在Data对象前好像总是有大堆大堆的空字节。
如果那些可以归俺用就好了(贪心,嘿嘿)偶对那些什么多媒体数据编码一窍不通,但ASF好在是以对象为基本结构的,偶只需要关心标签所在的Header对象就可以了。
这所有的操作只不过是读写二进制文件而已,根本不需牵涉到什么解码部分。
唯一的问题,就是不知道那些必须的子对象的具体值!所以不能随心所欲的替换它们。要是让俺知道哪些是必须的子对象的话,俺一定编一个ASF净化器,Kill掉那些鬼才知道有什么用的垃圾对象,呵呵:)
不可能全部知道
因为这也可以自定义的
所以极有可能需要变更Data区
//因为,偶看见在Data对象前好像总是有大堆大堆的空字节。
页面对齐,提高缓存效率
//这所有的操作只不过是读写二进制文件而已,根本不需牵涉到什么解码部分。
任何文件都是二进制文件
最底层文件操作都是读取二进制信息
但是,现在的文件格式越来越复杂
特别开始流行开放式文件格式和流媒体格式
它们都存在复杂的索引信息及未知子块
这是需要众多的对象协同合作才能解析文件内容(COM技术带来的“副作用”,只要定义好接口,任何人都可根据该接口实现自己的东西)
也就是说,对象内容层离底层的文件数据层已经很遥远这就像:告诉你CPU各个引脚的电平状态,你能知道现在运行的是什么程序吗?
从CPU工作原理来说,这是可以办到的
但这是超过绝大多数人的能力极限的(其中还有一个很重要的原因是:我们不知道操作系统在指令一级的运行细节)
所以我们一般调用ToolHelp API来枚举进程信息
我只想要做到本主题,现在代码基本已就绪,只等着关键的GUID值或子对象标志了,谢谢!锅已经烧开了,就等着下粥了,现在没空去选种子、种稻、插秧、收割了,看水都烧干了,
请施舍点米吧,谢谢啦!:)偶的做法就是重写整个Header对象,除了我的标签外,删除一切非必须对象,我管他啥劳什子的自定义呢,只为了扩展我的空间,若还是超出Header大小,就截断标签,就这么简单。关键也就一句话,在Header对象里,哪几个关键对象是不能覆盖的?
请问这些对象的标志是多少?如果真的无法知道哪些是关键对象的话,那WMF凭啥知道哪些是必须的呢?
(偶并不以为WMF会认为{141592653589793}这个对象也是必须的吧?:)
WMF读取GUID,再根据该GUID创建COM对象
再访问该COM对象确认是否能播放若没有解码器
那些COM对象自然没有注册
那么创建会失败若解码器发现缺少某些关键区块
那它会设置对象状态
然后WMF检查对象状态时会发现无法播放我以前看过WMA、WMV的文件格式,被它搞晕了
以上观点只是我对WMF的理解,觉得它应该是那样设计的,不敢保证绝对正确
每个ASF文件至少呵呵,也至多只能有一个Header对象其GUID值为:
{75B22630-668E-11CF-A6D9-00AA0062CE6C}
此对象存放着一些非解码数据,如编码器所需版本等等,其中标签信息可能存放在两个地方:
一个是{75B22633-668E-11CF-A6D9-00AA0062CE6C}Content_Description子对象
更常用的是{D2D0A440-E307-11D2-97F0-00A0C95EA850}Extended_Content_Description子对象
至于多媒体数字信号编解码器是存放在{86D15240-311D-11D0-A3A4-00A0C90348F6}子对象中,其中就记录了关键的编码信息等重要数据。现在读写这些对象都没有问题,
我的目标就是不触动Data数据主对象,毕竟相对来说Header对象所占空间较小,
我只要重写整个Header对象就可,想请问各位老大,除了上述几个是必须的子对象外(标签对象虽然是可选的,但俺就是要用的嘛,所以就变成必须的啦)还有哪些是必须的子对象?
键值是多少?(偶不要没用的常数,偶要的是具体的键值!)
我想要的只是覆盖Header中非必须的子对象而已(不会触动到其它如Data对象的)
(我不会也不需要去解码它们的,只是照原样写入而已。)
求购视频会议源代码!
用提供者请电:
[email protected]
ASF也只不过是二进制文件,读写文件谁不会啊。
(还用得着劳烦WMP大驾吗)
问题是,不知道哪个GUID标志不能覆盖啊!难道离开了WMP,ASF文件就变成了量子?成了不确定性?