æšæºã®MediaPlayerã³ã³ããŒãã³ãã«ãããã·ãå®è£ ãããšãäžèŠæããããããå€ãã®å©ç¹ããããŸãã ãã®èšäºã§ã¯ããããã©ã®ããã«æ©èœããããããã³ãã®ãããªæè¡ã®éçºã®èŠéãã«ã€ããŠè©³ãã説æããŸãã
é·ãéã ã¡ãã£ã¢ã©ã€ãã©ãªã¢ããªã±ãŒã·ã§ã³çšã®Androidåãã¡ãã£ã¢ãã¬ãŒã€ãŒã®æãæåããå®è£ ãæ¢ããŠããŸããã ExoPlayerããã¹ãããŸããã flvã®å¹³å¡ãªãµããŒãã¯ãããŸããã éçºè ã¯ããã®åœ¢åŒã®ãµããŒããè¿œå ããæéã¯ãªããšèšããŸããã 次ã«ãVitamioã䜿ãå§ããŸããã ãããŠãVitamioã¯æåã¯ã ãããé©åã§ã¯ãªããœãªã¥ãŒã·ã§ã³ã®ããã«èŠããŸãããããã®Crossleéçºè ãšè©±ãããåŸãç§ã¯åœŒããã®å©ããæåŸ ã§ããªãããšãããããŸããã 圌ã¯ãã°ãä¿®æ£ãããäžè¬ã«ãã®ãããžã§ã¯ãã«æºãã£ãŠãã人ã¯ã»ãšãã©ããŸããã ãã°ãå€ãã£ãã®ã§ãæšæºãã¬ãŒã€ãŒã«æ»ããŸããã 圌ã¯ç§ã«æéã§æããã°ãå€ãããã«èŠããŸããã ãã¡ãããExoPlayerãVitamioã»ã©å€ãã®æ©èœã¯ãããŸããã ã ããç§ã¯èªåã§ããããè¿œå ããæ¹æ³ãåŠã³å§ããŸããã
VideoViewã䜿çšãããã«ã¹ã¿ã ãã¬ãŒã€ãŒã¯ã©ã¹ãäœæããŸããã ç§ã¯ãã¹ãŠã®æ©äŒã«ããããã®ã€ãã³ããè¿œå ããŸããã ãã¬ãŒã€ãŒã¯textureViewã«åºã¥ããŠããŸãã ç§ã¯ããã¬ãŒã€ãŒãããã¯ã°ã©ãŠã³ãã§åçããã¢ã¯ãã£ããã£ãåäœæãããšãã«æ¹æ³ãæ¢ããŠããŸããã ããã¯SurfaceView ... TextureViewã§ã¯æ©èœããŸããã§ãã-æ£åžžã«åäœããŸãã ããããåã£ãŠãæ²ã...é³æ¥œãæµããŸãã ãã¬ãŒã€ãŒããµãŒãã¹ã«è»¢éããçç±ãèŠã€ãããŸããã§ããã ãããŠããªãããããŠãã€ã§ããã¹ãŠãããŸãããã çç±ã衚瀺ããããšããã«ããµãŒãã¹ãäœæãããŸãã
ãã¬ãŒã€ãŒã®ãã£ãã·ã¥ãäœæããFTPããåçãããšãã2ã€ã®ç°¡åãªã¿ã¹ã¯ããããŸããã ããã¯ç§ã®ãã¬ãŒã€ãŒã®1人ã®ãŠãŒã¶ãŒããå°ããããŸããã 圌ã¯ãFTPãããã³ã«ããµããŒãããNASããé³æ¥œãèããããšèããŠããŸãã
ããã°ã©ããŒãšããŠãæåã¯ãããã·ãèšè¿°ããå¿ èŠãããããã®ãããã·ãä»ããŠHTTP <> FTPãªã¯ãšã¹ãã®å€æãšããŒã¿è»¢éãæŽçããå¿ èŠãããããšãç解ããŠããŸãã ããã¯ImmortalPlayerãããžã§ã¯ãã§è¡ããŸããã
å°æ¥ããã®ãããã·ã¯VItamioã§äœ¿çšã§ããããã«ãªãïŒãã£ãã·ã¥ã§ã¯ããŸãããŸããããŸããïŒããã¹ãŠã®åœ¢åŒãåçãããã¹ãŠã®ãããã³ã«ããµããŒãããå®å šãªã³ã³ãã€ããŒãååŸã§ããŸãïŒãããã¯ãå§ãããŸããã ããŸããŸãªåœ¢åŒãè¯ãã ãã§ãªããæªãã®ã§ã ãã¬ãŒã€ãŒã¯ãã¡ã€ã³ãã©ãŒããããšããã¹ãŠã§ã¯ãããŸãããããã€ãã®ã»ã«ã³ããªãé£ç¶ããŠãµããŒãããå¿ èŠããããŸãã ããã«ããããŠãŒã¶ãŒã«ãšã£ãŠããã¯ãªãŒã³ã§é«å質ã®çŽ æãåŸãããŸãã ããã«ããã©ãŒãããã®ãµããŒãã¯ããã¬ãŒã€ãŒã¬ãã«ã§ã¯ãªããã·ã¹ãã ã¬ãã«ã®çµã¿èŸŒã¿ã³ãŒããã¯ã§è¡ãå¿ èŠããããŸãã Vitamio-ãªãŒãã£ãªãšãããªãåæããŠããªããšããå€ãã®ãã°ããããããã©ãŒãã³ã¹ãäœäžããapkã¢ããªã±ãŒã·ã§ã³ã®ãµã€ãºã10ã15ã¡ã¬ãã€ãå¢å ããŸãã
äž»ãªæ©èœïŒ
ã¢ã¯ã»ã¹æš©ãå®çŸ©ããŸãã
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WAKE_LOCK" />
Wake_Lock-ããã€ã¹ãã¹ãªãŒãã¢ãŒãã®ãšãã«ãã¬ãŒã€ãŒãåçãåæ¢ããªãããã«ããŸãã
WRITE_EXTERNAL_STORAGE-ãã£ãã·ã¥ãããã€ã¹ã®å€éšã¡ãã£ã¢ã«æžã蟌ã¿ãŸãã
MainActivity.java
proxy = new HttpGetProxy(); proxy.setPaths("/ProxyBuffer", videoUrl, BUFFER_SIZE, NUM_FILES, getActivity().getApplicationContext(), false, ftplogin, ftppass, false); String proxyUrl = proxy.getLocalURL(); textureView.setVideoPath(proxyUrl);
ã¯ã©ã¹ã®æ°ããã€ã³ã¹ã¿ã³ã¹ããããã·å€æ°ã«å²ãåœãŠãŸãã ãããŠããã©ã¡ãŒã¿ãŒãèšå®ããŸãã
proxy.setPathsïŒãã£ãã·ã¥ãä¿åãããã©ã«ããŒãã€ã³ã¿ãŒãããäžã®ãã¡ã€ã«ãžã®ãªã³ã¯ããã£ãã·ã¥ãµã€ãºããã£ãã·ã¥å ã®ãã¡ã€ã«æ°ãã³ã³ããã¹ããåé€ããããã¡ã€ã«ã®åé€ïŒãFTPãã°ã€ã³ãFTPãã¹ã¯ãŒããFTPäºæã¢ãŒãïŒïŒ;
ãã¬ãŒã€ãŒã®ãããã·ãã¹ãååŸããŸãString proxyUrl = proxy.getLocalURLïŒïŒ;
ãã¬ãŒã€ãŒtextureView.setVideoPathïŒproxyUrlïŒãéå§ããŸãã
ãããã·ã¯ãã§ã«è¡proxy = new HttpGetProxyïŒïŒ;ãããéå§ãããŸãã proxy.stopProxyïŒïŒãåæ¢ããã³ãã³ãããããŸãã ãã®ã³ãã³ãã¯ããŒã«ã«ãœã±ãããéããŠããã¬ãŒã€ãŒããã®èŠæ±ãåŸ æ©ããã¹ã¬ãããããã·ã¯çµäºããŸãã ãããŸãã«èšã£ãŠããŸã ç©ãããªæ¹æ³ã¯èŠã€ãã£ãŠããŸããã
èªã¿åãå°çšãããã·ã®äœææ¹æ³ãæšæž¬ããã®ã¯é£ãããããŸããã ã¡ã¢ãªã«ãŒãã«ã¯æžã蟌ãŸããŸããã ããã¯ãŸã å®è£ ãããŠããŸããããBUFFER_SIZEãNUM_FILESã®å€ããŒãã«èšå®ãããšããã¹ãŠã®ãã¡ã€ã«ãåé€ãããŸãã
ãã¬ãŒã€ãŒã®ã¢ã«ãŽãªãºã ïŒ
ãããã·ã®æåã®ããŒãžã§ã³ãäœæããåŸããã¬ãŒã€ãŒã®æ©èœã«åºäŒããŸããã ãããäœã«é¢é£ããŠãããã¯ããããŸãããã倧ããªflacãã¡ã€ã«ã§ã¯åé¡ãçºçããŸãã ãã¬ãŒã€ãŒã¯ãã®çš®é¡ã®ãã¡ã€ã«çšã«å®å šã«èšèšãããŠããããã§ã¯ãªããããåçã®ã¢ã«ãŽãªãºã ã«ãã°ãæ®ã£ãŠããŸãã
éåžžã®åçã¯ã2ã€ã®ã¯ãšãªããå§ãŸããŸãã ãªãç§ã«ã¯ãŸã 誰ãè¬ã§ã¯ãããŸããã ã€ãŸã ãã¬ãŒã€ãŒã¯ãã¡ã€ã«å šäœãèŠæ±ããæåã®50kbã100kbãèªã¿åããæ¥ç¶ããªã»ããããŸãã ãã¡ã€ã«å šäœãããäžåºŠèŠæ±ãããã¡ã€ã«ã®å é ããå床èªã¿åããéå§ããŸãã ããã«ãèŠæ±ã¯éå§ãã€ããšãšãã«è¡ãããŸãã
ç§ã¯2ã€ã®ã¹ããªãŒã ãããã·ãäœæããããšãã2ã€ã®ã¹ããªãŒã ãèªã¿åãããšããŠãããšèããŸãããããã¬ãŒã€ãŒã¯é åºã«2ã€ã®ãªã¯ãšã¹ããåæã«éä¿¡ããããããŸããã§ããã äžè²«ããŠã®ã¿ã ããã«ã圌ã¯æåã®æ¥ç¶ãã»ãŒå³åº§ã«åæããŸãã
ããããã¹ãŠã®åé¡ã§ã¯ãããŸããã å¥åŠãªæ©èœã®å Žåããã¡ã€ã«ã®æåã®éšåã®åŸããã¬ãŒã€ãŒã¯ãã¡ã€ã«ã®çµããã®èªã¿åããéå§ããŸãã 端ã®åã®ãã€ã³ããéžæãã端ãŸã§èªã¿åããŸãã ããšãã°ãæåŸã®200kbã ã©ããã圌ãæåã«èŠã€ããããªãã£ãããäœãããã§ãã¯ããŠããããŒã¿ãæ¢ããŠããŸãã ãã®åŸãæåã«èªã¿ç¶ããŸãã
flacãã¡ã€ã«ã®åé¡ã¯ãå·»ãæ»ãæã®ãããã·é床ãé ããã¢ã«ãŽãªãºã ã貧匱ãªããšã§ãã flacãå·»ãæ»ããšããã¬ãŒã€ãŒã¯ã¹ããªãŒã ã®é©åãªéå§ãæ€çŽ¢ããŸãã ã€ãŸã 圌ã¯ã©ã®ãã€ãããããã¬ã€ãéå§ã§ããŸããã ãããã£ãŠã1ã6åã®ã¯ãšãªãäœæããŸãã çŸæç¹ã§ã¯ãããã€ãã®ã¿ã€ã ã¢ãŠããæå¹ã«ãªã£ãŠããããããã¬ãŒã€ãŒã¯ããã«åäœããŸãããã®ãããã¿ã€ã ã¢ãŠãã1500ããªç§ã§ãœã±ããã®é床ãäžããŸãã...ã¿ã€ã ã¢ãŠããªãã§ã¯ããœã±ããã¯ã¢ã€ãã«æéã§é·æéãã³ã°ãã1-6ãªã¯ãšã¹ãã§ã¯ãªãã1-2ã ããçºçããŸãã ããã«ããããã¬ãŒã€ãŒãã¹ã¿ãŒããèŠã€ããå¯èœæ§ãäœããªããŸãã ãã¬ãŒã€ãŒãå é ãèŠã€ããããªãå ŽåããµããŒããããŠããªã圢åŒã«é¢ãããšã©ãŒãçºçããŸãã ã¿ã€ã ã¢ãŠãã¯ããœã±ããã®ãã³ã°ã®åé¡ãå®å šã«è§£æ±ºããŸããããã¬ãŒã€ãŒã¢ã«ãŽãªãºã ã®åââé¡ã¯è§£æ±ºããŸããã flacãã¡ã€ã«ãå·»ãæ»ããšãã«ãããã·ããªããŠãããã¬ãŒã€ãŒã¯å®æçã«ããµããŒããããŠããªã圢åŒããšãããšã©ãŒãåºããŸãã
ãã§ãã¯æžã¿-ãã¬ãŒã€ãŒã¯ããããã·ã®æç¡ã«ããããããåãæ°ã®ãªã¯ãšã¹ããè¡ããŸãã ãããã·ã䜿çšãããšããªã¯ãšã¹ãã®å®è¡ãå°ãé ããªããŸãã çŽ50ã200ããªç§...ããŸããŸãªå€æãšãœã±ããã®ééã«ãããæè¿ã®ããŒãžã§ã³ã§ã¯æå°åãããŠããŸãã
HTTPãFTPã®ã¢ã«ãŽãªãºã ïŒ
æãæéããããã®ã¯ããœã±ãããŸãã¯ã¹ã¬ãããéããããã®æé ã§ãã ãããã®æé ãããå Žåã«ãã£ãŠã¯ããã©ãŒãã³ã¹ãåäžãããããšãæåŠã§ããŸãã
FTP RETRã³ãã³ãã䜿çšããŠããã¡ã€ã«ãåä¿¡ããŸãã ãã¡ã€ã«è»¢éãæ£ããäžæããã«ã¯ãABORã³ãã³ããå¿ èŠã§ãã ã¯ããããã¯æ£ããããšã§ãã çµå±ã®ãšãããäžéšã®FTPãµãŒããŒã¯æ°ããã³ãã³ããåãå ¥ããããšã§ããã«åäœã§ããŸãã ã€ãŸã ABORã³ãã³ããªã-ããã«RESTãRETRãå®è¡ãããšãRESTã§æå®ããããã€ãããæ¢ã«æ°ãããã¡ã€ã«ãååŸãããŸãã ABORã³ãã³ãã®éä¿¡ã«ã¯çŽ100ããªç§ããããŸã...ããã«ããããããã·ã®å¿«é©æ§ãšé床ãäœäžããŸãã ãã®ããã«ããFTPäºæã¢ãŒãããäœæãããŸããã ãã®ã¢ãŒãã§ã¯ãABORã³ãã³ããéä¿¡ãããŸãã åäœã¢ãŒãã®éžæãã©ã®ããã«èªååããããšããŠããæ©èœããŸããã§ããã ãããã£ãŠãç§ã¯ãããæåã§è¡ããŸããã ã³ãã³ãããªããã°ãABORãæ©èœããã¯ãã§ãã äžæãã代ããã«ãæ°ããæ¿èªãçºçããã ãã§ãã»ãã·ã§ã³ã«åé¡ãããå¯èœæ§ããããŸãã FTPãã°ãç£èŠããå¿ èŠããããŸã-ã»ãšãã©æ¯åèªèšŒãçºçããå Žåã¯ãã¢ãŒããæå¹ã«ããããšããå§ãããŸãã
FTPãµãŒããŒã®èšå®ïŒ
å€ãã®ãã¹ãã¯ãããŸããã§ããã 21ããŒããèš±å¯çšã«ã1000ããŒãïŒãããããã以äžïŒãããŒã¿è»¢éçšã«éããŠããããã·ãã¢ãŒãã§æ£ç¢ºã«åäœããã¯ãã§ãã ãã¡ã€ã¢ãŠã©ãŒã«ã§1000åã®ããŒããéããftpãµãŒããŒã§æå®ããå¿ èŠããããŸãã åæã»ãã·ã§ã³ã®æ°ã¯10ã§ããã»ãã·ã§ã³ã®ã¿ã€ã ã¢ãŠãã¯10åã§ãã æ¥ç¶ã¿ã€ã ã¢ãŠã1åã
HTTPãããã·ã®ã¢ã«ãŽãªãºã ïŒ
æ°åã¯ã¢ã¯ã·ã§ã³ã®ã·ãŒã±ã³ã¹ã瀺ããŸãã
FTPãµãŒããŒã®å Žåãã·ãŒã±ã³ã¹ã¯ãããã«ç°ãªããŸãã ãããã·ã«ã¯ãã€ã³ã¿ãŒããããå©çšã§ããªãå ŽåããµãŒããŒããã®å¿çããªãå Žåã«ãããŒã«ã«ãã¡ã€ã«ããã®èªã¿åãã«åãæ¿ããããã®ã¢ã«ãŽãªãºã ããããŸãã äžéšã®å Žæã§ã¯ãã¢ã«ãŽãªãºã ã¯éåžžã«è€éã§ãã çããã¶ã€ã³ãäœæããããã«ãã§ããéãåªåããŸããã ãŸã äœããæžããããšãã§ãããšæããŸãã
FTPãããã³ã«ãå®è£ ããããã«ãApache Commons Netã©ã€ãã©ãªãŒã䜿çšããŸããã FTPSãFTP over HTTPïŒå®éšçïŒãNNTPãSMTPïŒSïŒãPOP3ïŒSïŒãIMAPïŒSïŒãTelnetãTFTPãFingerãWhoisãrexec / rcmd / rloginãTimeïŒrdateïŒ ïŒããã³æŒéããšã³ãŒãç Žæ£ãNTP / SNTPã
ãªã¢ãŒããµãŒããŒããã®ããŒã¿ã®åä¿¡ãšç¹å®ã®ãã€ãããã®éå§ããµããŒããããã®ã«åºã¥ããŠããã¬ãŒã€ãŒã®ãããã·ãäœæãããã«ãã¡ãã£ã¢ãåçã§ãããšæããŸãã
ãã¡ã€ã«ä¿åã¢ã«ãŽãªãºã ïŒ
æ¹åããå¿ èŠããããŸãããä»ã§ãããŸãæ©èœããŸãã äžçªäžã®è¡ã¯åçŽã§ã-ãã¡ã€ã«å šäœãèããå Žåãå ã®æ¡åŒµåãšååã«ååãå€æŽãããŸãã æ€èšŒã¯ããã¡ã€ã«ãèªã¿åãããæç¹ã§ãã€ãåäœã§æ£ç¢ºã§ãã æ¡åŒµåã§ã¯ãªããã¡ã€ã«åã®ååãå€æŽãããšãããã€ã¹ã®ãã«ãã¡ãã£ã¢ã¹ãã£ããŒã¯ãããäœããã®ãã«ãã¡ãã£ã¢ã§ããããšãèªèããã¹ãã£ã³ãéå§ããŸãã ãŸãããã¡ã€ã«ãçªç¶å£ããå Žåãããã€ã¹ãåèµ·åããåã«100ïŒ ã®ããã»ããµäœ¿çšçãåŸãããŸãã ããããç°ãªãAndroidã·ã¹ãã ã§ã¯äœããç°ãªããŸããã4.4.2ã®ç§ã«ãšã£ãŠã¯ããã§ãã
çŸåšã®åé¡ã¯ããã¬ãŒã€ãŒãèŠæ±ããèªã¿åããã®ã®ã¿ããã£ãã·ã¥ãããããšã§ãã ãã¬ãŒã€ãŒãäœãèªãã§ããªããšãã«ãäœããã®çš®é¡ã®åéãæŽçããŠããã¬ãŒã€ãŒãèŠæ±ããããã«ãã£ã³ãã«ãããŒãããŠé æ»ãªãåæ¢ããªãããã«ããå¿ èŠããããŸãã ãã¬ãŒã€ãŒãã€ã³ã¿ãŒãããããäœãèªã¿åããªãç¬éããã£ããããããšã¯ã§ããŸãããã
GithubïŒ
github.com/master255/ImmortalPlayer
äœæ¥äŸïŒ
play.google.com/store/apps/details?id=com.immortalplayer