Bối cảnh và vấn đề nghiên cứu

Đồ án tốt nghiệp "Xây dựng hệ thống Voip trên hệ điều hành Android" được thực hiện bởi sinh viên Nguyễn Khắc Vinh (lớp CNPM-K51, Viện Công nghệ Thông tin và Truyền thông, Trường Đại học Bách Khoa Hà Nội) dưới sự hướng dẫn của ThS. Vũ Đức Vượng. Quá trình nghiên cứu và phát triển diễn ra tại Phòng R&D thuộc Trung tâm Phần mềm Viettel trong khoảng thời gian từ ngày 28/02/2011 đến ngày 28/05/2011, nằm trong khuôn khổ dự án nghiên cứu thử nghiệm công nghệ VoIP của đơn vị.

Bối cảnh thực tiễn được tác giả nêu rõ xuất phát từ sự dịch chuyển hạ tầng viễn thông: công nghệ truyền thoại qua giao thức mạng IP (Voice over Internet Protocol - VoIP / IP Telephony) ra đời nhằm thay thế hệ thống mạng ghép kênh phân chia theo thời gian (TDM) truyền thống. Tại thời điểm nghiên cứu, hạ tầng mạng Internet cáp và Wi-Fi đã phủ rộng khắp các phòng ban trong các doanh nghiệp, trong khi nhu cầu liên lạc thoại nội bộ là rất lớn. Việc triển khai một hệ thống VoIP nội bộ cho phép tận dụng triệt để hạ tầng mạng IP sẵn có, từ đó tối thiểu hóa chi phí liên lạc giữa các nhân viên xuống mức gần như bằng không. Đồng thời, sự phát triển nhanh chóng của các thiết bị di động chạy hệ điều hành Android mở ra khả năng biến điện thoại thông minh thành một đầu cuối SIP (SIP phone) di động linh hoạt.

Mục tiêu cốt lõi của đồ án là tìm hiểu kiến trúc VoIP, hệ điều hành Android và xây dựng hoàn thiện một hệ thống VoIP hoàn chỉnh (gồm cả phía server và demo ứng dụng client trên Android) để thử nghiệm tính khả thi, làm tiền đề phục vụ cho các dự án tiếp theo của Trung tâm Phần mềm Viettel.

Văn bản xác định 7 nhiệm vụ nghiên cứu cụ thể được đánh số như sau:

  1. Tìm hiểu về kiến trúc của VoIP.
  2. Tìm hiểu về hệ điều hành Android.
  3. Tìm hiểu thư viện hỗ trợ để lập trình VoIP Client trên Android.
  4. Chọn proxy/server để xây dựng hệ thống.
  5. Dùng thư viện và server đã chọn xây dựng một hệ thống VoIP cơ bản.
  6. Bảo mật cho tài khoản khi đăng kí với server.
  7. Tìm hiểu và lựa chọn giao thức vượt NAT.

Đối tượng nghiên cứu của đồ án là kiến trúc báo hiệu và truyền thông đa phương tiện thời gian thực trong mạng IP, nền tảng Android (API level 8) và giải pháp tích hợp thư viện mã nguồn gốc (C/C++) vào Java. Phạm vi triển khai thực tế bao gồm máy chủ Kamailio cài đặt trên hệ điều hành Debian Linux tích hợp cơ sở dữ liệu MySQL và ứng dụng softphone client chạy trên thiết bị Android, thử nghiệm trong môi trường mạng nội bộ (LAN/Wi-Fi) và mạng di động 3G.

Cơ sở lý thuyết và phương pháp

Đồ án xây dựng giải pháp kỹ thuật dựa trên các chuẩn giao thức mở và nền tảng phát triển ứng dụng di động:

Khung lý thuyết và giao thức kỹ thuật

  • Giao thức khởi tạo phiên (SIP - Session Initiation Protocol): Giao thức tầng ứng dụng hoạt động theo cơ chế văn bản thuần (clear text) để thiết lập, hiệu chỉnh và chấm dứt các phiên truyền thông đa phương tiện. Quá trình trao đổi tham số media (IP, cổng, codec âm thanh) giữa các User Agent (UA) sử dụng giao thức mô tả phiên SDP (Session Description Protocol). Các phương thức SIP chính gồm INVITE, ACK, BYE, CANCEL, REGISTER, OPTIONS và các lớp mã phản hồi từ 1xx đến 6xx.
  • Giao thức truyền tải thời gian thực (RTP/RTCP): RTP (Real-time Transport Protocol) chịu trách nhiệm vận chuyển trực tiếp luồng gói tin thoại đã số hóa; RTCP (RTP Control Protocol) chiếm khoảng 5% băng thông dùng để thu thập thông số chất lượng truyền dẫn nhằm tối ưu đường truyền.
  • Chuẩn số hóa âm thanh (Audio Codecs): Tài liệu phân tích và so sánh các chuẩn mã hóa do ITU đề xuất:
Chuẩn Codec Tốc độ truyền (Bitrate) Tần số lấy mẫu Đặc tính kỹ thuật và chất lượng
G.711 64 Kbps 3.4 kHz Chuẩn mặc định cho mạng PSTN và VoIP; âm thanh không nén.
G.729 8 Kbps 3.4 kHz Dữ liệu âm thanh nén, cân bằng giữa chất lượng thoại và tải băng thông; hỗ trợ rộng rãi trên IP phone.
G.723.1 5.3 hoặc 6.3 Kbps 3.4 kHz Nén cao giúp giảm băng thông nhưng chất lượng âm thanh thấp; ít phổ biến trong VoIP.
G.722 64 Kbps 7 kHz Băng thông rộng, độ trung thực âm thanh cao nhờ dải tần rộng.

Đồ án chọn chuẩn G.729 nhằm cân bằng tối ưu giữa chất lượng âm thanh và mức tiêu thụ băng thông trên đường truyền di động.

  • Cơ chế xác thực SIP Digest (RFC 2617): Khắc phục nhược điểm truyền text thuần của SIP. Server phát sinh chuỗi nonce (dùng một lần) gửi cho client. Client mã hóa mật khẩu kèm username, realm, nonce, cnonce bằng hàm băm MD5 để trả về chuỗi băm response. Mật khẩu gốc không truyền qua mạng dưới dạng bản rõ.
  • Kỹ thuật vượt NAT (NAT Traversal): Sử dụng ghi nhận cặp địa chỉ IP:port ngoại vi tại SIP Server đối với bản tin báo hiệu SIP; sử dụng giao thức STUN (Session Traversal Utilities for NAT) để phân giải địa chỉ công khai cho luồng dữ liệu RTP, đồng thời ghi nhận hạn chế không vượt được Symmetric NAT.
  • Nền tảng Android (API level 8): Vận dụng mô hình chu trình sống 4 trạng thái của Activity (active/running, paused, stop, killed), Service chạy ngầm, cơ chế truyền thông điệp Intent (Explicit/Implicit Intent) và Intent Filter, hệ thống thông báo Notification, và cơ sở dữ liệu nhúng SQLite lưu tại thư mục /data/data/<package_name>/databases.

Phương pháp nghiên cứu và phát triển

Tác giả áp dụng quy trình công nghệ phần mềm thực nghiệm:

  • Phân tích yêu cầu chức năng qua mô hình ca sử dụng (Use Case) và phân tích tương tác qua biểu đồ tuần tự (Sequence Diagram).
  • Kỹ thuật bao bọc và biên dịch mã nguồn gốc (Native Code Integration): Biên dịch thư viện PJSIP (viết bằng C) thông qua bộ Android NDK (phiên bản android-ndk-r4-crystax-4) để sinh thư viện liên kết động libpjsipjni.so cho kiến trúc CPU armeabi và armeabi-v7a.
  • Triển khai máy chủ mã nguồn mở Kamailio v3.0 / v3.1 kết hợp module cơ sở dữ liệu db_mysql trên môi trường máy chủ Linux Debian.

Thiết kế và triển khai

Hệ thống được thiết kế theo mô hình phân tán ngang hàng (peer-to-peer) kết hợp máy chủ định tuyến báo hiệu (Signaling Server):

[Voip Android Client A] <--- Signaling (SIP over UDP/TCP) ---> [Kamailio SIP Proxy/Registrar] <--- Signaling ---> [Voip Android Client B]
         |                                                                                                            |
         +--------------------------------- Media Stream (RTP/RTCP - Peer-to-Peer) -----------------------------------+

Triển khai máy chủ (Server-side)

Máy chủ Kamailio đóng hai vai trò: Proxy Server (tiếp nhận và chuyển tiếp bản tin SIP, không can thiệp vào luồng âm thanh) và Registrar Server (tiếp nhận bản tin REGISTER để lập ánh xạ SIP URI với địa chỉ IP:port trong cơ sở dữ liệu vị trí Location Database).

Quá trình biên dịch và cấu hình trên hệ điều hành Debian bao gồm:

  1. Cài đặt các gói phụ trợ: git-core, gcc, flex, bison, libmysqlclient15-dev, make, libcurl4-openssl-dev, libxml2-dev, libpcre3-dev.
  2. Tải mã nguồn Kamailio qua Git và cấu hình tham số biên dịch:
    • Cấu hình: make PREFIX="/usr/local/kamailio-3.1" FLAVOUR=kamailio include_modules="db_mysql dialplan" cfg
    • Biên dịch và cài đặt: make all và make install
  3. Khởi tạo lược đồ cơ sở dữ liệu MySQL bằng công cụ script: /usr/local/sbin/kamdbctl create.
  4. Cấu hình tệp /usr/local/etc/kamailio/kamailio.cfg kích hoạt các chỉ thị tiền xử lý: #!define WITH_MYSQL, #!define WITH_AUTH, #!define WITH_USRLOCDB.
  5. Quản trị dịch vụ và người dùng qua tiện ích dòng lệnh: kamctl start, kamctl stop, và lệnh tạo tài khoản kamctl add <username> <password>.

Kiến trúc phần mềm phía máy khách (Client-side)

Mã nguồn ứng dụng được phân chia thành 4 gói (package) chính trên môi trường Eclipse tích hợp Android SDK:

  • package service: Thành phần trung tâm vận hành tiến trình nền SipService. Lớp này chịu trách nhiệm nạp thư viện libpjsipjni.so, khởi tạo stack PJSUA, cấu hình giao thức truyền tải (UDP, TCP), thiết lập máy chủ STUN, ưu tiên codec âm thanh, duy trì đăng ký tài khoản và xử lý chuyển đổi âm thanh qua cơ chế Conference Bridge của PJSIP. Giao tiếp giữa giao diện người dùng và tiến trình nền được định nghĩa thông qua ngôn ngữ mô tả giao diện AIDL (Android Interface Definition Language) với giao diện ISipService. Lớp UAStateReceiver cài đặt các hàm callback từ PJSIP: on_incoming_call, on_call_state, on_pager, on_pager_status, on_reg_state, và on_call_media_state.
  • package models: Chứa các lớp ánh xạ dữ liệu và trạng thái nghiệp vụ gồm SipMessage (lưu trữ nội dung tin nhắn tức thời, người gửi, người nhận), CallInfo (quản lý định danh cuộc gọi callId, trạng thái cuộc gọi, số hiệu cổng đàm thoại confPort), IAccount (thông tin tài khoản SIP, tên hiển thị, mật khẩu, thời gian hết hạn đăng ký reg_timeout, chu kỳ duy trì kết nối ka_interval), và AccountState (mã trạng thái và tính hợp lệ của tài khoản).
  • package utils: Cung cấp lớp DBAdapter để đóng gói các truy vấn thao tác với cơ sở dữ liệu SQLite, lớp PreferencesWrapper, lớp Compatibility kiểm tra phiên bản API và phần cứng loa/mic, cùng lớp MediaManager phối hợp với AudioFocusWrapper (AudioFocus3 hoặc AudioFocus8) và luồng Ringer để quản lý chuông và chuyển đổi đầu ra âm thanh.
  • package ui: Các màn hình tương tác người dùng gồm MainScreen, AccountList (áp dụng mẫu thiết kế Factory Pattern với các lớp AccountFormFactory, SimpleAccountForm, AbstractAccountForm), InCallActivity (chứa các widget tùy biến kế thừa FrameLayout là InCallInfo và InCallControls), ConversationList và OutgoingCallChooser.

Thiết kế cơ sở dữ liệu SQLite

Cơ sở dữ liệu cục bộ của ứng dụng có cấu trúc gồm 3 bảng chính:

Tên bảng Các trường dữ liệu chính Kiểu khóa / Ràng buộc Ý nghĩa và chức năng lưu trữ
Account id, display_name, transport, active, account_id, reg_timeout, ka_interval, data, datatype, scheme, username, realm id (Khóa chính) Lưu thông tin cấu hình tài khoản SIP, thông tin xác thực (dạng plain hoặc digest), địa chỉ server và giao thức kết nối.
CallLogs id, name, date, duration, number, type id (Khóa chính) Ghi nhận nhật ký lịch sử cuộc gọi: tên liên hệ, ngày giờ thực hiện, thời lượng đàm thoại, SIP URI đối tác, phân loại (gọi đến, gọi đi, gọi nhỡ).
Messages id, sender, receiver, body, date, status, read id (Khóa chính) Quản lý các tin nhắn tức thời (SIP MESSAGE): URI người gửi, URI người nhận, nội dung văn bản, thời gian, trạng thái gửi và cờ đã đọc.

Nội dung chính theo từng chương

Bố cục khóa luận được kết cấu chặt chẽ theo các phần nội dung trong tài liệu:

Mở đầu

Chương này giới thiệu tổng quan về xu thế công nghệ VoIP, lý do lựa chọn đề tài xây dựng hệ thống trên nền tảng Android nhằm phục vụ nhu cầu liên lạc thoại nội bộ giá rẻ trong doanh nghiệp. Tác giả giới thiệu môi trường nghiên cứu thực tế tại Phòng R&D của Trung tâm Phần mềm Viettel, cơ cấu nhân sự tham gia dự án (gồm Quản trị dự án Đỗ Đình Thắng, thành viên Đào Hải Hưng và Nguyễn Khắc Vinh) và tóm tắt cấu trúc phân bổ các chương mục trong đồ án tốt nghiệp.

Phần I: Đặt vấn đề và định hướng giải pháp

Chương này tập trung giải quyết các bài toán cơ sở lý luận và lựa chọn công nghệ:

  • Trình bày tổng quan 7 nhiệm vụ kỹ thuật cần giải quyết của đề tài.
  • Trình bày chi tiết lý thuyết nền tảng về VoIP, cấu trúc khung bản tin SIP, mô tả phiên SDP và nguyên lý truyền thông RTP/RTCP; phân tích ưu nhược điểm của 4 chuẩn mã hóa âm thanh (G.711, G.729, G.723.1, G.722).
  • Khái quát kiến trúc thành phần của hệ điều hành Android (Activity, Service, Intent, Broadcast Receiver, Notification, cơ sở dữ liệu SQLite và tệp cấu hình AndroidManifest.xml).
  • Đặt ra hai thách thức kỹ thuật then chốt: nguy cơ mất an toàn thông tin do SIP truyền dưới dạng văn bản rõ và rào cản phân giải gói tin qua các thiết bị biên dịch địa chỉ mạng (NAT).
  • Đề xuất định hướng giải pháp: sử dụng xác thực SIP Digest theo chuẩn RFC 2617; giải quyết vượt NAT cho báo hiệu SIP thông qua cơ chế ghi nhận cổng mặt ngoài của SIP Server và cho gói tin RTP thông qua giao thức STUN.
  • Phân tích và đưa ra quyết định lựa chọn công cụ: chọn chuẩn SIP và RTP làm nền tảng báo hiệu và truyền thông; chọn codec G.729; lựa chọn bộ thư viện PJSIP (viết bằng C, dung lượng nhỏ gọn, hỗ trợ sẵn xử lý media và NAT) để phát triển client; lựa chọn máy chủ mã nguồn mở Kamailio (OpenSER cũ) với khả năng xử lý hàng nghìn cuộc gọi mỗi giây làm SIP Proxy và Registrar Server.

Phần II: Xây dựng hệ thống VoIP

Chương này là phần nội dung thực nghiệm trọng tâm của đồ án:

  • Khảo sát và phân tích yêu cầu: Xác định các ràng buộc kỹ thuật (ngôn ngữ Java, công cụ Eclipse kết hợp Android SDK, máy chủ nền UNIX) và yêu cầu hiệu năng (phục vụ nhiều người dùng đồng thời, duy trì chất lượng cuộc gọi ổn định).
  • Mô hình kiến trúc tổng quan: Xây dựng mô hình tương tác phân tán giữa client (UA đóng cả vai trò UAC và UAS) và signaling server Kamailio; xây dựng biểu đồ Use Case mô tả các tác vụ: quản lý tài khoản (thêm, sửa, xóa, đăng ký/hủy đăng ký), quản lý tin nhắn tức thời và quản lý cuộc gọi thoại.
  • Biểu đồ tuần tự nghiệp vụ: Chi tiết hóa quy trình tương tác qua biểu đồ tuần tự cho các chức năng: thêm/xem danh sách tài khoản, xóa/sửa tài khoản, xem/xóa nhật ký cuộc gọi, xem/xóa tin nhắn và quy trình gửi tin nhắn - thiết lập cuộc gọi thoại.
  • Triển khai máy chủ Kamailio: Hướng dẫn từng bước từ chuẩn bị gói phụ trợ, tải mã nguồn Git, chỉnh sửa Makefiles tích hợp module db_mysql và dialplan, biên dịch, cài đặt vào thư mục /usr/local/kamailio-3.1, khởi tạo cơ sở dữ liệu bằng kamdbctl và cấu hình tệp kamailio.cfg.
  • Biên dịch thư viện phía Client: Hướng dẫn sử dụng Android NDK (android-ndk-r4-crystax-4) biên dịch gói pjsip_android tạo ra tệp thư viện liên kết động libpjsipjni.so.
  • Thiết kế cơ sở dữ liệu và chi tiết cài đặt ứng dụng: Định nghĩa cấu trúc các bảng Account, CallLogs, Messages; chi tiết hóa mã nguồn các lớp nòng cốt trong SipService (xử lý logic cuộc gọi, cơ chế giữ máy, ngắt kết nối, tắt mic, bật loa ngoài), MediaManager (kết nối cổng âm thanh hai chiều qua conference bridge của PJSIP), UAStateReceiver, SipNotifications, các lớp mô hình dữ liệu (SipMessage, CallInfo, IAccount, AccountState), và các thành phần giao diện (AccountFormFactory, InCallActivity, các widget InCallInfo, InCallControls).

Kết luận

Chương kết luận tổng hợp mức độ hoàn thành công việc so với mục tiêu ban đầu, chỉ ra những hạn chế kỹ thuật còn tồn đọng và đề xuất các định hướng nghiên cứu, hoàn thiện hệ thống trong giai đoạn tiếp theo.

Kết quả và đóng góp

Kết quả thực nghiệm

  • Xây dựng thành công hệ thống VoIP hoàn chỉnh theo mô hình Client-Server. Phía máy chủ vận hành ổn định trên nền Debian Linux sử dụng Kamailio 3.0/3.1 kết hợp MySQL, có năng lực xử lý hàng nghìn phiên giao dịch mỗi giây theo thiết kế của mã nguồn mở.
  • Phía máy khách, ứng dụng softphone Android biên dịch thành công tệp libpjsipjni.so (hỗ trợ kiến trúc armeabi và armeabi-v7a), tích hợp giao diện điều khiển bằng Java thông qua AIDL và JNI (org.pjsua).
  • Ứng dụng thực hiện đầy đủ các chức năng: đăng ký tài khoản với cơ chế bảo mật SIP Digest (xác thực MD5 challenge/response không lộ mật khẩu dạng clear text), khởi tạo và tiếp nhận cuộc gọi hai chiều qua RTP, gửi và nhận tin nhắn tức thời (SIP MESSAGE), tạm dừng cuộc gọi (hold), ngắt cuộc gọi, quản lý trạng thái âm thanh (mute, speaker) và lưu trữ cục bộ danh sách tài khoản, lịch sử đàm thoại, tin nhắn bằng SQLite.
  • Thử nghiệm kiểm tra khả năng tương tác liên hệ thống (interoperability) thành công giữa ứng dụng VoIP Android với phần mềm softphone chuẩn công nghiệp X-Lite 3.0 trên máy tính cá nhân. Thử nghiệm trên mạng Wi-Fi ghi nhận chất lượng đàm thoại tương đối tốt.

Giải pháp và kiến nghị tác giả đề xuất

  • Xử lý ưu tiên cuộc gọi mạng viễn thông: Đăng ký lắng nghe sự kiện của hệ điều hành Android; khi có cuộc gọi mạng di động (GSM) đến, hệ thống tự động ưu tiên GSM và tạm dừng (hold) cuộc gọi VoIP IP, sau khi kết thúc cuộc gọi GSM mới khôi phục lại kết nối VoIP.
  • Xử lý biến động mạng: Khi thiết bị chuyển đổi hạ tầng kết nối mạng (từ 3G sang Wi-Fi hoặc ngược lại), địa chỉ IP cục bộ thay đổi, tác giả cài đặt giải pháp tự động tái khởi động SipService để đăng ký lại phiên làm việc với SIP Server.
  • Cấu hình linh hoạt cơ chế vượt NAT: Cung cấp tùy chọn cấu hình máy chủ STUN (như stun.fwdnet.net hoặc stun.counterpath.com) trong màn hình cài đặt, cho phép người dùng chủ động bật STUN khi ở mạng ngoài và tắt đi khi kết nối trong mạng LAN nội bộ.

Đóng góp kỹ thuật tự nêu

  • Làm chủ quy trình tích hợp thư viện mã nguồn mở C/C++ (PJSIP) vào môi trường lập trình ứng dụng Android thông qua bộ công cụ phát triển mã gốc NDK (Crystax NDK r4) tại thời điểm nền tảng Android (API 8) còn hạn chế về hỗ trợ VoIP gốc.
  • Đưa ra giải pháp kiến trúc phần mềm client hoàn chỉnh, tách biệt giao diện người dùng và tiến trình chạy ngầm xử lý giao thức viễn thông thông qua giao tiếp liên tiến trình AIDL, đảm bảo thiết bị vẫn nhận được cuộc gọi và tin nhắn ngay cả khi ứng dụng chính không hiển thị trên màn hình.

Hạn chế và hướng nghiên cứu tiếp

Các hạn chế kỹ thuật

Dựa trên đánh giá khách quan của tác giả trong văn bản, hệ thống còn tồn tại một số điểm hạn chế:

  • Giao diện của một số chức năng chưa được thiết kế tối ưu, chưa đạt được độ tiện dụng và thân thiện cao nhất cho người dùng.
  • Ứng dụng hoàn toàn thiếu chức năng quản lý danh bạ lưu trữ các địa chỉ SIP URI.
  • Đăng ký tài khoản người dùng mới chưa được tích hợp trên client mà phải đăng ký thủ công qua giao diện web của nhà cung cấp dịch vụ hoặc tạo trực tiếp bằng dòng lệnh trên server.
  • Chất lượng đàm thoại khi thử nghiệm trên hạ tầng mạng di động 3G còn thấp, độ trễ truyền gói tin còn lớn do đặc tính trễ của mạng di động tại thời điểm nghiên cứu.
  • Hệ thống chưa hỗ trợ bảo mật mã hóa cho bản tin báo hiệu SIP (chưa áp dụng TLS) và chưa mã hóa luồng dữ liệu thoại RTP (chưa áp dụng SRTP), dẫn đến nguy cơ bị nghe lén hoặc giả mạo.
  • Phía máy chủ Kamailio chưa có giao diện quản trị người dùng trên nền web mà phụ thuộc hoàn toàn vào các lệnh script điều khiển (kamctl).
  • Giải pháp vượt NAT bằng STUN không thể giải quyết được bài toán kết nối nếu client nằm sau thiết bị mạng thuộc loại Symmetric NAT.

Hướng nghiên cứu và phát triển tiếp theo

  • Cải tiến và chuẩn hóa giao diện người dùng để tăng tính tiện dụng và thẩm mỹ.
  • Nâng cao năng lực bảo mật toàn diện: triển khai giao thức TLS để mã hóa các gói tin báo hiệu SIP và tích hợp cơ chế bảo vệ luồng thoại chống nghe lén.
  • Xây dựng giao diện web quản trị tập trung phía máy chủ để quản lý người dùng và cấu hình dịch vụ trực quan.
  • Tối ưu hóa các bộ codec âm thanh nhằm nâng cao chất lượng nén và giảm thiểu độ trễ khi truyền thông qua mạng di động 3G.

Giá trị tham khảo

Đồ án là tài liệu kỹ thuật có giá trị tham khảo thiết thực cho sinh viên các ngành Công nghệ Thông tin, Kỹ thuật Phần mềm và Mạng truyền thông - Viễn thông khi nghiên cứu về kiến trúc VoIP và lập trình softphone.

Các nội dung có giá trị tham khảo chuyên sâu bao gồm:

  • Quy trình chi tiết biên dịch thư viện C/C++ đa nền tảng bằng Android NDK Crystax để tích hợp vào ứng dụng Android qua JNI.
  • Kỹ thuật xây dựng kiến trúc dịch vụ chạy ngầm độc lập sử dụng AIDL để kết nối IPC giữa giao diện (Activity) và khối giao thức (Service), đảm bảo cơ chế nhận cuộc gọi/tin nhắn theo thời gian thực kết hợp hệ thống thông báo Android Notification.
  • Phương pháp định tuyến và xử lý luồng âm thanh thông qua mô hình Conference Bridge trong PJSIP kết hợp với cơ chế quản lý trạng thái âm thanh (AudioFocus) trên hệ điều hành Android.
  • Tài liệu thực hành cấu hình máy chủ SIP Kamailio kết nối cơ sở dữ liệu MySQL trên Linux Debian, làm nền tảng triển khai cho các hệ thống tổng đài IP quy mô vừa và lớn.

Câu hỏi thường gặp

1. Ứng dụng xử lý như thế nào khi người dùng nhận được cuộc gọi mạng di động thông thường (GSM) trong lúc đang đàm thoại VoIP?
Trong lớp SipService, ứng dụng đăng ký lắng nghe sự kiện thay đổi trạng thái từ hệ điều hành Android. Hệ thống thiết lập quy tắc ưu tiên cuộc gọi GSM cao hơn cuộc gọi VoIP: nếu có cuộc gọi GSM kích hoạt, ứng dụng sẽ tự động chuyển cuộc gọi VoIP sang trạng thái tạm dừng (hold); sau khi cuộc gọi GSM kết thúc, phiên kết nối VoIP mới được khôi phục lại để người dùng tiếp tục đàm thoại.

2. Làm thế nào để giải quyết vấn đề thay đổi địa chỉ IP khi thiết bị di động chuyển vùng kết nối giữa mạng Wi-Fi và mạng 3G?
Khi trạng thái mạng thay đổi (ví dụ chuyển từ Wi-Fi sang 3G hoặc ngược lại), địa chỉ IP nội bộ của thiết bị sẽ thay đổi theo. SipService phát hiện sự kiện này thông qua hệ thống Android OS và thực hiện khởi động lại (restart) dịch vụ, sau đó gửi lại bản tin REGISTER lên Kamailio server để cập nhật địa chỉ tiếp nhận mới vào cơ sở dữ liệu định vị (Location Database).

3. Cơ chế bảo vệ mật khẩu tài khoản khi đăng ký với máy chủ SIP Kamailio hoạt động ra sao?
Đồ án áp dụng cơ chế xác thực SIP Digest theo chuẩn RFC 2617. Khi client gửi bản tin REGISTER đầu tiên, máy chủ phản hồi mã 401 Unauthorized chứa chuỗi ngẫu nhiên dùng một lần (nonce). Client sử dụng thuật toán băm MD5 để tính toán chuỗi kiểm tra tổng hợp từ username, password, realm và nonce, rồi gửi kết quả băm trong trường response của bản tin đăng ký tiếp theo. Nhờ đó, mật khẩu không bao giờ truyền trên đường truyền dưới dạng bản rõ (clear text).

4. Vì sao đồ án sử dụng giao diện AIDL và tệp ISipService trong kiến trúc client?
Giao thức VoIP đòi hỏi duy trì kết nối mạng liên tục để lắng nghe cuộc gọi đến, do đó PJSIP được nạp và thực thi trong một tiến trình nền (SipService). Nền tảng Android yêu cầu cơ chế giao tiếp liên tiến trình (IPC) để các giao diện người dùng (Activity) điều khiển dịch vụ này. Tác giả sử dụng AIDL (Android Interface Definition Language) để sinh ra giao diện ISipService, đóng vai trò cầu nối cho phép các Activity gọi các phương thức dịch vụ như makeCall, hangup, hold, sendMessage, setSpeakerphoneOn và tiếp nhận thông báo trạng thái mà không làm gián đoạn chu trình sống của ứng dụng.

5. Điểm hạn chế chính của giải pháp vượt NAT bằng giao thức STUN trong đồ án là gì?
STUN giúp client gửi yêu cầu đến máy chủ STUN công cộng để xác định cặp địa chỉ và cổng công khai (public IP:port) tương ứng trên thiết bị NAT, từ đó gửi thông tin này qua bản tin SDP cho phía bên kia kết nối trực tiếp luồng RTP. Tuy nhiên, giải pháp này chỉ hoạt động với các loại NAT thông thường (như Full Cone, Restricted Cone, Port Restricted Cone). Nếu thiết bị client nằm sau một mạng Symmetric NAT (loại NAT thay đổi cổng cho mỗi đích kết nối khác nhau), giao thức STUN hoàn toàn mất tác dụng và không thể thiết lập luồng truyền thông ngang hàng.

Kết luận

Đồ án tốt nghiệp của tác giả Nguyễn Khắc Vinh đã nghiên cứu toàn diện kiến trúc công nghệ VoIP và các thành phần cốt lõi của hệ điều hành di động Android. Tác giả đã thiết kế và triển khai thành công một hệ thống VoIP thực nghiệm hoàn chỉnh, kết hợp máy chủ định tuyến Kamailio v3.0 trên hệ điều hành Linux Debian với ứng dụng softphone đa luồng trên Android sử dụng thư viện gốc PJSIP biên dịch qua NDK. Kết quả thử nghiệm liên thông với phần mềm X-Lite 3.0 và khả năng đàm thoại ổn định trên mạng Wi-Fi đã chứng minh tính khả thi kỹ thuật của giải pháp, cung cấp tài liệu tham khảo chi tiết cho các nghiên cứu phát triển hệ thống truyền thông thoại qua giao thức IP trên thiết bị di động.