{"id":213,"date":"2008-10-06T14:41:36","date_gmt":"2008-10-06T06:41:36","guid":{"rendered":"http:\/\/learn-house.idv.tw\/?p=213"},"modified":"2011-11-28T20:45:52","modified_gmt":"2011-11-28T12:45:52","slug":"wincetcpmp-player","status":"publish","type":"post","link":"https:\/\/learn-house.idv.tw\/?p=213","title":{"rendered":"[WinCE]TCPMP Player"},"content":{"rendered":"<p>\u8cc7\u6599\u4f86\u6e90\uff1a<a href=\"http:\/\/tw.myblog.yahoo.com\/wen04011\/article?mid=33&amp;prev=34&amp;next=30&amp;l=f&amp;fid=6\" target=\"_blank\">mimi\u8edf\u9ad4\u8207\u5c08\u6848\u7ba1\u7406\u7684\u4e16\u754cBlog<\/a><\/p>\n<p>\u6700\u8fd1\u90fd\u5728\u7814\u7a76\u5982\u4f55\u624d\u80fd\u5728\u63a5\u6536\u7aef\u7528buffer\u63a7\u5236\u591a\u5a92\u9ad4\u4e32\u6d41\uff0c\u5e73\u53f0\u5df2\u7d93\u63db\u4e86\u5f88\u591a\u7a2e\u5f9e\u6700\u65e9\u7684sunplus spce3200\u63db\u5230google android\u5230\u73fe\u5728\u7684wince<\/p>\n<p>\u4ee5\u4e0b\u5167\u5bb9\u662f\u8f49\u8f09\u7684\uff0c\u4f3c\u4e4e\u5c0dtrace TCPMP source code\u7684\u4eba\u5f88\u6709\u5e6b\u52a9<\/p>\n<p><!--more-->TCPMP\u662f\u4e00\u500b\u529f\u80fd\u5f37\u5927\u958b\u653e\u5f0f\u7684\u958b\u6e90\u591a\u5a92\u9ad4\u64ad\u653e\u5668\uff0c\u64ad\u653e\u5668\u4e3b\u8981\u7531\u6838\u5fc3\u6846\u67b6\u6a21\u584a\uff08common\u5de5\u7a0b\uff09\u548c\u89e3\u78bc\u5668\u5206\u96e2\u5668\u63d2\u4ef6\u7d44\u6210\u3002<\/p>\n<p>TCPMP\u7684\u63d2\u4ef6\u975e\u5e38\u591a\uff0c\u3001libmad\u6211\u5011\u806f\u5408\u5e7e\u500b\u6700\u5e38\u7528\u7684\u63d2\u4ef6\uff08ffmpeg\u3001splitter\uff09\u4f86\u8aaa\u660e\uff0c\u5176\u4e2dinterface\u63d2\u4ef6\u5be6\u73feTCPMP\u7684\u754c\u9762\uff0c\u7531\u65bc\u4ed6\u548c\u5a92\u9ad4\u64ad\u653e\u6c92\u6709\u4ec0\u9ebc\u95dc\u4fc2\uff0c\u9019\u90e8\u5206\u53ef\u4ee5\u5b8c\u5168\u88ab\u66ff\u63db\u6389\uff0c\u66ff\u63db\u6210\u81ea\u5df1\u7684\u754c\u9762\u3002<\/p>\n<p>ffmpeg\u5de5\u7a0b\u662f\u7cfb\u7d71\u4e3b\u8981\u7684\u97f3\u8996\u983b\u89e3\u78bc\u6a21\u584a\uff0cffmpeg\u662f\u4e00\u500b\u96c6\u9304\u88fd\u3001\u8f49\u63db\u3001\u97f3\/\u8996\u983b\u7de8\u78bc\u89e3\u78bc\u529f\u80fd\u70ba\u4e00\u9ad4\u7684\u5b8c\u6574\u7684\u958b\u6e90\u89e3\u6c7a\u65b9\u6848\u3002FFmpeg\u7684\u958b\u767c\u662f\u57fa\u65bcLinux\u64cd\u4f5c\u7cfb\u7d71\uff0c\u4f46\u662f\u53ef\u4ee5\u5728\u5927\u591a\u6578\u64cd\u4f5c\u7cfb\u7d71\u4e2d\u7de8\u8b6f\u548c\u4f7f\u7528\u3002<\/p>\n<p>ffmpeg\u652f\u6301MPEG\u3001DivX\u3001MPEG4\u3001AC3\u3001DV\u3001FLV\u7b4940\u591a\u7a2e\u7de8\u78bc\uff0cAVI\u3001MPEG\u3001OGG\u3001Matroska\u3001ASF\u7b4990\u591a\u7a2e\u89e3\u78bc\u3002<\/p>\n<p>\u5f88\u591a\u958b\u6e90\u64ad\u653e\u5668\u90fd\u7528\u5230\u4e86ffmpeg\u3002\u4f46\u662fffmpeg\u7a0b\u5e8f\u89e3\u78bc\u6548\u7387\u4e0d\u662f\u5f88\u9ad8\uff0c\u7cfb\u7d71\u50c5\u50c5\u4f7f\u7528\u4e86FFmpeg\u7684\u90e8\u5206\u89e3\u78bc\u529f\u80fd\u3002<br \/>\nffmpeg\u4e3b\u76ee\u9304\u4e0b\u4e3b\u8981\u6709libavcodec\u3001libavformat\u548clibavutil\u7b49\u5b50\u76ee\u9304\u3002\u5176\u4e2dlibavcodec\u7528\u65bc\u5b58\u653e\u5404\u500bencode\/decode\u6a21\u584a\uff0clibavformat\u7528\u65bc\u5b58\u653emuxer\/demuxer\u6a21\u584a\uff0clibavutil\u7528\u65bc\u5b58\u653e\u5167\u5b58\u64cd\u4f5c\u7b49\u5e38\u7528\u6a21\u584a\u3002\u672c\u7cfb\u7d71\u7684\u5a92\u9ad4\u6587\u4ef6\u5206\u96e2\u5668\u6709\u55ae\u7368\u7684splitter\u6a21\u584a\u5b8c\u6210\u6240\u4ee5\u4e0d\u9700\u8981libavformat\u5b50\u76ee\u9304\u3002ffmpeg\u76ee\u9304\u4e0blibavcodec\u3001libavutil\u4fdd\u7559\u5b50\u76ee\u9304\u3002<\/p>\n<p>libmad\u5de5\u7a0b\u7528\u65bcMP3\u6587\u4ef6\u89e3\u78bc\uff0c\u8a72\u5de5\u7a0b\u5305\u542b\u5169\u500b\u529f\u80fd\u6a21\u584a\uff0c\u4e00\u500b\u8ca0\u8cac\u89e3\u6790MP3\u6587\u4ef6\u683c\u5f0f\uff0c\u5305\u62ecMPEG1\u97f3\u983b\u6587\u4ef6 (MP1,MP2,MP3,MPA)\uff0c\u8b80\u53d6\u6bcf\u4e00\u5e40\u97f3\u983b\u6578\u64da\uff1b\u53e6\u4e00\u500b\u8ca0\u8cac\u89e3\u78bcMPEG1\u97f3\u983b\u6578\u64da\uff0c\u89e3\u78bc\u4ee3\u78bc\u5728libmad\u5b50\u76ee\u9304\u4e2d\u3002<br \/>\nlibmad\u662f\u4e00\u500b\u958b\u6e90\u7684\u9ad8\u7cbe\u5ea6 MPEG1\u97f3\u983b\u89e3\u78bc\u5eab\uff0c\u652f\u6301 MPEG-1\uff08Layer I, Layer II \u548c LayerIII\uff0c\u4e5f\u5c31\u662fMP3\uff09\u3002libmad\u63d0\u4f9b 24-bit \u7684 PCM \u8f38\u51fa\uff0c\u5b8c\u5168\u662f\u5b9a\u9ede\u8a08\u7b97\uff0c\u975e\u5e38\u9069\u5408\u6c92\u6709\u6d6e\u9ede\u652f\u6301\u7684\u5e73\u53f0\u4e0a\u4f7f\u7528\u3002\u4f7f\u7528 libmad \u63d0\u4f9b\u7684\u4e00\u7cfb\u5217API\uff0c\u5c31\u53ef\u4ee5\u975e\u5e38\u7c21\u55ae\u5730\u5be6\u73fe MP3 \u6578\u64da\u89e3\u78bc\u5de5\u4f5c\u3002\u5728 libmad \u7684\u6e90\u4ee3\u78bc\u6587\u4ef6\u76ee\u9304\u4e0b\u7684 mad.h\u6587\u4ef6\u4e2d\uff0c\u53ef\u4ee5\u770b\u5230\u7d55\u5927\u90e8\u5206\u8a72\u5eab\u7684\u6578\u64da\u7d50\u69cb\u548c API\u7b49\u3002libmad\u662f\u7528\u7684fixed-integer\uff0c\u901a\u904e\u6574\u6578\u6a21\u64ec\u5c0f\u6578\u8a08\u7b97\u7684\uff0c\u7cbe\u5ea6\u53ea\u80fd\u4fdd\u8b49\u5230\u5c0f\u6578\u9ede\u5f8c\u7b2c9\u4f4d\uff08\u5927\u65bc0\u7684\u6700\u5c0f\u503c0.00000000372529\uff09\uff0c\u96d6\u7136\u89e3\u78bc\u7cbe\u5ea6\u6703\u6709\u640d\u5931\uff0c\u4f46\u662f\u6975\u5927\u63d0\u9ad8\u77ad\u89e3\u78bc\u6548\u7387\uff0c\u7279\u5225\u662f\u5728\u5d4c\u5165\u5f0f\u8a2d\u5099\u4e0a\u4e5f\u53ef\u4ee5\u5be6\u73fe\u9ad8\u78bc\u7387MP3\u6587\u4ef6\u7684\u89e3\u78bc\u3002<\/p>\n<p>splitter\u5de5\u7a0b\u7528\u65bc\u89e3\u6790\u591a\u7a2e\u97f3\u8996\u983b\u6587\u4ef6\u683c\u5f0f\u3002\u53ef\u4ee5\u89e3\u6790\u7684\u6587\u4ef6\u683c\u5f0f\u5305\u62ec\uff1aASF\u5a92\u9ad4\u6587\u4ef6\uff0c\u8996\u983b\u6587\u4ef6 (AVI,DIVX)\uff0cWindows\u6ce2\u5f62\u6587\u4ef6(WAV,RMP)\uff0cMPEG\u96fb\u5f71\u6587\u4ef6 (MPEG,MPG,MPV)\uff0cMPEG4\u6587\u4ef6(MP4,3GP,M4A,M4B,K3G)\u3002\u4ee5\u4e0a\u683c\u5f0f\u53ef\u4ee5\u88ab\u89e3\u6790\u4f46\u662f\u6578\u64da\u7de8\u78bc\u4e0d\u4e00\u5b9a\u80fd\u6b63\u78ba\u89e3\u78bc\uff0c\u9700\u8981\u4f9d\u8cf4\u7cfb\u7d71\u7684\u89e3\u78bc\u5668\u3002<\/p>\n<p>common\u5de5\u7a0b\u662f\u6838\u5fc3\u6a21\u584a\uff0c\u662f\u4e00\u500b\u958b\u653e\u7684\u96c6\u6578\u64da\u8f38\u5165\u3001\u8f49\u63db\u3001\u97f3\/\u8996\u983b\u89e3\u78bc\u3001\u4fe1\u865f\u8f38\u51fa\u7b49\u529f\u80fd\u70ba\u4e00\u9ad4\u7684\u5b8c\u6574\u7684\u591a\u5a92\u9ad4\u64ad\u653e\u6846\u67b6\u3002\u9019\u500b\u6846\u67b6\u81ea\u8eab\u4e0d\u5305\u542b\u4efb\u4f55\u7684Decode\u548cSplit\u529f\u80fd\uff0c\u9019\u4e9b\u529f\u80fd\u7531\u63d2\u4ef6\u5be6\u73fe\uff0c\u6838\u5fc3\u6a21\u584a\u4ee5\u4e00\u500b\u6a39\u72c0\u7d50\u69cb\u7ba1\u7406\u6240\u6709\u7684\u529f\u80fd\u6a21\u584a\u548c\u63d2\u4ef6\u6a21\u584a\uff0c\u5be6\u73fe\u6578\u64daRender\u529f\u80fd\uff0c\u5c0d\u8f38\u5165\u3001\u8f49\u63db\u3001\u8f38\u51fa\u6d41\u7a0b\u7684\u63a7\u5236\uff0c\u63a5\u53d7\u64ad\u653e\u904e\u7a0b\u4e2d\u7684\u64cd\u4f5c\u548c\u5c0d\u4e8b\u4ef6\u9032\u884c\u8655\u7406\uff0c\u540c\u6642\u4e5f\u5be6\u73fe\u7cfb\u7d71\u904b\u884c\u4e2d\u7d93\u5e38\u4f7f\u7528\u7684\u4e00\u4e9b\u5171\u7528\u51fd\u6578\uff0c\u6bd4\u5982\u89e3\u78bc\u904e\u7a0b\u4e2d\u7d93\u5e38\u4f7f\u7528\u7684\u9006\u96e2\u6563\u9918\u5f26\u8b8a\u63db\uff0c\u5167\u5b58\u64cd\u4f5c\uff0c\u754c\u9762\u4e2d\u9700\u8981\u4f7f\u7528\u7684\u591a\u8a9e\u8a00\u5b57\u7b26\u8655\u7406\u7b49\u3002common\u5de5\u7a0b\u7684\u4e3b\u76ee\u9304\u4e0b\u4e3b\u8981\u6709\uff1ablit\u3001dyncode\u3001overlay\u3001pcm\u3001softidct\u3001win32\u3001zlib\u7b49\u5b50\u76ee\u9304\u3002\u5176\u4e2dblit\u548coverlay\u5b58\u653e\u662f\u8996\u983b\u4fe1\u865f\u6e32\u67d3\u6a21\u584a\uff0cpcm\u5b58\u653ePCM\u97f3\u983b\u4fe1\u865f\u8f49\u63db\u6a21\u584a\uff0csoftidct\u5b58\u653e\u9006\u96e2\u6563\u9918\u5f26\u8b8a\u63db\u51fd\u6578\uff0cwin32\u5b58\u653e\u5167\u5b58\u64cd\u4f5c\u7b49\u5e38\u7528\u6a21\u584a\uff0cdyncode\u9019\u500b\u76ee\u9304\u7684\u4ee3\u78bc\u6bd4\u8f03\u6666\u6f80\uff0c\u5b58\u653e\u7684\u662f\u7a0b\u5e8f\u904b\u884c\u662f\u52d5\u614b\u751f\u6210\u4ee3\u78bc\u6a21\u584a\uff0c\u91dd\u5c0d\u4e0d\u540c\u7684CPU\u6307\u4ee4\u96c6\uff0cPCM\u6578\u64da\u6578\u64da\u8072\u9053\u548c\u63a1\u6a23\u7387\u4e0d\u540c\uff0c\u8996\u983b\u6e32\u67d3\u6578\u64da\u683c\u5f0f\u548c\u8272\u6df1\u7b49\u4e0d\u540c\u60c5\u6cc1\u52d5\u614b\u751f\u6210\u4e0d\u540c\u7684\u512a\u5316\u4ee3\u78bc\uff08\u9019\u6bb5\u4ee3\u78bc\u975e\u5e38\u7cbe\u5f69\uff0c\u4e0d\u80fd\u4e0d\u8b93\u4eba\u4f69\u670dTCPMP\u4f5c\u8005\u7684\u9ad8\u8d85\u6c34\u5e73\uff09\u3002\u6838\u5fc3\u6a21\u584a\u6709\u4e00\u500b\u4e0a\u4e0b\u6587\u5c0d\u8c61context\uff0c\u8a72\u5c0d\u8c61\u5728\u521d\u59cb\u5316\u51fd\u6578bool_tContext_Init(\u2026\u2026)\u4e2d\u5019\u5275\u5efa\u4e86\u4e00\u500b\u8a72\u5c0d\u8c61\u5be6\u4f8b\u3002\u8a72\u5c0d\u8c61\u5be6\u4f8b\u8a18\u9304\u7ba1\u7406\u5404\u500b\u529f\u80fd\u6a21\u584a\uff0c\u7528\u6236\u754c\u9762\u53ef\u4ee5\u901a\u904e\u8a72\u5c0d\u8c61\u548c\u6838\u5fc3\u6a21\u584a\u4ea4\u4e92\uff0c\u7ba1\u7406\u63a7\u5236\u64ad\u653e\u904e\u7a0b\u3002<br \/>\nContext\u5c0d\u8c61\u8aaa\u660e\uff1a<br \/>\ntypedef struct context<br \/>\n{<br \/>\nint Version;\u00a0\/\/\u7248\u672c\u4fe1\u606f<br \/>\nuint32_t ProgramId;<br \/>\nconst tchar_t* ProgramName;\u00a0\u00a0\/\/\u61c9\u7528\u7a0b\u5e8f\u540d\u7a31<br \/>\nconst tchar_t* ProgramVersion;\u00a0\/\/\u7a0b\u5e8f\u7248\u672c\u865f\uff0c\u5b57\u7b26\u4e32<br \/>\nconst tchar_t* CmdLine;\u00a0\u00a0\u00a0\/\/\u7a0b\u5e8f\u547d\u4ee4\u884c\u4fe1\u606f<br \/>\nvoid* Wnd;\u00a0\u00a0\u00a0\/\/\u8996\u983b\u6e32\u67d3\u7a97\u53e3\u53e5\u67c4<br \/>\nvoid* NodeLock;\u00a0\u00a0\/\/\u529f\u80fd\u6a21\u584a\u8a2a\u554f\u81e8\u754c\u5340\u4e92\u65a5\u8b8a\u91cf<br \/>\narray Node;\u00a0\u00a0\u00a0\/\/\u529f\u80fd\u6a21\u584a\u6578\u64da\u5c0d\u8c61\u6578\u7d44<br \/>\narray NodeClass;\u00a0\u00a0\/\/\u529f\u80fd\u6a21\u584a\u5b9a\u7fa9\u5c0d\u8c61\u6578\u7d44\uff0c\u6309\u7167\u7cfb\u7d71\u908f\u8f2f\u95dc\u4fc2\u7d44\u7e54<br \/>\narray NodeClassPri;\u00a0\/\/\u529f\u80fd\u6a21\u584a\u5b9a\u7fa9\u5c0d\u8c61\u6578\u7d44\uff0c\u6309\u7167\u7cfb\u7d71\u908f\u8f2f\u95dc\u4fc2\u548c\u6a21\u584a\u512a\u5148\u7d1a\u6392\u5217<br \/>\narray NodeModule;\u00a0\u00a0\/\/\u5916\u90e8\u63d2\u4ef6\u6a21\u584a\u6578\u7d44<br \/>\nint LoadModuleNo;\u00a0\u00a0\/\/\u7576\u524d\u6b63\u5728\u88dd\u8f09\u7684\u5916\u90e8\u63d2\u4ef6\u5e8f\u865f<br \/>\nvoid* LoadModule;<br \/>\narray StrTable[2];\u00a0\u00a0\/\/\u5b57\u7b26\u4e32\u8cc7\u6e90\u6578\u7d44\uff0c\u5b57\u7b26\u4e32\u5206\u70ba<br \/>\n\/\/\u7d66\u5e95\u5c64\u4f7f\u7528\u7684\u6a19\u6e96\u5b57\u7b26\u4e32\u8cc7\u6e90\u548c<br \/>\n\/\/\u7d66\u754c\u9762\u4f7f\u7528\u7684\u986f\u793a\u5b57\u7b26\u4e32\u8cc7\u6e90\uff0c\u5169\u7a2e\u8cc7\u6e90\u7528\u5169\u500b\u6578\u7d44\u8868\u793a<br \/>\narray StrBuffer;<br \/>\narray StrModule;\u00a0\u00a0\/\/\u672a\u4f7f\u7528<br \/>\nvoid* StrLock;\u00a0\u00a0\/\/\u5b57\u7b26\u4e32\u6578\u7d44\u8a2a\u554f\u81e8\u754c\u5340\u4e92\u65a5\u8b8a\u91cf<br \/>\nuint32_t Lang;\u00a0\u00a0\u00a0\/\/\u7576\u524d\u4f7f\u7528\u8a9e\u8a00\u6a19\u8a8c<br \/>\nint CodePage;\u00a0\u00a0\u00a0\/\/\u7576\u524d\u4f7f\u7528\u4ee3\u78bc\u9801\u6a19\u8a8c<br \/>\nstruct pcm_soft* PCM;\u00a0\/\/PCM\u97f3\u983b\u4fe1\u865f\u8f49\u63db\u6a21\u584a<br \/>\nstruct blitpack* Blit;\u00a0\/\/\u8996\u983b\u4fe1\u865f\u6e32\u67d3\u6a21\u584a<br \/>\nstruct node* Platform;\u00a0\/\/\u5f97\u5230\u5e73\u53f0\u76f8\u95dc\u4fe1\u606f<br \/>\nstruct node* Advanced;\u00a0\/\/\u5f97\u5230\u64ad\u653e\u6a21\u584a\u9ad8\u7d1a\u4fe1\u606f<br \/>\nstruct node* Player;\u00a0\u00a0\/\/\u64ad\u653e\u63a7\u5236\u6a21\u584a<br \/>\nnotify Error;\u00a0\u00a0\u00a0\/\/\u4fe1\u606f\u932f\u8aa4\u56de\u8abf\u51fd\u6578<br \/>\n\/\/\u5c4f\u5e55\u65cb\u8f49\u4fe1\u606f\uff0c\u5728\u67d0\u4e9b\u7cfb\u7d71\u4e2d\u5c4f\u5e55\u53ef\u4ee5\u65cb\u8f4990\u5ea6\u6216180\u5ea6<br \/>\nint (*HwOrientation)(void*);<br \/>\nvoid *HwOrientationContext;<br \/>\nbool_t TryDynamic;\u00a0\u00a0\/\/\u672a\u4f7f\u7528<br \/>\nint SettingsPage;\u00a0\u00a0\u00a0\/\/\u672a\u4f7f\u7528<br \/>\nsize_t StartUpMemory;\u00a0\u00a0\/\/\u53ef\u4ee5\u4f7f\u7528\u7684\u6709\u6548\u5167\u5b58\u6578<br \/>\nbool_t InHibernate; \u00a0\u00a0\/\/\u662f\u5426\u9032\u5165\u4f11\u7720\u72c0\u614b<br \/>\nbool_t WaitDisable;\u00a0\u00a0\u00a0\/\/\u672a\u4f7f\u7528<br \/>\nint FtrId;\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u672a\u4f7f\u7528<br \/>\nbool_t LowMemory;\u00a0\u00a0\/\/\u53ef\u4ee5\u4f7f\u7528\u7684\u6709\u6548\u5167\u5b58\u6578\u662f\u5426\u5c0f\u65bc\u7cfb\u7d71\u8981\u6c42\u7684\u6700\u4f4e\u8981\u6c42<br \/>\n\/\/\u52d5\u614b\u4ee3\u78bc\u751f\u6210\u4e2d\u9593\u72c0\u614b\u53ca\u6578\u64da<br \/>\nbool_t CodeFailed;<br \/>\nbool_t CodeMoveBack;<br \/>\nbool_t CodeDelaySlot;<br \/>\nvoid* CodeLock;<br \/>\nvoid* CodeInstBegin;<br \/>\nvoid* CodeInstEnd;<br \/>\nint NextCond;<br \/>\nbool_t NextSet;<br \/>\nbool_t NextByte;<br \/>\nbool_t NextHalf;<br \/>\nbool_t NextSign;<\/p>\n<p>uint32_t* FlushCache;\u00a0\u00a0\/\/\u672a\u4f7f\u7528<br \/>\nvoid* CharConvertUTF8;\u00a0\/\/\u672a\u4f7f\u7528<br \/>\nvoid* CharConvertCustom;\u00a0\/\/\u672a\u4f7f\u7528<br \/>\nint CustomCodePage;\u00a0\u00a0\/\/\u672a\u4f7f\u7528<br \/>\nvoid* CharConvertAscii;\u00a0\/\/\u672a\u4f7f\u7528<br \/>\nvoid* Application;<br \/>\nvoid* Logger;\u00a0\u00a0\u00a0\u00a0\/\/\u672a\u4f7f\u7528<br \/>\nbool_t KeepDisplay;\u00a0\u00a0\/\/\u662f\u5426\u4fdd\u6301\u80cc\u5149\u9577\u4eae<br \/>\nint DisableOutOfMemory;\u00a0\/\/\u672a\u4f7f\u7528<\/p>\n<p>} context;<br \/>\n\u6838\u5fc3\u6a21\u584a\u4e0a\u4e0b\u6587\u6307\u91dd\u53ef\u4ee5\u901a\u904e\u5168\u5c40\u51fd\u6578\u7372\u5f97context* Context();<br \/>\n\u521d\u59cb\u5316\u4e0a\u4e0b\u6587\u5c0d\u8c61\u7684\u5168\u5c40\u51fd\u6578 \u662fbool_t Context_Init(const tchar_t* Name,const tchar_t*Version,int Id,const tchar_t* CmdLine,void*Application);\u5176\u4e2dName\u53c3\u6578\u70ba\u61c9\u7528\u7a0b\u5e8f\u540d\u7a31\uff0cVersion\u70ba\u7248\u672c\u4fe1\u606f\u5b57\u7b26\u4e32\u3002<br \/>\n\u91cb\u653e\u4e0a\u4e0b\u6587\u5c0d\u8c61\u7684\u5168\u5c40\u51fd\u6578\u662fvoid Context_Done();\u3002<br \/>\nvoid Context_Wnd(void*);\u51fd\u6578\u5c07\u8996\u983b\u64ad\u653e\u7a97\u53e3\u53e5\u67c4\u521d\u59cb\u5316\u7d66\u8a2d\u5099\u4e0a\u4e0b\u6587\u3002<\/p>\n<p>\u529f\u80fd\u6a21\u584a\u5305\u542b\u5b9a\u7fa9\u5c0d\u8c61\u548c\u6578\u64da\u5c0d\u8c61\uff0c\u5b9a\u7fa9\u5c0d\u8c61\u63cf\u8ff0\u529f\u80fd\u6a21\u584a\u76f8\u4e92\u9593\u7684\u908f\u8f2f\u7d50\u69cb\uff0c\u6578\u64da\u5c0d\u8c61\u8a18\u9304\u6a21\u584a\u5c6c\u6027\u548c\u65b9\u6cd5\u3002<br \/>\n\u6240\u6709\u7684\u529f\u80fd\u6a21\u584a\u7d50\u69cb\u6309\u4e00\u500b\u6a39\u72c0\u7d50\u69cb\u4f86\u7d44\u7e54\uff0c\u7d50\u69cb\u95dc\u4fc2\u5982\u4e0b\uff0cNODE\u662f\u6574\u500b\u7d50\u69cb\u7684\u6839\u7d50\u9ede\uff0c\u5176\u4e0b\u70ba\u5b50\u7bc0\u9ede\uff0c\u7bc0\u9ede\u6309\u985e\u578b\u53ef\u5206\u70ba\u5be6\u7bc0\u9ede\uff0c\u5168\u5c40\u7bc0\u9ede\uff0c\u8a2d\u7f6e\u7bc0\u9ede\uff0c\u62bd\u8c61\u7bc0\u9ede\u3002<br \/>\n#define CF_SIZE\u00a0\u00a0\u00a00x00FFFFFF<br \/>\n#define CF_GLOBAL\u00a0\u00a00x01000000<br \/>\n#define CF_SETTINGS\u00a0\u00a00x02000000<br \/>\n#define CF_ABSTRACT\u00a0\u00a00x08000000<br \/>\n\u62bd\u8c61\u7bc0\u9ede\u6c92\u6709\u5c0d\u61c9\u7684\u5c0d\u8c61\u5be6\u4f8b\uff0c\u985e\u4f3cC++\u7684\u62bd\u8c61\u57fa\u985e\uff0c\u70ba\u4e86\u6309\u7167\u908f\u8f2f\u95dc\u4fc2\u7d44\u7e54\u7cfb\u7d71\u7d50\u69cb\u800c\u5b58\u5728\uff0c\u4f8b\u5982NODE\u5c31\u662f\u62bd\u8c61\u7bc0\u9ede\u3002\u5168\u5c40\u7bc0\u9ede\u5168\u5c40\u53ea\u6709\u4e00\u500b\u5c0d\u8c61\u7684\u5be6\u4f8b\uff0c\u5982\u64ad\u653e\u63a7\u5236\u6a21\u584aPLAYER_ID\u3002\u8a2d\u7f6e\u7bc0\u9ede\u8868\u793a\u548c\u7cfb\u7d71\u64ad\u653e\u8a2d\u7f6e\u76f8\u95dc\uff0c\u6bd4\u5982\u8072\u97f3\u5747\u8861\u5668\u6a21\u584aEQUALIZER_ID\uff0c\u984f\u8272\u63a7\u5236\u6a21\u584aCOLOR_ID\u3002\u5be6\u7bc0\u9ede\u8207\u62bd\u8c61\u7bc0\u9ede\u4e0d\u540c\uff0c\u6307\u53ef\u4ee5\u751f\u6210\u5c0d\u8c61\u5be6\u4f8b\u7684\u7bc0\u9ede\uff0c\u5be6\u7bc0\u9ede\u6c92\u6709\u7279\u6b8a\u6a19\u8b58\uff0c\u4e00\u822c\u4ee5\u6578\u64da\u5c0d\u8c61\u4f54\u7528\u5167\u5b58\u5927\u5c0f\u8868\u793a\u662f\u5426\u662f\u4e00\u500b\u5be6\u7bc0\u9ede\uff0c\u5275\u5efa\u7bc0\u9ede\u6642\u8981\u6839\u64da\u8a72\u4fe1\u606f\u5206\u914d\u5167\u5b58\u55ae\u5143\uff0c\u5be6\u7bc0\u9ede\u4e5f\u53ef\u4ee5\u6709\u5b50\u7bc0\u9ede\uff0c\u4f8b\u5982\uff1aMMS_ID\u7684\u7236\u7bc0\u9ede\u662fHTTP_ID\u3002\u5168\u5c40\u7bc0\u9ede\uff0c\u8a2d\u7f6e\u7bc0\u9ede\u548c\u5be6\u7bc0\u9ede\u53ef\u4ee5\u76f8\u4e92\u7d44\u5408\uff0c\u6bd4\u5982\u64ad\u653e\u63a7\u5236\u7bc0\u9ede\u540c\u6642\u662f\u5168\u5c40\u7bc0\u9ede\uff0c\u8a2d\u7f6e\u7bc0\u9ede\u548c\u5be6\u7bc0\u9ede\u3002\u7bc0\u9ede\u540d\u7a31\u5f8c\u5e36_ID\u7684\u5c31\u662f\u5be6\u7bc0\u9ede\uff0c\u5426\u5247\u5c31\u662f\u62bd\u8c61\u7bc0\u9ede\u3002<\/p>\n<p>NODE \uff08\u6839\u7bc0\u9ede\uff09<br \/>\n\u251c\u2500FLOW \uff08\u6d41\u63a7\u5236\u6a21\u584a\uff09<br \/>\n\u2502\u00a0 \u251c\u2500CODEC \uff08\u89e3\u78bc\u6a21\u584a\uff09<br \/>\n\u2502\u00a0 \u2502\u00a0 \u251c\u2500EQUALIZER_ID \uff08\u8072\u97f3\u5747\u8861\u5668\u6a21\u584a\uff09<br \/>\n\u2502\u00a0 \u2502\u00a0 \u251c\u2500VBUFFER_ID \uff08\u8996\u983b\u7de9\u885d\u6a21\u584a\uff09<br \/>\n\u2502\u00a0 \u2502\u00a0 \u251c\u2500DMO \uff08DirectX Media Object\uff09<br \/>\n\u2502\u00a0 \u2502\u00a0 \u2502\u00a0 \u251c\u2500WMV_ID<br \/>\n\u2502\u00a0 \u2502\u00a0 \u2502\u00a0 \u251c\u2500WMS_ID<br \/>\n\u2502\u00a0 \u2502\u00a0 \u2502\u00a0 \u251c\u2500WMVA_ID<br \/>\n\u2502\u00a0 \u2502\u00a0 \u2502\u00a0 \u251c\u2500WMA_ID<br \/>\n\u2502\u00a0 \u2502\u00a0 \u2502\u00a0 \u2514\u2500WMAV_ID<br \/>\n\u2502\u00a0 \u2502\u00a0 \u251c\u2500FFMPEG VIDEO \uff08FFMpeg \u89e3\u78bc\u6a21\u584a\uff09<br \/>\n\u2502\u00a0 \u2502\u00a0 \u2514\u2500LIBMAD_ID \uff08Libmad Mp3\u89e3\u78bc\u6a21\u584a\uff09<br \/>\n\u2502\u00a0 \u251c\u2500OUT \uff08\u4fe1\u865f\u6e32\u67d3\u6a21\u584a\uff09<br \/>\n\u2502\u00a0 \u2502\u00a0 \u251c\u2500AOUT \uff08\u97f3\u983b\u4fe1\u865f\u6e32\u67d3\uff09<br \/>\n\u2502\u00a0 \u2502\u00a0 \u2502\u00a0 \u251c\u2500NULLAUDIO_ID<br \/>\n\u2502\u00a0 \u2502\u00a0 \u2502\u00a0 \u2514\u2500WAVEOUT_ID<br \/>\n\u2502\u00a0 \u2502\u00a0 \u2514\u2500VOUT \uff08\u8996\u983b\u4fe1\u865f\u6e32\u67d3\uff09<br \/>\n\u2502\u00a0 \u2502\u00a0\u00a0\u00a0\u00a0\u00a0 \u251c\u2500NULLVIDEO_ID<br \/>\n\u2502\u00a0 \u2502\u00a0\u00a0\u00a0\u00a0\u00a0 \u2514\u2500OVERLAY<br \/>\n\u2502\u00a0 \u251c\u2500IDCT \uff08\u96e2\u6563\u9918\u5f26\u89e3\u78bc\u6a21\u584a\uff09<br \/>\n\u2502\u00a0 \u2502\u00a0 \u2514\u2500SOFTIDCT_ID<br \/>\n\u2502\u00a0 \u2514\u2500CODECIDCT\uff08\u96e2\u6563\u9918\u5f26\u89e3\u78bc\u6a21\u584a\uff0c\u51fd\u6578\u6bd4IDCT\u8981\u5c11\uff09<br \/>\n\u2502\u00a0\u00a0\u00a0\u00a0\u00a0 \u2514\u2500MPEG1_ID<br \/>\n\u251c\u2500MEDIA \uff08\u5a92\u9ad4\u6587\u4ef6\u683c\u5f0f\u7de8\u78bc\u89e3\u6790\u6a21\u584a\uff09<br \/>\n\u2502\u00a0 \u251c\u2500FORMAT \uff08\u683c\u5f0f\u89e3\u6790\u6a21\u584a\uff09<br \/>\n\u2502\u00a0 \u2502\u00a0 \u2514\u2500FORMATBASE<br \/>\n\u2502\u00a0 \u2502\u00a0\u00a0\u00a0\u00a0\u00a0 \u251c\u2500RAWAUDIO<br \/>\n\u2502\u00a0 \u2502\u00a0\u00a0\u00a0\u00a0\u00a0 \u2502\u00a0 \u2514\u2500MP3_ID<br \/>\n\u2502\u00a0 \u2502\u00a0\u00a0\u00a0\u00a0\u00a0 \u251c\u2500RAWIMAGE<br \/>\n\u2502\u00a0 \u2502\u00a0\u00a0\u00a0\u00a0\u00a0 \u251c\u2500ASF_ID<br \/>\n\u2502\u00a0 \u2502\u00a0\u00a0\u00a0\u00a0\u00a0 \u251c\u2500AVI_ID<br \/>\n\u2502\u00a0 \u2502\u00a0\u00a0\u00a0\u00a0\u00a0 \u251c\u2500MP4_ID<br \/>\n\u2502\u00a0 \u2502\u00a0\u00a0\u00a0\u00a0\u00a0 \u251c\u2500MPG_ID<br \/>\n\u2502\u00a0 \u2502\u00a0\u00a0\u00a0\u00a0\u00a0 \u251c\u2500NSV_ID<br \/>\n\u2502\u00a0 \u2502\u00a0\u00a0\u00a0\u00a0\u00a0 \u2514\u2500WAV_ID<br \/>\n\u2502\u00a0 \u251c\u2500PLAYLIST \uff08\u64ad\u653e\u5217\u8868\u6a21\u584a\uff09<br \/>\n\u2502\u00a0 \u2502\u00a0 \u251c\u2500ASX_ID<br \/>\n\u2502\u00a0 \u2502\u00a0 \u251c\u2500M3U_ID<br \/>\n\u2502\u00a0 \u2502\u00a0 \u2514\u2500PLS_ID<br \/>\n\u2502\u00a0 \u2514\u2500STREAMPROCESS \uff08\u6578\u64da\u6d41\u8655\u7406\u6a21\u584a\uff09<br \/>\n\u251c\u2500STREAM \uff08\u6578\u64da\u8f38\u5165\u6a21\u584a\uff09<br \/>\n\u2502\u00a0 \u251c\u2500MEMSTREAM_ID \uff08\u5167\u5b58\u6578\u64da\u6d41\u6a21\u584a\uff09<br \/>\n\u2502\u00a0 \u251c\u2500FILE_ID \uff08\u6587\u4ef6IO\u6a21\u584a\uff09<br \/>\n\u2502\u00a0 \u2514\u2500HTTP_ID \uff08\u7db2\u7d61\u6578\u64da\u7372\u53d6\u6a21\u584a\uff09<br \/>\n\u251c\u2500TIMER \uff08\u5b9a\u6642\u5668\u6a21\u584a\uff09<br \/>\n\u2502\u00a0 \u2514\u2500SYSTIMER_ID<br \/>\n\u251c\u2500ASSOCIATION_ID \uff08\u6587\u4ef6\u64f4\u5c55\u540d\u81ea\u52d5\u95dc\u806f\u6a21\u584a\uff09<br \/>\n\u251c\u2500ADVANCED_ID \uff08\u9ad8\u7d1a\u8a2d\u7f6e\u6a21\u584a\uff09<br \/>\n\u251c\u2500COLOR_ID \uff08\u984f\u8272\u63a7\u5236\u6a21\u584a\uff09<br \/>\n\u251c\u2500PLATFORM_ID \uff08\u5e73\u53f0\u4fe1\u606f\u6a21\u584a\uff09<br \/>\n\u251c\u2500XSCALEDRIVER_ID \uff08Intel XScale CPU \u4fe1\u606f\u6a21\u584a\uff09<br \/>\n\u251c\u2500PLAYER_ID \uff08\u64ad\u653e\u63a7\u5236\u6a21\u584a\uff09<br \/>\n\u2514\u2500PLAYER_BUFFER_ID \uff08\u64ad\u653e\u7de9\u885d\u6a21\u584a\uff09<\/p>\n<p>\u7bc0\u9ede\u6a39\u72c0\u7d50\u69cb\u7531\u82e5\u5e72\u500b\u975c\u614b\u5b9a\u7fa9\u5c0d\u8c61(nodedef)\u5be6\u4f8b\u5be6\u73fe\uff0c<br \/>\ntypedef struct nodedef<br \/>\n{<br \/>\nint\u00a0\u00a0\u00a0\u00a0Flags;<br \/>\nint\u00a0\u00a0\u00a0\u00a0Class;<br \/>\nint\u00a0\u00a0\u00a0\u00a0ParentClass;<br \/>\nint\u00a0\u00a0\u00a0\u00a0Priority;<br \/>\nnodecreate\u00a0\u00a0Create;<br \/>\nnodedelete\u00a0\u00a0Delete;<br \/>\n} nodedef;<br \/>\nFlags\u8868\u793a\u7576\u524d\u7bc0\u9ede\u7684\u985e\u578b\uff1a\u62bd\u8c61\u3001\u5be6\u7bc0\u9ede\u3001\u5168\u5c40\u3001\u8a2d\u7f6e\u3002<br \/>\nClass\u8868\u793a\u7576\u524d\u7bc0\u9ede\u7684\u6a19\u8b58\uff0c\u5982MEDIA_CLASS\u6216ASF_ID\u7b49\u7b49\u3002<br \/>\nParentClass\u8868\u793a\u7576\u524d\u7bc0\u9ede\u7684\u7236\u7bc0\u9ede\u6a19\u8b58\uff0c\u5982SYSTIMER_ID\u5c0d\u8c61\u7684\u7236\u7bc0\u9ede\u662fTIMER_CLASS\u3002<br \/>\nPriority\u8868\u793a\u7576\u524d\u7bc0\u9ede\u512a\u5148\u7d1a\u3002<br \/>\nCreate\u548cDelete\u662f\u5169\u500b\u51fd\u6578\u6307\u91dd\uff0c\u8868\u793a\u8a72\u7bc0\u9ede\u7684\u5275\u5efa\u51fd\u6578\u548c\u92b7\u6bc0\u51fd\u6578\u3002<br \/>\n\u5982\u64ad\u653e\u63a7\u5236\u6a21\u584a\u7684\u7d50\u69cb\u5b9a\u7fa9\u662f<br \/>\nstatic const nodedef Player =<br \/>\n{<br \/>\nsizeof(player_base)|CF_GLOBAL|CF_SETTINGS,<br \/>\nPLAYER_ID,<br \/>\nNODE_CLASS,<br \/>\nPRI_MAXIMUM+600,<br \/>\n(nodecreate)Create,<br \/>\n(nodedelete)Delete,<br \/>\n};<\/p>\n<p>\u7d55\u5927\u591a\u6578\u7bc0\u9ede\u90fd\u6709\u4e00\u500b\u5c0d\u61c9\u7684\u6578\u64da\u5c0d\u8c61\uff0c\u8a18\u9304\u8a72\u7bc0\u9ede\u7684\u6578\u64da\u548c\u65b9\u6cd5\uff0c\u6bcf\u4e00\u500b\u5b50\u7bc0\u9ede\u5c0d\u8c61\u90fd\u662f\u4ee5\u7236\u7bc0\u9ede\u5c0d\u8c61\u4f5c\u70ba\u8a72\u7bc0\u9ede\u4e00\u500b\u5143\u7d20\uff0c\u985e\u4f3cC++\u7684\u5c01\u88dd\u7e7c\u627f\u6a5f\u5236\u3002\u5982\u679c\u5b50\u7bc0\u9ede\u7684\u7236\u7bc0\u9ede\u6c92\u6709\u6578\u64da\u5c0d\u8c61\uff0c\u8a72\u7bc0\u9ede\u53ef\u4ee5\u5f9enode\u7bc0\u9ede\u76f4\u63a5\u7e7c\u627f\u3002\u6bcf\u4e00\u500b\u7bc0\u9ede\u90fd\u53ef\u4ee5\u770b\u6210Node\u7bc0\u9ede\u7684\u76f4\u63a5\u6216\u9593\u63a5\u5b50\u7bc0\u9ede\uff0c\u6240\u4ee5\u6240\u6709\u7bc0\u9ede\u982d\u4ee5\u4e00\u500b\u76f8\u540c\u7684node\u7d50\u69cb\u958b\u982d\uff0c\u5b50\u7bc0\u9ede\u53ef\u80fd\u9084\u6709\u81ea\u5df1\u7684\u5c6c\u6027\uff0c\u5728\u7e7c\u627f\u7236\u5c0d\u8c61\u5f8c\u5c31\u662f\u5b50\u7bc0\u9ede\u81ea\u5df1\u7684\u5143\u7d20\u3002<br \/>\ntypedef struct node<br \/>\n{<br \/>\nint\u00a0\u00a0\u00a0Class;<br \/>\nnodeenum\u00a0Enum;<br \/>\nnodeget\u00a0\u00a0Get;<br \/>\nnodeset\u00a0\u00a0Set;<br \/>\n} node;<br \/>\nClass\u8868\u793a\u8a72\u5c0d\u8c61\u7684\u6a19\u8b58\uff0c\u5982PLAYER_ID\u3002<br \/>\nEnum\u662f\u4e00\u500b\u51fd\u6578\u6307\u91dd\uff0c\u6307\u5411\u4e00\u500b\u51fd\u6578\u7528\u65bc\u679a\u8209\u7576\u524d\u7bc0\u9ede\u7684\u5c6c\u6027\u3002<br \/>\nGet\u662f\u4e00\u500b\u51fd\u6578\u6307\u91dd\uff0c\u5f97\u5230\u7576\u524d\u7bc0\u9ede\u67d0\u4e00\u5c6c\u6027\u503c\u3002<br \/>\nSet\u662f\u4e00\u500b\u51fd\u6578\u6307\u91dd\uff0c\u8a2d\u7f6e\u7576\u524d\u7bc0\u9ede\u7684\u67d0\u4e00\u5c6c\u6027\u6578\u503c\u3002<\/p>\n<p>\u7bc0\u9ede\u7684\u5c6c\u6027\u503c\u6578\u64da\u7279\u6027\u5728\u4e00\u500bstatic const datatable xxxParams[] = {\u2026\u2026};\u7684\u975c\u614b\u6578\u7d44\u88e1\u5b9a\u7fa9\u3002<br \/>\ntypedef struct datatable<br \/>\n{<br \/>\nint\u00a0No;<br \/>\nint\u00a0Type;<br \/>\nint Flags;<br \/>\nint Format1;<br \/>\nint\u00a0Format2;<br \/>\n} datatable;<\/p>\n<p>No\u8868\u793a\u5c6c\u6027\u7684\u6a19\u8b58\uff0c\u5982\u64ad\u653e\u63a7\u5236\u6a21\u584a\u7684#define PLAYER_PLAY 0x32 \u5c31\u8868\u793a\u63a7\u5236\u64ad\u653e\u5668\u64ad\u653e\u6216\u66ab\u505c\u3002<br \/>\nType\u8868\u793a\u5c6c\u6027\u7684\u6578\u64da\u985e\u578b\uff0c\u53ef\u7528\u503c\u5728node.h\u4e2d\u5b9a\u7fa9\u3002<br \/>\nFlags\u662f\u5c6c\u6027\u6578\u64da\u7684\u6a19\u8a8c\uff0c\u8868\u793a\u8a72\u6578\u64da\u662f\u4e0d\u662f\u53ea\u8b80\u6578\u64da\uff0c\u662f\u5426\u6709\u6700\u5927\u6700\u5c0f\u503c\u7b49\u7b49\uff0c\u53ef\u7528\u503c\u5728node.h\u4e2d\u5b9a\u7fa9\uff0c\u5982\u679c\u8a72\u6a19\u8a8c\u5305\u542bDF_SETUP\u540c\u6642\u4e0d\u5305\u542bDF_NOSAVE\u548cDF_RDONLY\u5c6c\u6027\uff0c\u8a72\u5c6c\u6027\u6703\u88ab\u8a18\u9304\u5728\u8a3b\u518a\u8868\u4e2d\uff0c\u4e0b\u6b21\u555f\u52d5\u6642\u7528\u8a3b\u518a\u8868\u7684\u6578\u64da\u521d\u59cb\u5316\u8a72\u5c6c\u6027\u3002<br \/>\nFormat1\u548cFormat2\u662f\u53ef\u9078\u6a19\u8a8c\u8207Flags\u914d\u5408\u4f7f\u7528\uff0c\u6bd4\u5982\u5982\u679cFlags\u8868\u793a\u8a72\u5c6c\u6027\u5b58\u5728\u6700\u5927\u6700\u5c0f\u503c\uff0cFormat1\u548cFormat2\u53ef\u4ee5\u5206\u5225\u8868\u793a\u6700\u5c0f\u548c\u6700\u5927\u6578\u503c\u3002<\/p>\n<p>\u5728\u5728\u7cfb\u7d71\u4e0a\u4e0b\u6587\u5c0d\u8c61\u4e2d\u6709\u5169\u500b\u5143\u7d20\u8a18\u9304\u7bc0\u9ede\u4fe1\u606farray Node;\u548carray NodeClass;\uff0carray\u662f\u6578\u7d44\u6578\u64da\u985e\u578b\uff0cNode\u662f\u7bc0\u9ede\u6578\u64da\u5c0d\u8c61\u7684\u6578\u7d44\uff0cNodeClass\u7bc0\u9ede\u5c0d\u8c61\u7684\u6578\u7d44\uff0c\u6309\u7167\u7cfb\u7d71\u908f\u8f2f\u95dc\u4fc2\u7d44\u7e54\u3002<br \/>\n\u5275\u5efa\u7bc0\u9ede\u6642\u50b3\u5165nodedef\u5c0d\u8c61\u5230\u7bc0\u9ede\u5275\u5efa\u51fd\u6578\uff0c\u51fd\u6578\u6703\u6839\u64danodedef\u4fe1\u606f\u751f\u6210\u5c0d\u61c9nodeclass\u5c0d\u8c61\u6dfb\u52a0\u5230NodeClass\u6578\u7d44\uff0c\u540c\u6642\u6839\u64danodedef\u4fe1\u606f\u5206\u914d\u6578\u64da\u5c0d\u8c61\u7684\u5167\u5b58\u7a7a\u9593\u3002\u5728\u8a72\u7bc0\u9ede\u7684Create\u51fd\u6578\u88e1\u9762\u518d\u521d\u59cb\u5316\u8a72\u7bc0\u9ede\u7684\u6578\u64da\u5c0d\u8c61\u3002<\/p>\n<p>\u5728\u6240\u6709\u529f\u80fd\u6a21\u584a\u4e2d\u548c\u754c\u9762\u52a0\u4ea4\u4e92\u7684\u4e3b\u8981\u5c31\u662f\u64ad\u653e\u63a7\u5236\u6a21\u584astruct node* Player;\u4f7f\u7528\u65b9\u6cd5\u5982\u4e0b\uff1a<br \/>\ncontext* p = Context();<br \/>\nplayer* myplayer = NULL;<br \/>\nif(p) myplayer = (player*)(p-&gt;Player);<br \/>\n\u63a7\u5236\u64ad\u653e\u53c3\u6578\u4f7f\u7528Set(void* This,int No,const void* Data,intSize);\u51fd\u6578\uff0c\u7b2c\u4e00\u500b\u53c3\u6578\u662f\u64ad\u653e\u6a21\u584a\u6307\u91dd\uff0c\u7b2c\u4e8c\u500b\u53c3\u6578\u662f\u63a7\u5236\u4ee3\u78bc\uff0c\u5373\u8981\u9032\u884c\u4ec0\u9ebc\u64cd\u4f5c\uff0c\u7b2c\u4e09\u500b\u53c3\u6578\u662f\u9700\u8981\u8ce6\u503c\u7d66\u63a7\u5236\u4ee3\u78bc\u7684\u6578\u503c\uff0c\u6700\u5f8c\u4e00\u500b\u53c3\u6578\u662f\u6240\u8ce6\u6578\u503c\u7684\u4f54\u7528\u5167\u5b58\u7684\u5927\u5c0f\u3002<br \/>\n\u4f8b\u5982\u958b\u59cb\u64ad\u653e\u7684\u4ee3\u78bc\u662f\uff1a<br \/>\nmyplayer-&gt;Set(myplayer,PLAYER_PLAY,1,sizeof(int));<br \/>\nPLAYER_PLAY\u70ba\u63a7\u5236\u4ee3\u78bc\uff0c\u8868\u793a\u7576\u524d\u63a7\u5236\u7684\u662f\u64ad\u653e\u66ab\u505c\u529f\u80fd\uff0c\u6578\u503c\u70ba1\u8868\u793a\u64ad\u653e\u70ba0\u8868\u793a\u66ab\u505c\u3002<br \/>\n\u5f97\u5230\u67d0\u4e00\u63a7\u5236\u5c6c\u6027\u4f7f\u7528Get(void* This,int No,void* Data,int Size);\u51fd\u6578\uff0c\u53c3\u6578\u542b\u7fa9\u548cSet\u51fd\u6578\u76f8\u540c\u3002<br \/>\n\u63a7\u5236\u4ee3\u78bc\u662f\u4e00\u7d44\u5b8f\uff0c\u5b9a\u7fa9\u5728player.h\u6587\u4ef6\u4e2d\u3002\u6bd4\u8f03\u91cd\u8981\u7684\u63a7\u5236\u53c3\u6578\u6709<br \/>\n\/\/ play or pause (bool_t)<br \/>\n#define PLAYER_PLAY\u00a0\u00a0\u00a00x32<br \/>\n\/\/ position in fraction (fraction)<br \/>\n#define PLAYER_PERCENT\u00a0\u00a00x25<br \/>\n\/\/ position in time (tick_t)<br \/>\n#define PLAYER_POSITION\u00a0\u00a00x28<br \/>\n\/\/ current format (format*)<br \/>\n#define PLAYER_FORMAT\u00a0\u00a00x2B<br \/>\n\/\/ current file in playlist (int)<br \/>\n#define PLAYER_LIST_CURRENT\u00a00x2F<br \/>\n\/\/ current file index (suffled) in playlist (int)<br \/>\n#define PLAYER_LIST_CURRIDX\u00a00xA2<br \/>\n\/\/ fullscreen mode (bool_t)<br \/>\n#define PLAYER_FULLSCREEN\u00a00x3E<br \/>\n\/\/ stop<br \/>\n#define PLAYER_STOP\u00a0\u00a0\u00a00xB2<br \/>\n\/\/ skin viewport rectangle (rect)<br \/>\n#define PLAYER_SKIN_VIEWPORT 0x3C<br \/>\n\u64ad\u653e\u63a7\u5236\u6a21\u584a\u6240\u6709\u53ef\u7528\u53c3\u6578\u898bstatic const datatable PlayerParams[]\u7d50\u69cb\u3002<\/p>\n<p>\u6dfb\u52a0\u4e00\u500b\u5a92\u9ad4\u6587\u4ef6\u5230\u64ad\u653e\u6a21\u584a\u4f7f\u7528int PlayerAdd(player* Player,int Index, const tchar_t* Path, const tchar_t* Title);<br \/>\n\u7b2c\u4e00\u500b\u53c3\u6578\u70ba\u64ad\u653e\u6a21\u584a\u6307\u91dd\uff0c\u7b2c\u4e8c\u500b\u53c3\u6578\u662f\u6dfb\u52a0\u5230\u64ad\u653e\u6a21\u584a\u6587\u4ef6\u968a\u5217\u7684\u5e8f\u865f\uff0c\u5982\u679c\u662f\u4f7f\u6587\u4ef6\u6210\u70ba\u7b2c\u4e00\u500b\u6587\u4ef6\u8a72\u53c3\u6578\u8a2d\u70ba0\uff0c\u7b2c\u4e09\u500b\u53c3\u6578\u662f\u5a92\u9ad4\u6587\u4ef6\u7684\u76ee\u9304\u548c\u540d\u7a31\uff0c\u7b2c\u56db\u500b\u53c3\u6578\u70ba\u5a92\u9ad4\u6587\u4ef6\u6a19\u984c\uff0c\u8a72\u53c3\u6578\u53ef\u4ee5\u5ffd\u7565\u3002<\/p>\n<p>\u6838\u5fc3\u6a21\u584a\u4e5f\u7ba1\u7406\u591a\u8a9e\u8a00\u5b57\u7b26\u4e32\uff0c\u4f7f\u7528\u51fd\u6578const tchar_t* LangStr(int Class, int Id);\u548cconsttchar_t* LangStrDef(int Class, intId)\u53ef\u4ee5\u5f97\u5230\u5c0d\u61c9\u5b57\u7b26\u4e32\uff0c\u7cfb\u7d71\u5b57\u7b26\u4e32\u8cc7\u6e90\u6709\u5169\u7a2e\uff0c\u6a19\u6e96\u5b57\u7b26\u4e32\u548c\u7279\u6b8a\u5b57\u7b26\u96c6\u5b57\u7b26\u4e32\u3002\u6a19\u6e96\u5b57\u7b26\u4e32\u8cc7\u6e90\u6587\u4ef6\u662f\u5de5\u7a0b\u76ee\u9304\u4e0b\u7684lang_std.txt\u6587\u4ef6\uff0c\u8a72\u6587\u4ef6\u5b57\u7b26\u4e32\u70baASCII\u5b57\u7b26\uff0c\u53ef\u8207\u5176\u4ed6\u4ee3\u78bc\u9801\u5b57\u7b26\u517c\u5bb9\u3002\u8a72\u6587\u4ef6\u8a18\u9304\u7684\u662f\u6838\u5fc3\u6a21\u584a\u904b\u884c\u6642\u9700\u8981\u4f7f\u7528\u7684\u5b57\u7b26\u4e32\uff0cDecode\u548cSplite\u6a21\u584a\u53ef\u4ee5\u8655\u7406\u7684\u7de8\u78bc\u683c\u5f0f\u548c\u6587\u4ef6\u683c\u5f0f\u4e5f\u5728\u9019\u500b\u6587\u4ef6\u4e2d\u8a18\u9304\uff0c\u4f8b\u5982lang_std.txt\u6587\u4ef6\u4e2d\u7684<br \/>\nMP3_0001=audio\/mpeg<br \/>\nMP3_0002=mp1:A;mp2:A;mp3:A;mpa:A<br \/>\nMP3_0200=acodec\/0x0055<br \/>\n\u7d00\u9304\u4e86MP3\u6587\u4ef6\u5206\u96e2\u5668\u5c0d\u61c9\u7684\u6587\u4ef6\u985e\u578b\u3001\u64f4\u5c55\u540d\u548c\u6587\u4ef6\u7279\u5fb5\u78bc\u3002<br \/>\n\u8981\u5f97\u5230\u6a19\u6e96\u5b57\u7b26\u4e32\u4f7f\u7528\u51fd\u6578LangStrDef\uff0c\u7b2c\u4e00\u500b\u53c3\u6578\u8868\u793a\u5b57\u7b26\u985e\u5225\uff0c\u7b2c\u4e8c\u500b\u53c3\u6578\u8868\u793a\u5b57\u7b26ID\u3002\u754c\u9762\u76f8\u95dc\u7684\u662f\u7279\u6b8a\u5b57\u7b26\u96c6\u7684\u5b57\u7b26\u4e32\uff0c\u4f7f\u7528\u51fd\u6578LangStr\uff0c\u7b2c\u4e00\u500b\u53c3\u6578\u8868\u793a\u5b57\u7b26\u985e\u5225\uff0c\u7b2c\u4e8c\u500b\u53c3\u6578\u8868\u793a\u5b57\u7b26ID\u3002\u95dc\u65bc\u5b57\u7b26\u4e32\u8cc7\u6e90\u6587\u4ef6\u7d50\u69cb\u542b\u7fa9\u5c07\u5728\u4ee5\u5f8c\u7684\u6587\u6a94\u4e2d\u8aaa\u660e\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8cc7\u6599\u4f86\u6e90\uff1amimi\u8edf\u9ad4\u8207\u5c08\u6848\u7ba1\u7406\u7684\u4e16\u754cBlog \u6700\u8fd1\u90fd\u5728\u7814\u7a76\u5982\u4f55\u624d\u80fd\u5728\u63a5\u6536\u7aef\u7528buffer\u63a7\u5236\u591a\u5a92\u9ad4\u4e32\u6d41\uff0c\u5e73\u53f0 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-213","post","type-post","status-publish","format-standard","hentry","category-5"],"_links":{"self":[{"href":"https:\/\/learn-house.idv.tw\/index.php?rest_route=\/wp\/v2\/posts\/213"}],"collection":[{"href":"https:\/\/learn-house.idv.tw\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/learn-house.idv.tw\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/learn-house.idv.tw\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/learn-house.idv.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=213"}],"version-history":[{"count":0,"href":"https:\/\/learn-house.idv.tw\/index.php?rest_route=\/wp\/v2\/posts\/213\/revisions"}],"wp:attachment":[{"href":"https:\/\/learn-house.idv.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/learn-house.idv.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=213"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/learn-house.idv.tw\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}