转载时请注明出处和作者联系方式:http://blog.csdn.net/mimepp
作者联系方式:YU TAO <yut616 at sohu dot com>
wma文件的metadata和picture
在MS提供的asf_specification.doc中有关于asf文件的格式信息的内容。
在header object中含有总30 bytes的描述信息,如
Field name | Field type | Size (bits) |
Object ID | GUID | 128 |
Object Size | QWORD | 64 |
Number of Header Objects | DWORD | 32 |
Reserved1 | BYTE | 8 |
Reserved2 | BYTE | 8 |
然后在header中,会有很多个header object,如Content Description Object和Extended Content Description Object等。
可以在parse header阶段,使用一个结构来保存这些object。
picture的内容是存放在 Extended Content Description Object中。
Field Name | Field Type | Size (bits) |
Descriptor Name Length | WORD | 16 |
Descriptor Name | WCHAR | varies |
Descriptor Value Data Type | WORD | 16 |
Descriptor Value Length | WORD | 16 |
Descriptor Value | See text | varies |
在找到上面的Extended Content Description Object后,再继续查找"WM/Picture"这个内容,然后后面就是如下的结构。
"WM/Picture"即为上面WCHAR的Description name.
typedef struct _WMPicture{ WORD wValueDataType; /* 2 bytes */ WORD wValueLen; /* 2 bytes */ BYTE bPictureType; /* 1 byte */ DWORD dwDataLen; /* 4 bytes */ LPWSTR pwszMIMEType; /* string ends with 00 00 */ LPWSTR pwszDescription; /* string end with 00 00 */ BYTE* pbData; } WM_PICTURE;
需要注意的是,wszMIMEType是一个WCHAR的字串,并且是以"00 00"(16进制)结尾,一般的内容为"image/jpeg"这样的内容。 wszDescription也是一个WCHAT的字串,同样是以“00 00”结尾,通常里面不含描述信息,而是直接“00 00”结束。 最后就能从dwDataLen和pbData得到需要的picture了。