⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wma文件信息格式分析及代码 - mokemars的专栏 - csdnblog.htm

📁 ASF格式说明
💻 HTM
📖 第 1 页 / 共 4 页
字号:
1;<BR>}<BR>enum metadata_s<BR>{<BR>&nbsp;&nbsp;&nbsp; /* common info 
*/<BR>&nbsp;&nbsp;&nbsp; META_INFO_TITLE=0,<BR>&nbsp;&nbsp;&nbsp; 
META_INFO_AUTHOR,<BR>&nbsp;&nbsp;&nbsp; 
META_INFO_COPYRIGHT,<BR>&nbsp;&nbsp;&nbsp; 
META_INFO_COMMENT,<BR>&nbsp;&nbsp;&nbsp; 
META_INFO_WMFSDKVERSION,<BR>&nbsp;&nbsp;&nbsp; 
META_INFO_WMFSDKNEEDED,<BR>&nbsp;&nbsp;&nbsp; 
META_INFO_ISVBR,<BR>&nbsp;&nbsp;&nbsp; 
META_INFO_WMPROMOTIONURL,<BR>&nbsp;&nbsp;&nbsp; 
META_INFO_WMGENREID,<BR>&nbsp;&nbsp;&nbsp; 
META_INFO_WMTRACK,<BR>&nbsp;&nbsp;&nbsp; 
META_INFO_WMTRACENUMBER,<BR>&nbsp;&nbsp;&nbsp; 
META_INFO_WMYEAR,<BR>&nbsp;&nbsp;&nbsp; 
META_INFO_WMENCODINGTIME,<BR>&nbsp;&nbsp;&nbsp; 
META_INFO_WMGENRE,<BR>&nbsp;&nbsp;&nbsp; 
META_INFO_WMALBUMTITLE,<BR>&nbsp;&nbsp;&nbsp; 
META_INFO_PEAKVALE,<BR>&nbsp;&nbsp;&nbsp; 
META_INFO_AVERAGELEVEL<BR>};<BR>typedef enum metadata_s metadata_t;<BR>static 
char *get_asf_info (struct asf_tags* tags,char *tag)<BR>{<BR>&nbsp;&nbsp;&nbsp; 
char **info = tags-&gt;ext_info;<BR>&nbsp;&nbsp;&nbsp; int 
n;<BR>&nbsp;&nbsp;&nbsp; if (!info || !tag)<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; return NULL;<BR>&nbsp;&nbsp;&nbsp; for (n = 0; info[2*n] != 
NULL ; n++)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if 
(!strcmp (info[2*n], tag))<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; break;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; return 
info[2*n+1] ? strdup (info[2*n+1]) : NULL;<BR>}<BR>char *get_metadata (struct 
asf_tags* tags,metadata_t type)<BR>{<BR>&nbsp;&nbsp;&nbsp; switch 
(type)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 
META_INFO_TITLE:<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 
tags-&gt;title;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; case META_INFO_AUTHOR:<BR>&nbsp; &nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
return tags-&gt;author;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 
META_INFO_COPYRIGHT:<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 
tags-&gt;copyright;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 
META_INFO_COMMENT:<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 
tags-&gt;comment;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 
META_INFO_WMFSDKVERSION:<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 
get_asf_info(tags,"WMFSDKVersion");<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 
META_INFO_WMFSDKNEEDED:<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 
get_asf_info(tags,"WMFSDKNeeded");<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 
META_INFO_ISVBR:<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 
get_asf_info(tags,"IsVBR");<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 
META_INFO_WMPROMOTIONURL:<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 
get_asf_info(tags,"WM/PromotionURL");<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 
META_INFO_WMGENREID:<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 
get_asf_info(tags,"WM/GenreID");<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 
META_INFO_WMTRACK:<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
return get_asf_info(tags,"WM/Track");<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 
META_INFO_WMTRACENUMBER:<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
return get_asf_info(tags,"WM/TrackNumber");<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 
META_INFO_WMYEAR:<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 
get_asf_info(tags,"WM/Year");<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 
META_INFO_WMENCODINGTIME:<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 
get_asf_info(tags,"WM/EncodingTime");<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 
META_INFO_WMGENRE:<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 
get_asf_info(tags,"WM/Genre");<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 
META_INFO_WMALBUMTITLE:<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 
get_asf_info(tags,"WM/AlbumTitle");<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 
META_INFO_PEAKVALE:<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 
get_asf_info(tags,"PeakValue");<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 
META_INFO_AVERAGELEVEL:<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 
get_asf_info(tags,"AverageLevel");<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; }<BR>}<BR>int read_asf_header(char&nbsp; 
*filename,struct asf_tags* tags)<BR>{<BR>&nbsp;&nbsp;&nbsp; int 
hdr_len;<BR>&nbsp;&nbsp;&nbsp; char *hdr = NULL;<BR>&nbsp;&nbsp;&nbsp; int 
pos;<BR>&nbsp;&nbsp;&nbsp; int fd;<BR>&nbsp;&nbsp;&nbsp; char 
buffer[16];<BR>&nbsp;&nbsp;&nbsp; struct stat sb;<BR>&nbsp;&nbsp;&nbsp; 
fd=open(filename,O_RDONLY);<BR>&nbsp;&nbsp;&nbsp; 
if(fd==-1)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
printf("open file error\n");<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 
0;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; 
memset(buffer,0,16);<BR>&nbsp;&nbsp;&nbsp; fstat(fd,&amp;sb); 
/*取得文件大小*/<BR>&nbsp;&nbsp;&nbsp; 
hdr=mmap(NULL,sb.st_size,PROT_READ,MAP_PRIVATE,fd,0);<BR>&nbsp;&nbsp;&nbsp; 
if(hdr== MAP_FAILED) /*判断是否映射成功*/<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; return 0;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
close(fd);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; 
strncpy(buffer,hdr,16);<BR>&nbsp;&nbsp;&nbsp; 
if(strcmp(buffer,asf_file_format_guid))/*根据ASF标志信息判断是否为ASF文件*/<BR>&nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf("file not an asf 
file\n");<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
close(fd);<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
munmap(hdr,sb.st_size);<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 
0;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; 
hdr_len=sb.st_size;<BR>&nbsp;&nbsp;&nbsp; pos = find_asf_guid(hdr, 
asf_content_desc_guid, 0, hdr_len);/*找到标志信息位置*/<BR>&nbsp;&nbsp;&nbsp; if (pos 
&gt;= 0)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
ASF_content_description_t *contenth = (ASF_content_description_t 
*)&amp;hdr[pos];<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; unsigned char 
*string=NULL;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; uint16_t* wstring = 
NULL;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; uint16_t 
len;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pos += 
sizeof(ASF_content_description_t);<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if 
(pos &gt; hdr_len) goto len_err_out;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
//le2me_ASF_content_description_t(contenth);<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; // extract the title<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
if((len = contenth-&gt;title_size) != 0)<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
wstring = (uint16_t*)&amp;hdr[pos];<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; pos += len;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; if (pos &gt; hdr_len) goto len_err_out;<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ((string = get_ucs2str(wstring, 
len)))/*J解析成UTF8*/<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; strcpy(tags-&gt;title, 
string);<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; free(string);<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // extract the author 
<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if((len = contenth-&gt;author_size) != 
0) <BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; wstring = 
(uint16_t*)&amp;hdr[pos];<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; pos += len;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; if (pos &gt; hdr_len) goto len_err_out;<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ((string = get_ucs2str(wstring, 
len)))<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
strcpy(tags-&gt;author, string);<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; free(string);<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if((len = 
contenth-&gt;copyright_size) != 0)<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; wstring = 
(uint16_t*)&amp;hdr[pos];<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; pos += len;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; if (pos &gt; hdr_len) goto len_err_out;<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ((string = get_ucs2str(wstring, 
len)))<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
strcpy(tags-&gt;copyright, string);<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; free(string);<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
}<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // extract the 
comment<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if((len = 
contenth-&gt;comment_size) != 0)<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; wstring = 
(uint16_t*)&amp;hdr[pos];<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; pos += len;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; if (pos &gt; hdr_len) goto len_err_out;<BR>&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ((string = get_ucs2str(wstring, 
len)))<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 
strcpy(tags-&gt;comment, string);<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -