Xây Dựng Hệ Thống VoIP Trên Android: Đồ Án Tốt Nghiệp Của Sinh Viên Nguyễn Khắc Vinh
Trường đại học
Trường Đại Học Công Nghệ Thông TinChuyên ngành
Công Nghệ Thông TinNgười đăng
Ẩn danhThể loại
Đồ Án Tốt Nghiệp2023
Phí lưu trữ
30 PointMục lục chi tiết
Tóm tắt
I. Khám phá đồ án xây dựng hệ thống VoIP trên Android
Trong bối cảnh chi phí viễn thông truyền thống ngày càng tăng, công nghệ Thoại qua Giao thức Internet (VoIP) nổi lên như một giải pháp thay thế hiệu quả, đặc biệt trong môi trường doanh nghiệp. Đồ án tốt nghiệp "Xây Dựng Hệ Thống VoIP Trên Android" của sinh viên Nguyễn Khắc Vinh, thực hiện tại Trung tâm phần mềm Viettel, là một công trình nghiên cứu tiêu biểu, đi sâu vào việc ứng dụng công nghệ này trên nền tảng di động phổ biến nhất thế giới. Đề tài không chỉ giải quyết bài toán liên lạc nội bộ chi phí thấp bằng cách tận dụng hạ tầng mạng IP có sẵn (Wi-Fi, 3G/4G), mà còn mở ra hướng phát triển các ứng dụng liên lạc đa phương tiện phức tạp hơn. Trọng tâm của đồ án là xây dựng một hệ thống VoIP hoàn chỉnh, bao gồm cả phía client (một ứng dụng softphone trên di động chạy trên Android) và phía server (sử dụng một SIP Proxy mạnh mẽ). Nghiên cứu này đóng vai trò quan trọng trong việc thử nghiệm tính khả thi của công nghệ VoIP, làm tiền đề cho các dự án thương mại trong tương lai. Việc phân tích sâu các giao thức SIP (Session Initiation Protocol) và RTP (Real-time Transport Protocol) là nền tảng cốt lõi, giúp hiểu rõ cơ chế thiết lập, duy trì và kết thúc một phiên liên lạc. Đồ án của Nguyễn Khắc Vinh không chỉ là một báo cáo đồ án tốt nghiệp thông thường, mà còn là một tài liệu hướng dẫn chi tiết về lập trình Android trong lĩnh vực truyền thông thời gian thực, mang lại giá trị tham khảo cao cho cộng đồng phát triển.
1.1. Bối cảnh và mục tiêu của đề tài nghiên cứu VoIP
Đề tài ra đời từ nhu cầu thực tiễn của các doanh nghiệp: tối ưu hóa chi phí liên lạc nội bộ. Với hạ tầng mạng IP và Wi-Fi đã phổ biến, việc xây dựng một hệ thống gọi điện riêng biệt gần như không tốn thêm chi phí. Mục tiêu chính của đồ án là tìm hiểu sâu về kiến trúc VoIP và hệ điều hành Android. Từ đó, xây dựng một ứng dụng gọi điện Android hoàn chỉnh, có khả năng thực hiện cuộc gọi thoại qua mạng IP. Nhiệm vụ cụ thể bao gồm việc lựa chọn các công nghệ phù hợp như thư viện client và proxy server, triển khai một hệ thống VoIP cơ bản, giải quyết các vấn đề bảo mật tài khoản và lựa chọn giao thức vượt NAT hiệu quả. Sản phẩm cuối cùng là một hệ thống demo hoàn chỉnh, chứng minh tính khả thi và tiềm năng của công nghệ.
1.2. Giới thiệu công nghệ VoIP và Giao thức SIP cơ bản
VoIP (Voice over Internet Protocol) là công nghệ số hóa tín hiệu giọng nói và truyền chúng đi dưới dạng các gói tin qua mạng IP. Một hệ thống VoIP cơ bản bao gồm hai giao thức chính: giao thức báo hiệu (Signaling Protocol) và giao thức truyền tải (Speech Transmission Protocol). Giao thức SIP là chuẩn báo hiệu phổ biến nhất, được sử dụng để thiết lập, thay đổi và kết thúc các phiên liên lạc. SIP hoạt động ở tầng ứng dụng, sử dụng các bản tin dạng văn bản tương tự HTTP. Các phương thức quan trọng của SIP bao gồm INVITE (thiết lập phiên), ACK (xác nhận), BYE (kết thúc phiên), và REGISTER (đăng ký vị trí người dùng). Trong khi đó, giao thức RTP chịu trách nhiệm truyền tải các gói tin âm thanh/video đã được số hóa, đảm bảo yếu tố thời gian thực.
II. Thách thức kỹ thuật khi xây dựng ứng dụng VoIP Android
Việc triển khai một hệ thống VoIP trên Android không chỉ đơn thuần là lập trình giao diện. Nó đòi hỏi phải giải quyết các thách thức kỹ thuật phức tạp, vốn là rào cản lớn đối với các ứng dụng truyền thông thời gian thực. Hai trong số những vấn đề nổi cộm nhất được đồ án của Nguyễn Khắc Vinh tập trung giải quyết là xác thực dữ liệu và vượt tường lửa NAT. Các bản tin SIP theo mặc định được truyền dưới dạng văn bản thuần túy (clear text), tạo ra lỗ hổng bảo mật nghiêm trọng, cho phép kẻ xấu có thể đánh cắp thông tin tài khoản người dùng. Thêm vào đó, hầu hết các thiết bị di động hiện nay đều kết nối Internet thông qua một thiết bị NAT (Network Address Translation). Cơ chế này, mặc dù giúp tiết kiệm địa chỉ IPv4 và tăng cường bảo mật, lại phá vỡ nguyên tắc kết nối ngang hàng (peer-to-peer) của VoIP, khiến các gói tin thoại không thể đến được đích. Việc không giải quyết triệt để hai vấn đề này sẽ khiến hệ thống không thể hoạt động ổn định và an toàn trong môi trường thực tế. Do đó, việc tìm hiểu và áp dụng các giải pháp như SIP Digest Authentication và NAT Traversal (STUN, TURN) là yêu cầu bắt buộc đối với bất kỳ mã nguồn VoIP Android nào muốn được triển khai rộng rãi.
2.1. Vấn đề xác thực dữ liệu và bảo mật trong giao thức SIP
Các bản tin SIP chứa thông tin nhạy cảm như username và password. Nếu truyền đi dưới dạng clear text, chúng dễ dàng bị bắt gói và đọc trộm. Để giải quyết, đồ án đã lựa chọn giải pháp SIP Digest Authentication, dựa trên cơ chế xác thực được định nghĩa trong RFC 2617. Theo phương pháp này, client không gửi mật khẩu trực tiếp. Thay vào đó, server gửi một giá trị "nonce" (dãy số dùng một lần). Client sử dụng nonce này kết hợp với username và password để tạo ra một chuỗi checksum (hash) bằng thuật toán MD5 và gửi lại cho server. Server thực hiện tính toán tương tự để xác thực. Bằng cách này, mật khẩu không bao giờ tồn tại dưới dạng clear text trên đường truyền, giúp bảo mật tài khoản người dùng một cách hiệu quả.
2.2. Bài toán vượt NAT NAT Traversal trong mạng di động
NAT (Network Address Translation) thay đổi địa chỉ IP và port trong các gói tin đi ra ngoài mạng nội bộ. Điều này khiến địa chỉ mà client gửi đi trong bản tin SIP (địa chỉ nội bộ) khác với địa chỉ mà server nhận được (địa chỉ công cộng của NAT). Để giải quyết vấn đề này cho các tín hiệu SIP, server sẽ ghi nhận địa chỉ IP và port công cộng của client và sử dụng thông tin này để gửi lại các bản tin phản hồi. Đối với luồng media (RTP), giải pháp được đề xuất là sử dụng STUN (Session Traversal Utilities for NAT). Client sẽ gửi yêu cầu tới một STUN server bên ngoài để xác định địa chỉ IP và port công cộng của mình, sau đó gửi thông tin này cho đầu cuối bên kia để thiết lập kết nối RTP trực tiếp.
III. Giải pháp kiến trúc Client Server cho hệ thống VoIP
Để xây dựng một hệ thống VoIP ổn định và có khả năng mở rộng, việc thiết kế một kiến trúc phù hợp là yếu tố tiên quyết. Đồ án của Nguyễn Khắc Vinh đã lựa chọn mô hình kiến trúc client-server kết hợp với peer-to-peer, một mô hình tiêu chuẩn trong ngành VoIP. Trong đó, thành phần Server đóng vai trò trung tâm điều phối, xác thực và định tuyến cuộc gọi, còn thành phần Client là các ứng dụng softphone trên di động. Phía Server, nghiên cứu đã chọn Kamailio (trước đây là OpenSER), một SIP Proxy mã nguồn mở hiệu năng cao, có khả năng xử lý hàng nghìn cuộc gọi mỗi giây. Kamailio đóng hai vai trò chính: Proxy Server để chuyển tiếp các bản tin SIP và Registrar Server để quản lý trạng thái và vị trí của người dùng. Phía Client, ứng dụng VoIP Android được phát triển để hoạt động như một User Agent (UA), có thể đóng vai trò là User Agent Client (UAC) khi khởi tạo cuộc gọi, và User Agent Server (UAS) khi nhận cuộc gọi. Sự kết hợp giữa một server mạnh mẽ và một client linh hoạt tạo nên một hệ thống hoàn chỉnh, đảm bảo luồng thông tin được xử lý hiệu quả, từ quá trình đăng ký tài khoản cho đến khi thiết lập và kết thúc một cuộc gọi thoại.
3.1. Vai trò của Server Lựa chọn Kamailio làm SIP Proxy
Kamailio được chọn làm SIP server trung tâm nhờ vào hiệu năng vượt trội và khả năng mở rộng. Nó hoạt động như một tổng đài IP PBX linh hoạt, có nhiệm vụ chính là định tuyến các bản tin SIP. Khi một người dùng (UAC) muốn thực hiện cuộc gọi, yêu cầu INVITE sẽ được gửi đến Kamailio. Kamailio, với vai trò là Registrar, sẽ tra cứu trong cơ sở dữ liệu để tìm địa chỉ IP hiện tại của người nhận và chuyển tiếp yêu cầu đến đó. Quan trọng là, sau khi phiên gọi đã được thiết lập thành công, Kamailio sẽ không tham gia vào quá trình truyền tải âm thanh. Luồng media RTP sẽ được truyền trực tiếp giữa hai client (peer-to-peer), giúp giảm tải cho server và tối ưu hóa đường truyền.
3.2. Cấu trúc Client Xây dựng ứng dụng Softphone Android
Ứng dụng client trên Android được thiết kế để tương tác với người dùng và giao tiếp với SIP server. Kiến trúc của ứng dụng được chia thành nhiều lớp rõ ràng. Lớp giao diện (UI) chịu trách nhiệm hiển thị các màn hình như danh bạ, lịch sử cuộc gọi, màn hình gọi điện. Lớp dịch vụ (Service) chạy ngầm để duy trì kết nối với server, lắng nghe các cuộc gọi đến ngay cả khi ứng dụng không mở. Lớp này sử dụng thư viện PJSIP để xử lý các giao thức SIP và RTP. Lớp mô hình (Models) định nghĩa các đối tượng dữ liệu như tài khoản, tin nhắn, cuộc gọi. Cuối cùng, lớp tiện ích (Utils) chứa các công cụ hỗ trợ như truy cập cơ sở dữ liệu SQLite và quản lý kết nối mạng. Cấu trúc này giúp ứng dụng dễ bảo trì và mở rộng.
IV. Hướng dẫn lập trình ứng dụng VoIP Android với PJSIP
Phát triển một ứng dụng gọi điện Android từ đầu là một công việc phức tạp. Đồ án đã đưa ra một lựa chọn thông minh khi sử dụng PJSIP, một thư viện mã nguồn mở, đa nền tảng viết bằng ngôn ngữ C. Thư viện PJSIP nổi bật với hiệu năng cao, kích thước nhỏ và tích hợp sẵn đầy đủ các thành phần cần thiết cho một ứng dụng VoIP: một SIP stack hoàn chỉnh, một media framework mạnh mẽ và các cơ chế NAT Traversal. Việc tích hợp PJSIP vào một dự án Android được thực hiện thông qua JNI (Java Native Interface), cho phép mã Java gọi các hàm được viết bằng C. Đồ án đã trình bày chi tiết các bước để biên dịch PJSIP cho nền tảng Android, tạo ra file thư viện liên kết động (.so). Sau khi tích hợp, việc lập trình Android trở nên đơn giản hơn. Lập trình viên có thể tập trung vào việc xây dựng giao diện người dùng và logic nghiệp vụ, trong khi các tác vụ phức tạp như gửi nhận bản tin SIP, mã hóa/giải mã codec âm thanh (Opus, G.711), và quản lý luồng RTP đã được PJSIP xử lý một cách hiệu quả. Đây là một phương pháp tiếp cận thực tiễn, giúp giảm đáng kể thời gian và chi phí phát triển.
4.1. Lựa chọn thư viện PJSIP Ưu điểm và cách tích hợp
PJSIP được chọn vì nhiều lý do. Thứ nhất, nó được viết bằng C, mang lại hiệu năng cao và độ ổn định, rất quan trọng cho các ứng dụng thời gian thực. Thứ hai, nó có kích thước nhỏ (small footprint), phù hợp với các thiết bị di động có tài nguyên hạn chế. Thứ ba, PJSIP là một thư viện toàn diện, đã đóng gói sẵn các module xử lý media và NAT, giúp lập trình viên không cần tích hợp nhiều thư viện riêng lẻ. Việc tích hợp vào Android SDK đòi hỏi sử dụng Android NDK (Native Development Kit) để biên dịch mã nguồn C thành thư viện .so. Sau đó, trong ứng dụng Android, thư viện này được nạp vào bộ nhớ và các hàm của nó có thể được gọi thông qua JNI, tạo thành cầu nối giữa thế giới Java của Android và thế giới C của PJSIP.
4.2. Thiết kế cơ sở dữ liệu SQLite cho lịch sử và tài khoản
Mỗi ứng dụng Android cần một nơi để lưu trữ dữ liệu bền vững. Đồ án sử dụng SQLite, hệ cơ sở dữ liệu tích hợp sẵn trong Android. Cấu trúc cơ sở dữ liệu được thiết kế gồm các bảng chính: Account (lưu thông tin tài khoản SIP như username, password, server), CallLog (lưu lịch sử các cuộc gọi đi, đến, và nhỡ), và Message (lưu trữ các tin nhắn tức thời). Một lớp DBAdapter được tạo ra để xử lý tất cả các thao tác với CSDL như thêm, sửa, xóa, và truy vấn dữ liệu. Thiết kế này đảm bảo rằng thông tin người dùng được lưu trữ cục bộ, cho phép ứng dụng hoạt động nhanh chóng và có thể truy cập lịch sử ngay cả khi không có kết nối mạng.
V. Kết quả thực tiễn từ đồ án xây dựng VoIP trên Android
Kết quả của luận văn tốt nghiệp CNTT này không chỉ dừng lại ở lý thuyết mà đã xây dựng thành công một hệ thống VoIP hoạt động được. Ứng dụng client trên Android có đầy đủ các chức năng cơ bản của một softphone: quản lý nhiều tài khoản SIP, thực hiện và nhận cuộc gọi, hiển thị lịch sử cuộc gọi và gửi tin nhắn tức thời. Về mặt hiệu năng, hệ thống đã được thử nghiệm và cho kết quả khả quan. Khi sử dụng mạng Wi-Fi, chất lượng cuộc gọi tốt, độ trễ thấp, tương đương với các dịch vụ gọi điện thương mại. Trên mạng 3G, chất lượng thoại có phần suy giảm và độ trễ lớn hơn, đây là một hạn chế cố hữu của mạng di động. Hệ thống đã chứng minh được tính đúng đắn của kiến trúc và các giải pháp công nghệ đã chọn. Việc sử dụng Kamailio server đảm bảo khả năng chịu tải cao, trong khi thư viện PJSIP giúp ứng dụng client hoạt động ổn định và hiệu quả. Đồ án đã thành công trong việc tạo ra một sản phẩm thử nghiệm, là nền tảng vững chắc để Trung tâm phần mềm Viettel tiếp tục phát triển các dự án VoIP quy mô lớn hơn trong tương lai, bao gồm cả việc hỗ trợ gọi video call qua IP.
5.1. Các chức năng chính của ứng dụng VoIP Android hoàn chỉnh
Ứng dụng Voip Android được phát triển trong đồ án bao gồm một loạt các chức năng cốt lõi. Chức năng quản lý tài khoản cho phép người dùng thêm, sửa, xóa và đăng ký/hủy đăng ký tài khoản với SIP server. Chức năng quản lý cuộc gọi cho phép thiết lập một cuộc gọi đến một địa chỉ SIP URI, trả lời hoặc từ chối cuộc gọi đến, giữ máy (hold), và tắt/bật micro hoặc loa ngoài. Toàn bộ lịch sử cuộc gọi (call logs) đều được lưu trữ và hiển thị. Ngoài ra, ứng dụng còn hỗ trợ gửi và nhận tin nhắn tức thời (Instant Messaging), một tính năng quan trọng trong các ứng dụng liên lạc hiện đại.
5.2. Đánh giá ưu và nhược điểm của hệ thống đã xây dựng
Hệ thống có nhiều ưu điểm nổi bật. Về phía server, Kamailio đảm bảo hiệu năng và khả năng mở rộng. Về phía client, PJSIP giúp rút ngắn thời gian phát triển và đảm bảo hiệu suất. Hệ thống tận dụng được hạ tầng mạng IP có sẵn, giúp tiết kiệm chi phí đàm thoại. Tuy nhiên, hệ thống vẫn còn một số nhược điểm. Giao diện người dùng chưa được tối ưu hoàn toàn về trải nghiệm. Chất lượng đàm thoại trên mạng 3G còn phụ thuộc nhiều vào điều kiện mạng. Đặc biệt, hệ thống chưa triển khai các cơ chế bảo mật nâng cao cho luồng media như SRTP, khiến các cuộc hội thoại có nguy cơ bị nghe lén.
VI. Kết luận và định hướng phát triển hệ thống VoIP Android
Đồ án "Xây Dựng Hệ Thống VoIP Trên Android" của Nguyễn Khắc Vinh đã hoàn thành xuất sắc các mục tiêu đề ra. Công trình đã đi sâu nghiên cứu công nghệ VoIP, tìm hiểu lập trình Android và xây dựng thành công một hệ thống VoIP cơ bản từ client đến server. Đây là một minh chứng rõ ràng về tính khả thi và tiềm năng của việc ứng dụng VoIP trên nền tảng di động. Những kết quả đạt được là nền tảng quý giá cho các nghiên cứu và phát triển sâu hơn. Hướng phát triển trong tương lai cho hệ thống này rất rộng mở. Trước hết, cần cải tiến giao diện người dùng để thân thiện và tiện lợi hơn. Vấn đề quan trọng nhất là nâng cao bảo mật, cần áp dụng các giao thức mã hóa như TLS cho tín hiệu SIP và SRTP cho luồng media để chống nghe lén và giả mạo. Ngoài ra, việc tối ưu hóa các codec âm thanh và thuật toán xử lý để cải thiện chất lượng cuộc gọi trên mạng 3G/4G là một hướng đi cần thiết. Cuối cùng, hệ thống có thể được mở rộng để hỗ trợ các tính năng cao cấp hơn như hội nghị đa điểm (conference calls) và gọi video call qua IP, đáp ứng nhu cầu ngày càng cao của thị trường.
6.1. Tự đánh giá các nhiệm vụ đã hoàn thành trong luận văn
Nhìn chung, đồ án đã thực hiện thành công các nhiệm vụ trọng tâm. Việc nghiên cứu lý thuyết về công nghệ VoIP, giao thức SIP, RTP và các thách thức như NAT đã được trình bày chi tiết. Việc xây dựng ứng dụng client trên Android dựa vào thư viện PJSIP đã được hoàn thành, tạo ra một sản phẩm hoạt động được. Một hệ thống VoIP cơ bản bao gồm cả server và client đã được thiết lập và thử nghiệm, chứng minh được các khái niệm đã nghiên cứu. Đồ án là một công trình toàn diện, thể hiện khả năng nghiên cứu độc lập và ứng dụng kiến thức vào giải quyết bài toán thực tế của sinh viên.
6.2. Các hướng cải tiến Bảo mật TLS SRTP và chất lượng 3G
Để đưa hệ thống vào ứng dụng thực tế, một số cải tiến là bắt buộc. Về bảo mật, cần triển khai TLS (Transport Layer Security) để mã hóa các bản tin SIP, ngăn chặn việc đọc trộm thông tin đăng nhập. Đồng thời, SRTP (Secure Real-time Transport Protocol) phải được áp dụng để mã hóa luồng âm thanh, đảm bảo tính riêng tư của cuộc hội thoại. Về chất lượng, đặc biệt là trên mạng 3G, cần nghiên cứu các codec âm thanh hiện đại hơn như Opus, vốn được thiết kế để hoạt động tốt trong điều kiện mạng không ổn định, giúp giảm độ trễ và cải thiện chất lượng thoại một cách đáng kể.
TÀI LIỆU LIÊN QUAN
Bạn đang xem trước tài liệu:
Xây dựng hệ thống voip trên hệ điều hành android