
ã¯ããã«
ToxAVã¯ããªãŒãã£ãªçšã®Opusã³ãŒããã¯ãšãããªçšã®VP8 ãããã³ããããlibopus ã©ã€ãã©ãªãšlibvpxã©ã€ãã©ãªã§ã®å®è£ ã«åºã¥ããŠããŸã ã
ToxAV APIã¯ããªãŒãã£ãªã®å ¥åããã³åºå圢åŒãšããŠã16ããããµã³ããªã³ã°ã1ãŸãã¯2ãã£ãã«ã®ãµããŒãã8ã12ã16ã24ã48 KHzã®ãµã³ããªã³ã°åšæ³¢æ°ãåããPCM圢åŒã䜿çšããŸãã 1ã€ã®ããŒã¿ãã¬ãŒã ã®æéã¯ã2.5ã5ã10ã20ã40ããŸãã¯60ããªç§ã§ããå¿ èŠããããŸãïŒopusã³ãŒããã¯ã®èŠä»¶ïŒã
ToxAV APIã¯ããããªã®å ¥åããã³åºå圢åŒãšããŠãYUV420圢åŒïŒIYUVããã³I420ãšãåŒã°ããŸãïŒã®ãã¬ãŒã ã䜿çšããŸããããã¯ããã䜿ãæ £ããRGBè²ç©ºéã«æ¯èŒçç°¡åã«å€æã§ããŸãã
ToxAVã¯ããªãŒãã£ãªããã€ã¹ããããªããã€ã¹ããããŒã¿ããã£ããã£ããããåçãããããæ¹æ³ãæäŸããŸããããããã¯ãã¹ãŠãã¢ããªã±ãŒã·ã§ã³éçºè ã®è£éã«ä»»ãããŠããŸãã ãããã£ãŠãããšãã°ã µToxã¯ã©ã€ã¢ã³ãã¯ããªãŒãã£ãªã®æäœã«OpenALã䜿çšãããããªããã€ã¹ã®æäœã«v4l ïŒvideo4LinuxïŒã䜿çšããŸãã QToxã¯ã©ã€ã¢ã³ãã¯ã FFmpegã䜿çšããŠãããªãåŠçããŸãã PythonïŒä»¥äžã§éæ¥çã«èª¬æããŸãïŒ ã§ã¯ ããªãŒãã£ãªã«PyAudioãããããªã«OpenCVã䜿çšã§ããŸãã
ToxAVã®äžè¬çãªäœæ¥ãµã€ã¯ã«ã¯ã次ã®åœ¢åŒã§é çªã«è¡šãããšãã§ããŸãã
- ToxCoreã«ãŒãã«ã®åæåïŒ ä»¥åã®åºçç©ã§è©³çŽ°ã«èª¬æãããŠããŸãïŒã
- ToxAVãµãã·ã¹ãã ã®åæåïŒ toxav_new ïŒã
- ã€ãã³ãåŠçã®ããã®ã³ãŒã«ããã¯é¢æ°ã®èšå®ïŒ toxav_callback_ * ïŒ-ã€ãã³ããã³ãã©ãŒã¯ã¡ã€ã³ã«ãŒãããåŒã³åºããïŒ4ïŒãã¢ããªã±ãŒã·ã§ã³ã®ã¡ã€ã³ããžãã¯ã¯éåžžãããã«éäžããŸãã
- ã¡ã€ã³ãã¥ãŒãã£ãµã€ã¯ã«ïŒ toxav_iterate ïŒããã³ã€ãã³ãåŠçã
- toxav_iteration_intervalãäžæåæ¢ããåã®æé ã«æ»ããŸãã
ãªããªã Tox APIã®ç¥èãåŸãããã®äž»ãªæ¹æ³ã¯ããœãŒã¹ã³ãŒãïŒCã§èšè¿°ïŒãèªãããšã§ããããã«ãã¬ãŒã³ããŒã·ã§ã³ãåçŽåããããã«ãPythonèšèªã®ã©ãããŒïŒ githubã®pytoxcore ïŒã䜿çšããŸãã ãœãŒã¹ããã©ã€ãã©ãªã®èªå·±ã¢ã»ã³ããªãè¡ããããªã人ã®ããã«ãäžè¬çãªãã£ã¹ããªãã¥ãŒã·ã§ã³çšã®æ¢è£œã®ãã€ããªããã±ãŒãžãžã®ãªã³ã¯ããããŸãã
Pythonã©ãããŒã䜿çšããå Žåã次ã®æ¹æ³ã§ã©ã€ãã©ãªã®ãã«ããååŸã§ããŸãã
$ python >>> from pytoxcore import ToxAV >>> help(ToxAV) class ToxAV(object) | ToxAV object ... | toxav_answer(...) | toxav_answer(friend_number, audio_bit_rate, video_bit_rate) | Accept an incoming call. | If answering fails for any reason, the call will still be pending and it is possible to try and answer it later. Audio and video receiving are both enabled by default. | | toxav_audio_receive_frame_cb(...) | toxav_audio_receive_frame_cb(friend_number, pcm, sample_count, channels, sampling_rate) | This event is triggered when a audio data received. ...
以äžã§ã¯ãAPIãæäœããåã¹ãããã«ã€ããŠããå°ã詳ãã説æããŸãã
ToxAVã®åæå
ToxAVãµãã·ã¹ãã ãåæåããããã«ã以åã«åæåãããToxCoreã«ãŒãã«ã®ã€ã³ã¹ã¿ã³ã¹ãåŒã³åºããã©ã¡ãŒã¿ãŒtoxav_newãšããŠäœ¿çšãããŸãã åäžã®ToxCoreã€ã³ã¹ã¿ã³ã¹ã«å¯ŸããŠäœæã§ããToxAVã€ã³ã¹ã¿ã³ã¹ã¯1ã€ã ãã§ãã Pythonã©ãããŒã§ã¯ãtoxav_newåŒã³åºãã¯ã³ã³ã¹ãã©ã¯ã¿ãŒå ã«é ãããŠãããåæåã¯æ¬¡ã®ããã«ãªããŸãã
from pytoxcore import ToxCore, ToxAV class EchoBot(ToxCore): ... class EchoAVBot(ToxAV): def __init__(self, core): super(EchoAVBot, self).__init__(core) ... bot = EchoBot(options) botav = EchoAVBot(bot)
ToxAVã€ã³ã¹ã¿ã³ã¹ãç Žæ£ããã«ã¯ã toxav_killåŒã³åºãã䜿çšããããPythonã©ãããŒã®ã¯ã©ã¹ã€ã³ã¹ã¿ã³ã¹ãç Žæ£ããŸãããã®å Žåãtoxav_killåŒã³åºãã¯ãã¹ãã©ã¯ã¿ã«é ãããŠããŸãã
ã³ãŒã«ããã¯é¢æ°ãèšå®ãã
Pythonã©ãããŒã§ã¯ããµããŒããããŠããã³ãŒã«ããã¯é¢æ°ãžã®æ¥ç¶ãèªåçã«è¡ãããŸãã ãã³ãã©ãŒèªäœã¯ToxAVã®åå«ã®ã¡ãœããã§ããããµãã£ãã¯ã¹* _cbãæã€ããšãã§ããŸãã ãã¹ãŠã®ãã³ãã©ãŒã§ããã©ã¡ãŒã¿ãŒã®1ã€ã¯friend_number-åæ§ã®ToxCoreã¡ãœããããã®å人ã®æŽæ°èå¥åã§ãã
toxav_call_cbïŒfriend_numberãaudio_enabledãvideo_enabledïŒ -çä¿¡ã³ãŒã«ã åŒæ°ãšããŠãã³ã³ã¿ã¯ãåŽããã®ãªãŒãã£ãªãšãããªããµããŒãããããã®ãã©ã°ãè¿œå ã§æž¡ãããŸãã å°æ¥ããã¥ãŒãããããªãŒãã£ãªãŸãã¯ãããªã¹ããªãŒã ãšã®æ¥è§Šã«ããããããããªã³ã«ãªããã€ãã³ãã«ãã£ãŠã³ãŒã«ã¹ããŒã¿ã¹ãå€æŽãããå¯èœæ§ããããŸãã åŒã³åºãã¯ãåŒã³åºãtoxav_answerã§åä¿¡ããããåŒã³åºãtoxav_call_controlã§æåŠã§ããŸãã
toxav_call_state_cbïŒfriend_numberãstateïŒ -é話ç¶æ ãå€æŽããŸãã ç¶æ ã¯ãå®æ°ã®ããããã¹ã¯ã§ãããåŒæ°ãšããŠæž¡ãããŸãã
- TOXAV_FRIEND_CALL_STATE_ERROR-é£çµ¡å ãžã®ããŒã¿è»¢éã®ã¿ã€ã ã¢ãŠãã ãã®ç¶æ ã¯ãã³ãŒã«ã®æåŸã®ç¶æ ã§ããïŒãã®æç¹ã§ã³ãŒã«ã¯å®äºããŠããŸãïŒãä»ã®æ¡ä»¶ãšçµã¿åãããããšãã§ããŸããã
- TOXAV_FRIEND_CALL_STATE_FINISHED-æ£åžžãªé話çµäºã ãã®ç¶æ ã¯ãã³ãŒã«ã®æåŸã®ç¶æ ã§ããïŒãã®æç¹ã§ã³ãŒã«ã¯å®äºããŠããŸãïŒãä»ã®æ¡ä»¶ãšçµã¿åãããããšãã§ããŸããã
- TOXAV_FRIEND_CALL_STATE_SENDING_A-é£çµ¡å ã¯é³å£°ã¹ããªãŒã ã®éä¿¡ãéå§ããŸããã
- TOXAV_FRIEND_CALL_STATE_SENDING_V-é£çµ¡å ã¯ãããªã¹ããªãŒã ã®éä¿¡ãéå§ããŸããã
- TOXAV_FRIEND_CALL_STATE_ACCEPTING_A-é£çµ¡å ã¯ãªãŒãã£ãªã¹ããªãŒã ã®åä¿¡ãéå§ããŸããã
- TOXAV_FRIEND_CALL_STATE_ACCEPTING_V-é£çµ¡å ã¯ãããªã¹ããªãŒã ã®åä¿¡ãéå§ããŸãã
toxav_bit_rate_status_cbïŒfriend_numberãaudio_bit_rateãvideo_bit_rateïŒ -ã«ãŒãã«ãå¿ èŠãªãããã¬ãŒãã§ããŒã¿ãéä¿¡ã§ããªãå Žåã®ãããã¯ãŒã¯èŒ»èŒ³ã€ãã³ãã ãã©ã¡ãŒã¿ãšããŠãã«ãŒãã«ã¯ãªãŒãã£ãªããã³ãããªã¹ããªãŒã ã®æ°ãããããã¬ãŒããæäŸããŸãã ããã«ãã«ãŒãã«ã¯æåã«ã¡ã€ã³ã¬ãŒã³ãå æããããããããªã¹ããªãŒã ã®ãããã¬ãŒããäœäžãããããšããŸãããããªã¹ããªãŒã ãåæããåŸã«ã®ã¿ããªãŒãã£ãªã®ãããã¬ãŒããäœäžãããããšããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ãããã®æšå¥šäºé ãç¡èŠãããã xav_bit_rate_setïŒfriend_numberãaudio_bit_rateãvideo_bit_rateïŒã®åŒã³åºãã䜿çšããŠæ°ãããããã¬ãŒããèšå®ã§ããŸãã ãããã¬ãŒãã¯Kb / sïŒããããã/ç§ïŒã§èšå®ãããå€0ã¯å¯Ÿå¿ããããŒã¿ã¹ããªãŒã ã®ã·ã£ããããŠã³ã瀺ããå€-1ã¯ä»¥åã®èšå®ãããã¬ãŒããå€æŽããŸããã
opusãªãŒãã£ãªã³ãŒããã¯ã®å Žåãæå°ãããã¬ãŒãã¯6ã§ãç§ã®è³ã®16ã32ãè¶ ããå€ã¯ãWebã«ã¡ã©ããã®é³ã§åºå¥ã§ããªããªããŸããã
V8ãããªã³ãŒããã¯ã®å Žåããã¬ãŒã ãµã€ãºãšFPSã«ãã£ãŠã¯æšå¥šåž¯åå¹ å€ãèŠã€ãããŸããã§ããã äžè¬ã«ãããŸããŸãªãããªè§£å床ã«å¯ŸããŠæ¬¡ã®åºæ¬ãããã¬ãŒããæšå¥šãããŸãã
ãã¬ãŒã ãµã€ãºãpx | ãããã¬ãŒããKb / s |
---|---|
320x240 | 400 |
480x270 | 700 |
1024x576 | 1500 |
1280x720 | 2500 |
1920x1080 | 4000 |
toxav_audio_receive_frame_cbïŒfriend_numberãpcmãsample_countãchannelsãsampling_rateïŒ -ãªãŒãã£ãªããŒã¿ã®ãã¬ãŒã ãåä¿¡ããŸãã ããŒã¿ãããã¡ããµã³ãã«æ°ããã£ãã«æ°ããµã³ããªã³ã°åšæ³¢æ°ïŒHzïŒããã©ã¡ãŒã¿ãŒãšããŠéä¿¡ãããŸãã ã¹ãã¬ãªãµãŠã³ãã®å Žåã16ãããã®ãµã³ãã«ã¯ãå·Šå³ã®ãã£ã³ãã«ã§æ¬¡ã ã«é çªã«éä¿¡ãããŸãã ãã€ãåäœã®ãããã¡ãŒã®ãµã€ãºã¯ã sample_count * channels * 2ãã€ããšããŠå®çŸ©ãããããªç§åäœã®ãããã¡ãŒã®æç¶æéã¯ã sampling_rate / sample_countãšããŠå®çŸ©ãããŸãã
PCMã¯åŸæ¥ã®ãã«ã¹ã³ãŒãå€èª¿åœ¢åŒã§ããããããããã¡ãŒããŒã¿ã¯ãDACã«å€æããã«å®è³ªçã«è»¢éãããã圢åŒã®èª¬æãå«ãé©åãªããããŒãè¿œå ããããšã§WAVãã¡ã€ã«ã«ä¿åã§ããŸãããäŒè©±äžã«ãªãŒãã£ãªã¹ããªãŒã ãã©ã¡ãŒã¿ãŒãæºåããå¿ èŠããããŸãåŒã³åºãå ã«ãã£ãŠå€æŽãããŸãã
toxav_video_receive_frame_cbïŒfriend_numberãå¹ ãé«ããyãuãvãystrideãustrideãvstrideïŒ -YUV420圢åŒã®ãããªããŒã¿ã®ãã¬ãŒã ãåä¿¡ããŸãã ããã¯ToxAVããã®å ã®ã³ãŒã«ããã¯ã§ãã YUV420ããBGRãžã®å€æã®å®è£ äŸã¯ãããšãã°ÎŒToxãœãŒã¹ã³ãŒãïŒ yuv420tobgr ïŒã«ãããŸãã
toxav_video_receive_frame_cbïŒfriend_numberãwidthãheightãrgbïŒ-RGBãŸãã¯BGR圢åŒã§ãã¬ãŒã ãåä¿¡ããããšã¯ãToxAVã§ã¯å©çšã§ããªãè¿œå ã®Pythonã©ãããŒã³ãŒã«ããã¯ã§ãã ãã®ãªãã·ã§ã³ã¯ãpyhonã«å€æããã®ã§ã¯ãªããã©ã€ãã©ãªå ã§å¿ èŠãªå€æãé«éåããããã«äœ¿çšãããŸãïŒå®éãµToxã³ãŒãã®yuv420tobgrã䜿çšãããŸãïŒã RGBãŸãã¯BGR圢åŒãèšå®ããã«ã¯ããã©ã¡ãŒã¿ãŒãæå®ããŠtoxav_video_frame_format_setãåŒã³åºããŸãã
- TOXAV_VIDEO_FRAME_FORMAT_BGR -BGR圢åŒïŒOpenCVã§äœ¿çšïŒã
- TOXAV_VIDEO_FRAME_FORMAT_RGB -RGB圢åŒã
- TOXAV_VIDEO_FRAME_FORMAT_YUV420ã¯ãYUV420圢åŒã®ToxAVããã®å ã®ã³ãŒã«ããã¯ã§ãã
以äžãRGB / BGRã¯ãã¢ã«ãã¡ãã£ãã«ã®ãªã24ããã圢åŒãæããèµ€ãç·ãéã®åã³ã³ããŒãã³ãã«ã¯8ããããå²ãåœãŠãããŸãã ãã®åœ¢åŒã¯ãèµ€ãšéã®è²æåã®é åºã«å¿ããŠãRGB24 / BGR24ãšåŒã°ããããšããããŸãã
ãªãŒãã£ãªã¹ããªãŒã ãšåæ§ã«ããããªã¹ããªãŒã ã®åœ¢åŒã¯ãçºä¿¡è ããã€ã§ãå€æŽã§ããŸãïŒããšãã°ããã¬ãŒã ãµã€ãºãå€æŽãããŸãïŒã
ã€ãã³ãåŠç
Toxavã€ãã³ãã¯ã toxav_iteration_intervalåŒã³åºããè¿ãå€ãšçããåŒã³åºãéã®æšå¥šééïŒ tox_iteration_intervalã«ãŒãã«ã®åŒã³åºãã«é¡äŒŒïŒã§toxav_iterateã¡ãœãããå®æçã«åŒã³åºããŠïŒ tox_iterateã«ãŒãã«ã¡ãœããã®åŒã³åºãã«é¡äŒŒïŒåŠçãããŸãã
ToxAVã®ãã¥ãŒãã£ãµã€ã¯ã«ã¯ã次ã®ããã«å¥ã®ã¹ã¬ããã§æäŸããããšããå§ãããŸãã ãªãŒãã£ãª/ãããªã³ãŒã«ããªãå Žåã toxav_iteration_intervalã®å€ã¯200ããªç§ã«ãªããã¹ããªãŒã ã¯ã»ãšãã©ã®æéã¹ãªãŒãããŸãã
import threading class EchoAVBot(ToxAV): def __init__(self, core): ... self.running = True self.iterate_thread = threading.Thread(target = self.iterate_cb) self.iterate_thread.start() def iterate_cb(self): while self.running: self.toxav_iterate() interval = self.toxav_iteration_interval() time.sleep(float(interval) / 1000.0) def stop(self): self.running = False self.iterate_thread.join() self.toxav_kill();
GILïŒGlobal Interpreter LockïŒã¯Pythonã«ååšãããããã¹ã¬ããéã®åæã®å¿ èŠæ§ã«ã€ããŠå¿é ããå¿ èŠã¯ãããŸããããä»ã®èšèªã§ã¯tox av _ * _ cbã€ãã³ããtox_iterateãæäŸããã¹ã¬ããããåŒã³åºããããšãäºæããªããé©ãããããŸããããŒãµãŒãã³ã°ããã¯ã¹av _iterateã ããšãã°ããã®ãããªã€ãã³ãã¯toxav_call_state_cbåŒã³åºãå®äºã€ãã³ãã§ããToxã«ãŒãã«å ã§ã®ãããããã¯ã®å¯èœæ§ãèæ ®ããŠãé©åãªåæããªããã£ãã䜿çšããŸãã
é話管ç
çºä¿¡ã³ãŒã«ãäœæããã«ã¯ã toxav_callã¡ãœããïŒfriend_numberãaudio_bit_rateãvideo_bit_rateïŒã䜿çšããŸã ãããã§ãé£çµ¡å ãªã¹ãã®é£çµ¡å èå¥åãšçºä¿¡ãªãŒãã£ãªããã³ãããªãããã¬ãŒãïŒKb / sïŒãåŒæ°ãšããŠæå®ãããŸãã ãããã¬ãŒãå€0ã¯ã察å¿ããã¹ããªãŒã ã®éä¿¡ããããã¯ããŸããããã¯ã toxav_bit_rate_setãåŒã³åºãããšã§åŸã§æå¹ã«ã§ããŸãã
ToxAVã«ã¯éåžžã®åŒã³åºãå¶åŸ¡ããããŸãã-åãå ¥ããããªãçºä¿¡åŒã³åºãã¯ãã¢ããªã±ãŒã·ã§ã³èªäœã®å éšã¿ã€ã ã¢ãŠãã«ãã£ãŠåŒã³åºãããã£ã³ã»ã«ãããïŒã¢ããªã±ãŒã·ã§ã³ããã³ã°ã¢ããããïŒããé£çµ¡å ããªãã©ã€ã³ã«ãªããŸããïŒãããã¯ãŒã¯åæãštoxav_call_state_cbã€ãã³ãïŒãã©ã¡ãŒã¿TOXAV_FRIEND_CALL_STATE_FINISHED ïŒã ããã©ã«ãã§ã¯ãé£çµ¡å ããã®ãªãŒãã£ãªããã³ãããªããŒã¿ã®åä¿¡ã¯æå¹ã«ãªã£ãŠããã toxav_call_controlãåŒã³åºãããšã§å€æŽã§ããŸãã
çä¿¡åŒã³åºãã¯toxav_call_cbã€ãã³ãã«ãã£ãŠæ±ºå®ããããã®åŸãåŒã³åºãã¯å®å šã«ç¡èŠãããããåŒã³åºãã«å¿çãããã toxav_call_controlãä»ããŠãã®ç¶æ ãå€æŽããããšã«ãã£ãŠåŠçãããŸãã
åŒã³åºãã«å¿çããã«ã¯ã toxav_answeråŒã³åºãïŒfriend_numberãaudio_bit_rateãvideo_bit_rateïŒã䜿çšããŸã ãããã§ã¯ãçä¿¡åŒã³åºããè¡ãé£çµ¡å ãªã¹ãã®é£çµ¡å èå¥åãšãçºä¿¡ãªãŒãã£ãªããã³ãããªãããã¬ãŒãïŒKb / sïŒãåŒæ°ãšããŠæå®ãããŸãã ãããã¬ãŒãå€0ã¯ã察å¿ããã¹ããªãŒã ã®éä¿¡ããããã¯ããŸããããã¯ã toxav_bit_rate_setãåŒã³åºãããšã§åŸã§æå¹ã«ã§ããŸãã
åŒã³åºãç¶æ ãå¶åŸ¡ããã«ã¯ã toxav_call_controlïŒfriend_numberãcontrolïŒåŒã³åºãã䜿çšããŸããããã§ã以äžã®å®æ°ãå¶åŸ¡ãã©ã¡ãŒã¿ãŒãšããŠäœ¿çšã§ããŸãã
- TOXAV_CALL_CONTROL_RESUME-åŒã³åºããå¿çããããŸã§ã以åã«äžæåæ¢ãããåŒã³åºããåéããããšã¯ã§ããŸããã
- TOXAV_CALL_CONTROL_PAUSE-é話ãäžæåæ¢ã«èšå®ããïŒé話ãä¿çãä¿çïŒãé話ã«å¿çãããŸã§äœ¿çšã§ããŸããã
- TOXAV_CALL_CONTROL_CANCEL-çä¿¡ã³ãŒã«ããªã»ããããããã¢ã¯ãã£ããªã³ãŒã«ãçµäºããŸãã
- TOXAV_CALL_CONTROL_MUTE_AUDIO-é³å£°ããŒã¿ã®éä¿¡ãåæ¢ããèŠæ±ãå¿çè ã«éä¿¡ããŸãïŒå¿çè ã¯ãã®èŠæ±ãç¡èŠã§ããŸãïŒã
- TOXAV_CALL_CONTROL_UNMUTE_AUDIO-é³å£°ããŒã¿ã®éä¿¡ãåéããèŠæ±ãåçè ã«éä¿¡ããŸãã
- TOXAV_CALL_CONTROL_HIDE_VIDEO-ãããªããŒã¿ã®éä¿¡ãåæ¢ããèŠæ±ãåçè ã«éä¿¡ããŸãïŒåçè ã¯ãã®èŠæ±ãç¡èŠã§ããŸãïŒã
- TOXAV_CALL_CONTROL_SHOW_VIDEO-åçè ã«ãããªããŒã¿ã®éä¿¡ãåéããèŠæ±ãéä¿¡ããŸãã
ãªãŒãã£ãªãšãããªã®ã¹ããªãŒãã³ã°
ãªãŒãã£ãªã¹ããªãŒã ãéä¿¡ããã«ã¯ãåŒã³åºãtoxav_audio_send_frameïŒfriend_numberãpcmãsample_countãchannelsãsampling_rateïŒã䜿çšãããŸã ãããã§ã¯ãé£çµ¡å ãªã¹ãããã®é£çµ¡å ã®èå¥åãPCMããŒã¿ãããã¡ãŒããµã³ãã«æ°ããµã³ãã«æ°ãããã³ãµã³ããªã³ã°åšæ³¢æ°ãæå®ãããŸãã ã¹ãã¬ãªã¹ããªãŒã ã®toxav_audio_receive_frame_cbãšã®é¡æšã«ãããå·Šå³ã®ãã£ãã«ã®16ããããµã³ãã«ã¯æ¬¡ã ãšé çªã«é²ãã¯ãã§ãã
ãã£ãã«ã®æ倧æ°ã¯2ïŒã¹ãã¬ãªïŒã§ããããµã³ããªã³ã°åšæ³¢æ°ã¯8ã12ã16ã24ãããã³48 KHzã®å€ãåãããšãã§ããopusã³ãŒããã¯ã®æ©èœã«ããããµã³ãã«æ°ã¯2.5ã5ã10ã20ã®ãã¬ãŒã æéã«å¯Ÿå¿ããå¿ èŠãããããšãæãåºããŠãã ãã40ãŸãã¯60ããªç§ã
ãããªã¹ããªãŒã ã®ãã¬ãŒã ã転éããã«ã¯ãåŒã³åºãtoxav_video_send_frameã䜿çšããŸããããã¯ãPythonã©ãããŒã§toxav_video_send_yuv420_frameïŒfriend_numberãwidthãheightãyãuãvïŒã«ååãå€æŽãããŸãã YïŒèŒåºŠïŒããã³è²å·®UVã
BGRããYUV420ãžã®å€æã®å®è£ äŸã¯ãããšãã°ÎŒToxãœãŒã¹ã³ãŒãïŒ bgrtoyuv420 ïŒã«ãããŸãã Pythonã©ãããŒã§ã¯ã䟿å®äžãã¡ãœããtoxav_video_send_bgr_frameïŒfriend_numberãwidthãheightã bgr ïŒããã³toxav_video_send_rgb_frameïŒfriend_numberãwidthãheightãrgbïŒãå®è£ ãããŠããããããã®å€æãåå¥ã«å®è¡ããŸãïŒå®éãµToxã³ãŒãããbgrtoyuv420ã䜿çšãããŸãïŒã
äŸ
Pythonã¯ããããã¿ã€ãã³ã°ãšåäœæ¹æ³ã®åŠç¿ã«éåžžã«äŸ¿å©ãªèšèªã§ãã äžèšã®ãã¹ãŠãæ確ã«ç€ºãããã«ãããã€ãã®äŸãäœæããŸãã ã
echobot.pyã¯ãéä¿¡ãããããã¹ãã§å¿çããéåžžã®ããã¹ããšã³ãŒãããã§ãã ããã«ãé£çµ¡å ãã¹ããŒã¿ã¹ãã¢ãã¿ãŒããã¡ã€ã«ã®ç®¡çã瀺ããŸãã ããã¯ãæ®ãã®äŸã®å®è£ ã®åºç€ã§ãã
echoavbot.py-çºä¿¡è ã«éãè¿ããããªãŒãã£ãªããã³ãããªã¹ããªãŒã ãéä¿¡ãããªãŒãã£ãªããã³ãããªãšã³ãŒãããã ããŒã¿è»¢éã®å質ãçºçããé 延ã«å¯Ÿãããããã¯ãŒã¯ã®åœ±é¿ã調æ»ããèªåã®æ©åšããã¹ãããã®ã«äŸ¿å©ã§ãã
avbot.py-åçè ãã·ãã¥ã¬ãŒãããèªèº«ã®ããã€ã¹ãããªãŒãã£ãªããã³ãããªããŒã¿ãéä¿¡ãããããã äžåšäžã«ãããã芳å¯ããã®ã«äŸ¿å©ã§ã:)
ãããã«
Toxãããžã§ã¯ãã¯çŸåšã掻çºã«éçºãããŠããŸãã Tox Foundationãšã®é¢ä¿ãæãããŠãããããžã§ã¯ãã®éçºã¯ãŸã£ãã劚ããããã2çªç®ã®é¢šãå¹ã蟌ãŸããããã§ã.PRãåãå ¥ãããå§ãããã±ãããæŽçãããæ°ãããµã€ãã掻çºã«åããããããã¥ã¡ã³ãã®äœæ¥ãé²è¡äžã§ãã ã°ã«ãŒããã£ããã§äœæ¥ããããã®ãã©ã³ããããã«ã«ãŒãã«ã«æ³šã蟌ãŸããã«ãŒãã«ãå®å šãªãã¬ãªãªãŒã¹ã®å€èŠ³ã«ãªãããšãé¡ã£ãŠããŸãã
åç §è³æ
- tox.chat -Toxãããžã§ã¯ãã®å ¬åŒãµã€ãã
- githubã®toxcoreã«ãŒãã«ãããžã§ã¯ã ã
- githubã®Pytoxcore pythonã©ãããŒãããžã§ã¯ã ã
- ãå ¬åŒãã¯ã©ã€ã¢ã³ããã«ããéå§ãããªãDebian WheezyãUbuntu PreciseãCentOS 6ãªã©ã®æ§å®å®çãã£ã¹ããªãã¥ãŒã·ã§ã³ãå«ããgithubã§tox.pkgã¯ã©ã€ã¢ã³ããšã©ã€ãã©ãªã®ãã€ããªããŒãžã§ã³ããã«ããããããžã§ã¯ãã