ä¸ç´ä»¥æ¥, å¨å¤åªä½ææ¾å¨è¿å, å³ä½¿ç®åæ许å¤å¼æºçææ¾å¨é¡¹ç®, ä½è¦åä¸ä¸ªææ¾å¨ä»ç¶æ¯ä»¶é常å°é¾çäº, å¦æå¨windowsä¸ä½ æå¯è½éè¦çæDShow, å¦å¤çè¯, ä½ éè¦å¦ä¹ ä¸å å¼æºé¡¹ç®(æ¯å¦FFmpeg, MPC, VLC, Mplayer), èä¸å¤æ°é½æ¯åºäºlinux, å¨windowsä¸å¦ä¹ èµ·æ¥å¾ä¸å®¹æ, ç¶èè¿äºå¼æºé¡¹ç®å¯¹äºä¸äºå¸æå¿«éå®ç°èªå·±ææ¾å¨, å°±æ¾å¾å¾å°é¾. å æ¤, æå建äºè¿ä¸ªé¡¹ç®, è´åäºä»¥æç®åçæ¹æ³å®ç°èªå·±çææ¾å¨, 并æä¾ä¸ä¸ªå¯ä»¥å¾æ¹ä¾¿ä½¿ç¨çæ¥å£. ç®å, å¨è¿ä¸ªä»£ç ä¸, 主è¦é¾æ¥å°FFmpegæ¥è¿è¡è§£ç , 并å°å ¶æ¹é æä¸ä¸ªéç¨çææ¾å¨æ¡æ¶. å¨è¿ä¸ªæ¡æ¶ä¸è½å¤æ¥ååç§æ°æ®çè¯»å ¥, å¯ä»¥å¾æ¹ä¾¿çå°è£ èªå·±çæ°æ®è¯»å模å, ä¹å¯ä»¥å¾æ¹ä¾¿çå®å¶èªå·±çè§é¢æ¸²æ模ååé³é¢ææ¾æ¨¡å, ä½ åªéè¦åèå ¶ä¸çå®ç°å³å¯. å¦å¤å¨å½åçå®ç°ä¸, å 为个人精åå®å¨æé, æ以åé´äºä¸äºå¼æºé¡¹ç®ç代ç (å¦Mplayer), 并ä¸è¯¥ä»£ç 主è¦åºäºwindowså¹³å°, æ移æ¤å°linuxçå ¶å®å¹³å°çæç®. æ以, æå¸æææåè½åä¸å°è¿ä¸ªé¡¹ç®ä¸ä¸èµ·ç 究åå¦ä¹ , 并å®æè¿ä¸ªç®æ . å¨ https://github.com/Jackarain/avplayer/downloads ä¸æå·²ç»ç¼è¯å¥½çexeå¯ä¾æµè¯, æµè¯å½ä»¤å¦ä¸: avplayer.exe test.mp4 æè avplayer.exe http://edstream.googlecode.com/files/stream.m3u8 æè avplayer.exe gq.flv.torrent gq.flv.torrent æ¯ä»ä¼é ·æ¾çä¸ä¸ªè¶ æ¸ è§é¢æ件åçç§å. æ´ä¸ªé¡¹ç®å为å 个模å: 1. avcore è¿åªæ¯ä¸ä¸ªå è£ ç±», å®ç°windowsä¸ççªå£å建以åæ¶æ¯ååº, æ¯å¦: å³å»æå/å¼å§, åå»æå±å¹å®½ç¾åæ¯seek, F2å ¨å±åæ¢. å¨è¿ä¸ªæ¨¡åä¸, avplayerç±»æ¯å¤é¨æ¥å£ç±», å ·ä½å®ç°å¨player_implç±»ä¸. å¨player_implç±»ä¸, åå§åå模åç»ææéç±ä¸é¢å 个å½æ°å®ç°, void init_file_source(source_context *sc); void init_audio(ao_context *ao); void init_video(vo_context *vo); ä½ å¯ä»¥æ ¹æ®èªå·±çéæ±æ¥ä¿®æ¹è¿äºå½æ°å®ç°. source_contextæ¯ä¸ä¸ªæä¾æ°æ®è®¿é®çç»æ, å å«ä¸äºå½æ°æé, å¦æä½ éè¦éæ°ä»å ¶å®å°æ¹è¯»åæ°æ®è¿æ¥æä¾ç»ææ¾å¨, é£ä¹ä½ å¯ä»¥åç §è¿ä¸ªç»æä½, å®ç°è¿äºå½æ°å¹¶æåå®, å°±å¯ä»¥è·å¾ä»ä½ æå®çå°æ¹è¯»åæ°æ®æ¥è¿è¡ææ¾, è¿éå®ç°äºä¸ä¸ªä»æ件读åæ°æ®ææ¾çdll. ao_contextæ¯ç¨äºææ¾é³é¢çç»æ, åæ ·å å«äºä¸äºå½æ°æé, åªè¦å®ç°è¿äºå½æ°æé, å°±å¯ä»¥æ¹åé³é¢è¾åº, æ¯å¦æé³é¢æ°æ®åå°æ件, è¿éå®ç°äº2ç§æ¹å¼è¾åºé³é¢, ä¸ç§æ¯ä½¿ç¨dsoundæ¥è¾åºé³é¢, å¦ä¸ç§æ¯ä½¿ç¨waveoutæ¥è¾åºé³é¢. vo_contextæ¯ç¨äºæ¸²æè§é¢çç»æ, åçåä¸, éè¦æ³¨æçæ¯render_one_frameçdataæ¯YUV420æ ¼å¼. 2. libav è¿æ¯ä¸ä¸ªåºäºffmpegçææ¾æ¡æ¶, 该æ¡æ¶ä¸å å«è§é¢æ¸²æåé³é¢ææ¾ä»¥åæ°æ®è¯»å, è¥éè¦å¯ä»¥å®ç°ä¸è¿°ç»æä½åå½æ°å³å¯, è¿ä¸ªæ¡æ¶ä¸ä¸»è¦å®æäºä½¿ç¨ffmpeg解ç , 以åé³è§é¢åæ¥, seekæä½å¤ç, 并æä¾ä¸äºåºæ¬çæ§å¶ææ¾å¨çå½æ°(å¨avplay.hä¸å®ä¹). 3. audio æ¯ä¸ä¸ªé³é¢ææ¾è¾åºæ¨¡åå®ç°, 主è¦å®ç°äºao_contextä¸é£å 个å½æ°æé. å¨è¿ä¸ªæ¨¡åä¸å®ç°äº2å¥é³é¢è¾åºdsoundåwaveout. 4. video æ¯ä¸ä¸ªè§é¢æ¸²æ模åçå®ç°, å®ç°äºvo_contextä¸çé£å 个å½æ°æé. å¨è¿ä¸ªæ¨¡åä¸, å®ç°äº3å¥è§é¢æ¸²æè¾åºd3d, ddraw, openglè¿äºæ¹å¼(è¿ægdiæ¹å¼æ¸²æ没ææ·»å å°video_out.hä¸). 5. avplayer æ¯ä¸ä¸ªä½¿ç¨avcoreå®ç°ä¸ä¸ªç®åææ¾å¨ç示è, å¦æè¦å建ä¸ä¸ªææ¾å¨, åªéè¦avplayer.h, ç¶å使ç¨å建ä¸ä¸ªavplayer对象, å°±å¯ä»¥å建ä¸ä¸ªææ¾å¨, å ³äºå¦ä½ä½¿ç¨avcoreçå ·ä½ç»èå¯ä»¥åèavplayer/main.cpp. æºä»£ç : 请使ç¨gitä¸è½½, 以便éæ¶æ´æ°ä»£ç , è¿æ ·åä¹å¯ä»¥æ¹ä¾¿å¨ä½ èªå·±çåæ¯ä¸å¼å, 并æ交补ä¸. $ git clone git://github.com/Jackarain/avplayer.git avplayer æ´æ° $ git pull æå, ä»»ä½æ¹å¼(å æ¬åä¸æéåä¸)ä¿®æ¹æå¼ç¨è¯¥é¡¹ç®çå ¨é¨æé¨åæºç (ædll), 请å¨ä½ ç软件ä¸æ产åææ¡£ä¸å¿ é¡»æ¸ æ¥ç声æå¼ç¨äºè¯¥é¡¹ç®, 并注æurl(https://github.com/Jackarain/avplayer), ä½ å¯ä»¥å·å·çä¸è¿æ ·å, ä½è¿æ ·åæ¯ä»¤äººæ¬£èµçåæ³. æåæ¬ç¨åºä½è ä¸æ¿æ 使ç¨è¯¥ç¨åºæ带æ¥çä»»ä½é®é¢å¹¶æ¥æä¸å解éæ. mail: [email protected]