180 likes | 288 Views
ISM Voice Chat. מנחים: פרופ' חבר פרידמן רועי מר קוגן אלכס. מגישים: ישראל צ'רניאק שי פרץ מרינה יצינה. ארכיטקטורת מערכת. מודולים ראשיים. VoiceCaller ISMVoiceCaller Portaudio Speex JVoipVoiceCaller JVoiplib Presence OLSRD GUI. VoiceCaller.
E N D
מנחים: פרופ' חבר פרידמן רועי מר קוגן אלכס מגישים: ישראל צ'רניאק שי פרץ מרינה יצינה
מודולים ראשיים • VoiceCaller • ISMVoiceCaller • Portaudio • Speex • JVoipVoiceCaller • JVoiplib • Presence • OLSRD • GUI
VoiceCaller • אחראי על תחילת שיחה חדשה, קבלת שיחה והפסקת שיחה כתוצאה מבקשת הפסקה של אחד מהצדדים המשתתפים בשיחה. • אחראי לתשאל את המשתמש האם הוא מעוניין לקבל או לדחות את השיחה ולפעול בהתאם. • כל עוד מתקיימת שיחה הרכיב דוחה בקשות תחילת שיחה חדשות. • כאשר אחד הצדדים מבקש להפסיק את השיחה הרכיב אחראי להעביר את בקשת הפסקת השיחה לצד השני. • מודולריות – המודול אינו מממש שיחה קולית בעצמו, אלא מהווה תשתית למודול אשר מממש שיחה קולית, ועל-כן, מספק תמיכה לשילוב של מגוון רחב של מודולי שיחה קולית שונים בתוכנית.
ISMVoiceCaller • אחראי על ביצוע השיחה לפי המימוש שלנו (ISM Internal). מקליט ומשמיע קול באמצעות ספריית Port Audio, מקודד ומפענח את הקול באמצעות Speex ומעביר את הקול המקודד בעזרת UDP. • מאפשר למשתמש לצאת מטווח קליטה לפרק זמן קצר ובכך הוא יותר ידידותי לרשתות ad-hoc בהן לעיתים קרובות מאבדים קליטה למספר רגעים, במיוחד כאשר נמצאים בתנועה. • במידה ונאבד קשר לפרק זמן ארוך, המודול מסיק שהמשתמש התנתק ומנתק את השיחה.
תרשים ISMVoiceCaller הקלטה השמעה קידוד פיענוח Network
ISMVoiceCaller - PortAudio זוהי ספריית I/O הכתובה בשפת C ומאפשרת הקלטה והשמעה של קול. ספרייה זו היאopen source ויכולה לפעול על פלטפורמות שונות.
ISMVoiceCaller - Speex זוהי אפליקציית open source המאפשרת קידוד ופענוח של קול.
JVoipVoiceCaller • אחראי על ביצוע השיחה לפי המימוש של ספריית Jvoiplib אשר מממשת הקלטה, השמעה, קידוד, פענוח והעברת קול מקודד בעזרת פרוטוקול RTP כחלק מהמימוש שלה של שיחה. • מאפשר למשתמש לצאת מטווח קליטה לפרק זמן קצר ובכך הוא יותר ידידותי לרשתות ad-hoc בהן לעיתים קרובות מאבדים קליטה למספר רגעים, במיוחד כאשר נמצאים בתנועה. • במידה ונאבד קשר לפרק זמן ארוך, המודול מסיק שהמשתמש התנתק ומנתק את השיחה.
JVoipVoiceCaller - JVoiplib • זוהי ספרייה object-oriented המממשת VoIP וכתובה ב C++. ספרייה זו היאopen source ויכולה לפעול על Linux, Windows. • כחלק מיצירת השיחה הספרייה מקליטה, משמיעה, מקודדת ומפענחת קול ומעבירה את המידע בין משתתפי השיחה באמצעות פרוטוקול RTP (Real-Time Transport Protocol).
אחראי על רשימת הנוכחות של המשתמשים המחוברים לתוכנה. אחראי על פרסום הודעת נוכחות של משתמש אשר מחובר ל ISM Voice Chat ע"י שליחה של broadcasts כל פרק זמן קבוע. בעת התנתקות מסודרת, אחראי על פרסום הודעת התנתקות של המשתמש גם ע"י שליחה של broadcast. אחראי על עדכון רשימת הנוכחות שלISM Voice Chat . כאשר לא מתקבלת אף הודעת נוכחות ממשתמש שנמצא ברשימת הנוכחות במשך תקופה מסויימת, המודול מוריד אותו מהרשימה. Presence
OLSR Daemon • זהו מימושopen source של פרוטוקול OLSR (Optimized Link State Routing ) המאפשר ניתוב ברשתות בטופולוגית mesh עבור כל ציוד קצה שהוא. • ה- Olsrd מאוד יעיל, מנצל מעט מאוד זמן מעבד והוא מאוד scalable (Olsrd רץ ברשת האלחוטית באתונה המכילה כ 2000 מחשבים). • זהו daemon שרץ ברקע, בונה טבלאות ניתוב של המסלולים לכל המחשבים המריצים את Olsrd תוך התחשבות בעלות המסלול (במידה ויש יותר ממסלול אחד). • כמו כן, ה-daemon מעביר את ה packets לפי הטבלאות שהוא בונה ובכך מאפשר העברת מידע דרך מספר hops בין מחשבים שאינם בטווח קליטה ישיר אחד של השני. • במידה והתוכנה שלנו מופעלת על מחשב המריץ את ה Olsrd, ניתן יהיה לבצע שיחה דרך מספר hops גם בין מחשבים שאינם בטווח קליטה ישיר אחד של השני, כמו כן ניתן יהיה לראות ברשימת הנוכחות משתמשים שאינם נמצאים בטווח קליטה ישיר.
GUI משלנו לעומת השתלבות ב-PSI • בחרנו לכתוב תוכנית משלנו במקום להשתלב ב-PSI. • הסתכלנו על הקוד של PSI, וראינו שלהשתלב בספריית ה-GUI שבה משתמשת תוכנת PSI (ספריית QT) יצרוך הרבה יותר מאמץ מאשר לכתוב GUI משלנו בספרייה אחרת שמצאנו (wxWidgets). • כמו-כן, לשם כך אם היינו משתמשים ב-PSI, היינו צריכים להשתמש בארטיפקטים שלהם (כגון רשימת הנוכחות, ומחלקות אחרות שלהם), כאשר הקוד של PSI איננו מתועד היטב, וקשה יחסית להבנה.
כתיבת מודול נוכחות משלנו לעומת שימוש ב-Bonjour • תחילה, ניסינו להשתמש ב-Bonjour לצורך מעקב אחר רשימת הנוכחות. • ה-Bonjour עבד, אך נתקענו בבעיות כאשר התחלנו לבדוק את תאימותו ל-multiple hops. תוכנת ה-OLSRD (שתומכת בהעברת כל סוגי ההודעות, כולל broadcast ו-multicast) אכן העבירה את כל ההודעות של Bonjour, אך ה-Bonjour לא הצליח לקלוט משתמשים שלא היו בטווח קליטתו הישיר כ-services – כנראה שה-Bonjour התעלם מהם מסיבה כלשהי. • לאחר ניסיונות רבים להבין ולתקן את הבעיה, החלטנו לממש פרוטוקול דומה בעצמנו, שגם מותאם לצרכינו המיוחדים.
תודות מיוחדות תודה מיוחדת למקסים קווגן, אשר עזר לנו רבות במהלך הפרוייקט בהתקנות והגדרות של מערכת Linux.