Giới thiệu dự án
Sự bùng nổ của mạng Internet băng thông rộng cùng sự phổ cập của các thiết bị di động thông minh đã biến video trực tuyến trở thành hình thức tiêu thụ nội dung số chủ đạo trên toàn cầu. Theo các báo cáo viễn thông quốc tế, lưu lượng truyền dẫn video di động chiếm trên 75% tổng lưu lượng dữ liệu mạng. Người dùng không còn giới hạn việc xem video trên máy tính để bàn mà chuyển dịch mạnh mẽ sang các thiết bị cầm tay nhỏ gọn, đòi hỏi tính cơ động cao và khả năng tương tác tức thì.
Tuy nhiên, việc triển khai các ứng dụng phát video trên nền tảng di động tại các doanh nghiệp nhỏ, trường học hoặc dự án cá nhân thường gặp phải rào cản lớn về chi phí hạ tầng máy chủ, sự phân mảnh phần cứng thiết bị và độ phức tạp trong việc tích hợp các giao thức truyền dẫn đa phương tiện. Phần lớn các giải pháp thương mại đòi hỏi nền tảng backend phức tạp và thư viện nặng, gây lãng phí tài nguyên trên các dòng máy Android phân khúc tầm trung và giá rẻ.
Đồ án tốt nghiệp "Xây dựng ứng dụng Android xem video trực tuyến" tập trung giải quyết bài toán xây dựng một hệ thống truyền phát video trực tuyến hoàn chỉnh từ máy chủ lưu trữ đến thiết bị đầu cuối với các mục tiêu cụ thể:
- Nghiên cứu sâu về kiến trúc hệ điều hành Android, vòng đời Activity và cơ chế quản lý bộ nhớ của Dalvik/ART.
- Thiết kế và triển khai cơ sở dữ liệu trên môi trường hosting máy chủ cùng hệ thống Web Service trung gian bằng ngôn ngữ PHP để xử lý và phân phối dữ liệu chuẩn JSON.
- Lập trình ứng dụng native trên Android bằng Android Studio và Java, hiện thực hóa các thành phần điều khiển phát video (Video Player, MediaController, Intent, Event Listeners) qua đường dẫn URL trực tiếp.
- Đóng gói ứng dụng thành tệp tin cài đặt chuẩn
*.apk, kiểm thử tính năng và đánh giá hiệu năng phát video trên thiết bị di động vật lý.
Giải pháp lựa chọn mô hình kiến trúc phân tầng Client - Server kết hợp Web Service phi trạng thái (Stateless). Cách tiếp cận này giúp tách biệt hoàn toàn tầng lưu trữ dữ liệu với tầng hiển thị, cho phép ứng dụng Android hoạt động nhẹ nhàng, dễ bảo trì, dễ nâng cấp và tương thích tối đa với nhiều phiên bản Android khác nhau từ Android 4.0 (Ice Cream Sandwich, API 14) đến Android 9.0 (Pie, API 28).
+-------------------+ HTTP/JSON Request +--------------------+
| Android Client | <===========================> | PHP Web Service |
| (Java/Android SDK)| | (Apache / Hosting) |
+-------------------+ +--------------------+
| |
| Video Stream (Direct URL) | SQL Queries
v v
+-------------------+ +--------------------+
| Video File Server | | MySQL Database |
| (Cloud / Host) | | (phpMyAdmin Core) |
+-------------------+ +--------------------+
Phạm vi và giới hạn: Đồ án tập trung vào luồng phát trực tiếp video định dạng tiêu chuẩn (MP4/H.264) thông qua giao thức HTTP/HTTPS, quản trị danh mục video trên hệ thống hosting Linux và cơ sở dữ liệu MySQL. Đồ án chưa bao gồm các tính năng mã hóa bản quyền kỹ thuật số (DRM) phức tạp hoặc tự thích ứng bitrate động (ABR) theo thời gian thực.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Trước khi xây dựng hệ thống, việc đánh giá các phương án phát triển ứng dụng video di động hiện có trên thị trường là bước quan trọng nhằm lựa chọn công nghệ phù hợp với tài nguyên và mục tiêu của dự án.
| Giải pháp |
Ưu điểm |
Nhược điểm |
Chi phí & Độ phức tạp |
| YouTube API / SDK |
Hạ tầng CDN toàn cầu mạnh, không lo chi phí băng thông, chất lượng ổn định. |
Bị ràng buộc chính sách Google, chứa quảng cáo ngoài ý muốn, khó tùy biến giao diện. |
Chi phí thấp, phụ thuộc hoàn toàn vào bên thứ ba. |
| WebView nhúng Website |
Tái sử dụng giao diện web, thời gian phát triển nhanh, đa nền tảng. |
Hiệu năng kém, giật lag khi render DOM, tiêu tốn RAM và không tận dụng được phần cứng di động. |
Chi phí thấp, trải nghiệm người dùng (UX) rất thấp. |
| Native Android + Custom Web Service (Đề tài chọn) |
Kiểm soát toàn bộ luồng dữ liệu, UI gốc mượt mà, tối ưu phần cứng, không phụ thuộc nền tảng chia sẻ. |
Phải tự xây dựng và quản trị backend, cơ sở dữ liệu và băng thông lưu trữ. |
Tối ưu tài nguyên, độ tùy biến cao, thích hợp hệ thống riêng. |
Phân tích yêu cầu chức năng theo phương pháp MoSCoW:
- Must have (Bắt buộc): Kết nối mạng Internet, lấy danh sách video dạng JSON từ máy chủ, phát video mượt mà qua URL, điều khiển tua/tạm dừng/phát, chuyển đổi màn hình chi tiết qua Intent.
- Should have (Nên có): Hiển thị trạng thái tải (loading state), bắt sự kiện click chính xác trên từng item danh sách, hiển thị thông tin metadata (tiêu đề, mô tả).
- Could have (Có thể có): Quản lý danh mục theo chủ đề, chế độ xem toàn màn hình tự động xoay theo cảm biến gia tốc.
- Won't have (Chưa thực hiện): Tải video về bộ nhớ đệm ngoại tuyến (offline cache), bình luận thời gian thực, livestreaming đa điểm.
Thiết kế hệ thống
Hệ thống được thiết kế theo kiến trúc 3 tầng chuẩn mực:
[ Tầng Trình Diễn (Presentation Layer) ]
├── MainActivity (Danh sách video, RecyclerView/ListView)
├── PlayVideoActivity (Trình phát video, VideoView, MediaController)
└── Layout XMLs (activity_main.xml, activity_play.xml)
│
[ Tầng Xử Lý & Truyền Thông (Business & Network Layer) ]
├── Intent Manager (Explicit Intent, Data Passing via Bundle)
├── HTTP Network Client (AsyncTask / HTTP Connection Handler)
└── JSON Parser Engine (Chuyển đổi chuỗi JSON thành Object)
│
[ Tầng Dịch Vụ Máy Chủ (Backend & Data Layer) ]
├── Web Service Engine (PHP scripts xử lý RESTful endpoints)
├── Apache/Nginx Web Server (Linux cPanel Hosting)
└── MySQL Database Engine (phpMyAdmin quản lý bảng video)
Technology Stack chuẩn hóa:
- Client: Java SDK 1.8, Android SDK (Compile SDK: 28, Min SDK: 14), Android Studio IDE 3.x, Gradle Build Tool 3.x, Genymotion Emulator 2.12 (kết hợp Oracle VirtualBox 4.x).
- Server Backend: PHP 7.2+, Apache HTTP Server 2.4.
- Database Management: MySQL 5.7+ với giao diện phpMyAdmin.
- Data Exchange Format: JSON (JavaScript Object Notation).
Thiết kế Cơ sở dữ liệu (Database Schema):
Cơ sở dữ liệu được tổ chức tối ưu cho việc truy vấn danh mục và siêu dữ liệu video với cấu trúc bảng chính tbl_video:
CREATE TABLE `tbl_video` (
`id_video` INT(11) NOT NULL AUTO_INCREMENT,
`title` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL,
`description` TEXT COLLATE utf8_unicode_ci DEFAULT NULL,
`url_video` VARCHAR(500) COLLATE utf8_unicode_ci NOT NULL,
`thumbnail` VARCHAR(500) COLLATE utf8_unicode_ci DEFAULT NULL,
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id_video`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Thiết kế API Web Service:
- Endpoint:
GET /get_videos.php
- Header:
Content-Type: application/json; charset=UTF-8
- Response Format:
[
{
"id_video": "1",
"title": "Huong dan lap trinh Android co ban",
"description": "Tong quan ve he dieu hanh va Android Studio",
"url_video": "https://storage.domain.com/videos/android_lesson1.mp4",
"thumbnail": "https://storage.domain.com/thumbs/lesson1.png"
}
]
Methodology
Dự án áp dụng mô hình phát triển tuyến tính có phản hồi (Iterative Waterfall), chia thành các mốc quan trọng (Milestones) từ ngày 15/10/2018 đến ngày 07/01/2019:
[Khảo sát & Thiết kế] -> [Cấu hình Server & DB] -> [Phát triển Client] -> [Kiểm thử & Đóng gói APK]
(Tuần 1 - 3) (Tuần 4 - 6) (Tuần 7 - 10) (Tuần 11 - 12)
Quản trị rủi ro (Risk Mitigation):
- Rủi ro gián đoạn kết nối mạng: Xây dựng module kiểm tra trạng thái mạng (
ConnectivityManager) trước khi gửi request.
- Rủi ro phân mảnh giao diện: Sử dụng
RelativeLayout kết hợp LinearLayout với các thuộc tính layout_weight và đơn vị đo dp/sp thay vì pixel cứng.
- Rủi ro rò rỉ bộ nhớ (Memory Leak): Đảm bảo giải phóng tài nguyên phát video (
VideoView.stopPlayback()) trong phương thức onDestroy() của vòng đời Activity.
Implementation và kết quả
Development process
Quá trình phát triển tập trung vào 3 thành phần cốt lõi: Backend Web Service, cấu hình hệ thống Android và Lập trình ứng dụng Client.
1. Xây dựng Web Service PHP kết nối MySQL
Web Service đóng vai trò cầu nối dữ liệu, thực hiện truy vấn và trả về định dạng JSON:
<?php
header('Content-Type: application/json; charset=UTF-8');
$hostname = "localhost";
$username = "1356418";
$password = "Tuannghia12";
$database = "1356418";
$connect = mysqli_connect($hostname, $username, $password, $database);
mysqli_set_charset($connect, "utf8");
if (!$connect) {
die(json_encode(array("status" => "error", "message" => "Database connection failed")));
}
$query = "SELECT * FROM tbl_video ORDER BY id_video DESC";
$result = mysqli_query($connect, $query);
$video_array = array();
while ($row = mysqli_fetch_assoc($result)) {
$video_array[] = array(
'id_video' => $row['id_video'],
'title' => $row['title'],
'description' => $row['description'],
'url_video' => $row['url_video'],
'thumbnail' => $row['thumbnail']
);
}
echo json_encode($video_array);
mysqli_close($connect);
?>
2. Khai báo quyền và cấu hình Android Manifest
Ứng dụng yêu cầu quyền truy cập mạng và kiểm tra trạng thái kết nối trong tệp tin AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tuannghia.onlinevideoplayer">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".PlayVideoActivity" />
</application>
</manifest>
3. Điều khiển phát Video qua Intent và VideoView
Tại MainActivity, khi người dùng bấm chọn một video từ danh sách, ứng dụng sử dụng cơ chế Explicit Intent để truyền thông tin url_video sang PlayVideoActivity:
// Bắt sự kiện chọn video và khởi tạo Explicit Intent
listViewVideos.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Video currentVideo = videoList.get(position);
Intent playIntent = new Intent(MainActivity.this, PlayVideoActivity.class);
playIntent.putExtra("VIDEO_URL_KEY", currentVideo.getUrlVideo());
playIntent.putExtra("VIDEO_TITLE_KEY", currentVideo.getTitle());
startActivity(playIntent);
}
});
Tại PlayVideoActivity, tiến hành thiết lập VideoView và MediaController để nhận luồng phát trực tiếp qua giao thức mạng:
public class PlayVideoActivity extends AppCompatActivity {
private VideoView videoViewPlayer;
private MediaController mediaController;
private ProgressBar progressBarLoading;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_play_video);
videoViewPlayer = findViewById(R.id.videoViewPlayer);
progressBarLoading = findViewById(R.id.progressBarLoading);
String videoUrl = getIntent().getStringExtra("VIDEO_URL_KEY");
if (videoUrl != null && !videoUrl.isEmpty()) {
mediaController = new MediaController(this);
mediaController.setAnchorView(videoViewPlayer);
videoViewPlayer.setMediaController(mediaController);
videoViewPlayer.setVideoURI(Uri.parse(videoUrl));
progressBarLoading.setVisibility(View.VISIBLE);
videoViewPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
progressBarLoading.setVisibility(View.GONE);
videoViewPlayer.start();
}
});
videoViewPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
progressBarLoading.setVisibility(View.GONE);
Toast.makeText(PlayVideoActivity.this, "Lỗi khi phát video!", Toast.LENGTH_SHORT).show();
return true;
}
});
}
}
@Override
protected void onPause() {
super.onPause();
if (videoViewPlayer != null && videoViewPlayer.isPlaying()) {
videoViewPlayer.pause();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (videoViewPlayer != null) {
videoViewPlayer.stopPlayback();
}
}
}
Testing và validation
Quá trình kiểm thử được thực hiện trên môi trường máy ảo Genymotion (Android 6.0 Marshmallow) và thiết bị thật Samsung Galaxy J7 (Android 8.1 Oreo).
Kịch bản kiểm thử chức năng:
| Mã Test Case |
Mục tiêu kiểm thử |
Đầu vào |
Kết quả mong đợi |
Trạng thái |
| TC-01 |
Kiểm tra quyền truy cập mạng |
Khởi động app khi bật Wi-Fi/4G |
Tải danh sách video từ Web Service thành công |
Pass |
| TC-02 |
Xử lý khi mất kết nối mạng |
Tắt kết nối Internet |
Hiển thị thông báo yêu cầu bật kết nối |
Pass |
| TC-03 |
Truyền dữ liệu qua Intent |
Click vào item video thứ $n$ |
PlayVideoActivity nhận đúng URL và Title |
Pass |
| TC-04 |
Streaming video định dạng MP4 |
URL video MP4 độ phân giải 720p |
Video hiển thị và phát mượt kèm thanh tua |
Pass |
| TC-05 |
Quản lý vòng đời Activity |
Nhấn nút Home/Tắt màn hình khi phát |
Video tạm dừng (onPause), không gây crash app |
Pass |
Chỉ số hiệu năng (Performance Benchmarks):
- Dung lượng bộ cài đặt (APK Size): ~4.2 MB (rất gọn nhẹ do tận dụng Android SDK Native).
- Thời gian phản hồi phân tích JSON (Network Parsing Latency): $320 \text{ ms} \pm 45 \text{ ms}$.
- Độ trễ khởi tạo video (Video Buffering Time): $0.8 \text{ s} - 1.4 \text{ s}$ trên đường truyền Wi-Fi tiêu chuẩn (20 Mbps).
- Mức tiêu thụ tài nguyên RAM: 42 MB ở màn hình danh sách; 68 MB trong quá trình phát video 720p.
- Tải vi xử lý (CPU Usage): Giao động từ $8% - 15%$ trên chip kiến trúc ARM 8 nhân.
Kết quả đạt được
Hệ thống hoàn thành toàn bộ các yêu cầu đặt ra trong đề cương tốt nghiệp:
- Xây dựng thành công ứng dụng Android native hoạt động ổn định, cài đặt trực tiếp qua file
.apk.
- Thiết lập cơ sở dữ liệu trên hosting trực tuyến, cấu hình Web Service PHP trả dữ liệu JSON chuẩn xác, phục vụ việc cấp phát danh sách video tức thì.
- Giao diện trực quan, hỗ trợ tương tác cảm ứng nhạy bén, điều khiển đa phương tiện đầy đủ chức năng (Play, Pause, Seek).
- Tỷ lệ đáp ứng kiểm thử chấp nhận người dùng (UAT) đạt 93% đánh giá hài lòng về tốc độ tải và độ ổn định của luồng phát.
Đổi mới và đóng góp
- Tối ưu hóa kiến trúc truyền tải nhẹ (Lightweight Streaming Pipeline): Thay vì sử dụng các thư viện phát video cồng kềnh của bên thứ ba, đồ án khai thác trực tiếp
VideoView và MediaController tích hợp sẵn trong nhân Android. Điều này giúp giảm thiểu 60% kích thước tệp APK và giảm 35% mức tiêu hao bộ nhớ RAM so với các giải pháp nhúng WebView hoặc tích hợp SDK đa nền tảng.
- Cơ chế phân tách Backend linh hoạt: Việc sử dụng Web Service PHP độc lập trả về JSON cho phép hệ thống dễ dàng thay đổi địa chỉ máy chủ lưu trữ hoặc mở rộng sang các client khác (như iOS hoặc Web Client) mà không cần cấu trúc lại cơ sở dữ liệu.
- Mô hình hóa tài liệu học tập chuẩn mực: Đồ án cung cấp quy trình hoàn chỉnh từ đăng ký hosting, thiết lập phpMyAdmin, viết Web Service PHP đến lập trình Android Studio, đóng vai trò tài liệu tham khảo thực nghiệm giá trị cho sinh viên chuyên ngành Công nghệ thông tin.
Ứng dụng thực tế và triển khai
Tình huống ứng dụng thực tế
- Hệ thống E-Learning nội bộ: Ứng dụng vào việc truyền tải các bài giảng video cho sinh viên, học viên trong các cơ sở giáo dục với chi phí đầu tư máy chủ tối thiểu.
- Ứng dụng truyền thông nội bộ doanh nghiệp: Triển khai làm kênh đào tạo, phát video giới thiệu sản phẩm và thông điệp nội bộ cho nhân viên trên thiết bị di động cá nhân.
- Kênh giải trí tin tức ngắn: Sử dụng cho các đơn vị xuất bản báo điện tử cần nền tảng native app gọn nhẹ để phát các bản tin video tóm tắt hàng ngày.
[ LỘ TRÌNH TRIỂN KHAI DỰ ÁN ]
────────────────────────────────────────────────────────────────
Giai đoạn 1 (Hiện tại) : Triển khai Web Service PHP & Android Native App.
Giai đoạn 2 (3 tháng) : Nâng cấp máy chủ lên VPS Cloud (AWS/DigitalOcean), tích hợp CDN.
Giai đoạn 3 (6 tháng) : Nâng cấp Media Player lên ExoPlayer, hỗ trợ giao thức HLS (.m3u8).
Giai đoạn 4 (12 tháng) : Xây dựng hệ thống tài khoản người dùng và gợi ý video theo AI.
Phân tích chi phí và hiệu quả (ROI)
- Chi phí hạ tầng ban đầu: Cực thấp, có thể vận hành trên các gói Shared Hosting Linux thông thường (chỉ từ 50.000 - 150.000 VNĐ/tháng).
- Khả năng mở rộng (Scalability): Dễ dàng chuyển dịch video sang các dịch vụ đám mây chuyên dụng (như Amazon S3, Google Cloud Storage) và phân phối qua Cloudflare CDN khi lượng người dùng đồng thời (CCU) tăng cao mà không cần thay đổi logic ứng dụng Android.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật
- Chất lượng video chưa tự động điều chỉnh theo biến động băng thông (chưa hỗ trợ Adaptive Bitrate Streaming như HLS/DASH).
- Phụ thuộc hoàn toàn vào kết nối mạng thời gian thực, chưa có cơ chế lưu trữ đệm cục bộ (Local Caching) để xem lại khi mất mạng.
- Giao diện người dùng dừng ở mức cơ bản của Material Design đời đầu, chưa tối ưu hóa hiệu ứng chuyển cảnh động.
Hướng phát triển trong tương lai
- Nâng cấp công nghệ Player: Chuyển đổi từ
VideoView truyền thống sang thư viện ExoPlayer 2.x của Google để hỗ trợ đa định dạng streaming cao cấp (HLS, DASH, SmoothStreaming) và kiểm soát bộ đệm tùy biến sâu.
- Bổ sung tính năng thông minh: Ứng dụng thuật toán gợi ý video dựa trên lịch sử xem của người dùng và tích hợp Firebase Cloud Messaging (FCM) để gửi thông báo video mới.
- Nâng cấp kiến trúc phần mềm: Tái cấu trúc mã nguồn theo mô hình kiến trúc hiện đại MVVM (Model-View-ViewModel) kết hợp Android Architecture Components (LiveData, ViewModel, Room DB) và ngôn ngữ Kotlin.
Đối tượng hưởng lợi
- Sinh viên Công nghệ thông tin: Tiếp cận mã nguồn mẫu trực quan, nắm vững quy trình tích hợp giữa hệ điều hành di động Android và Web Service PHP/MySQL.
- Lập trình viên Mobile mới bắt đầu: Nắm bắt sâu sắc cơ chế hoạt động của Intent, quản lý vòng đời Activity (Activity Lifecycle), kỹ thuật bắt sự kiện giao diện và phân tích dữ liệu JSON qua mạng.
- Doanh nghiệp vừa và nhỏ (SMEs): Sở hữu giải pháp mẫu để triển khai ứng dụng truyền thông đa phương tiện với ngân sách đầu tư ban đầu gần như bằng 0.
- Nhà nghiên cứu / Giảng viên: Sử dụng làm tài liệu giảng dạy thực hành môn Lập trình thiết bị di động và Phát triển ứng dụng Web Service.
Câu hỏi thường gặp
1. Ứng dụng yêu cầu cấu hình tối thiểu như thế nào để vận hành?
Ứng dụng tương thích với hầu hết các thiết bị chạy hệ điều hành Android từ phiên bản 4.0 (API Level 14) trở lên, yêu cầu dung lượng RAM tối thiểu 512 MB và bộ nhớ trống khả dụng từ 20 MB. Phía máy chủ chỉ cần Web Hosting Linux hỗ trợ PHP 5.6+ / 7.x và hệ quản trị cơ sở dữ liệu MySQL.
2. Làm thế nào để giải quyết hiện tượng giật/lag khi phát video độ phân giải cao?
Hiện tượng giật lag chủ yếu do giới hạn băng thông hosting. Để khắc phục, cần triển khai phân phối tệp video qua mạng phân phối nội dung (CDN), nén video chuẩn chuẩn mã hóa H.264/AAC với bitrate hợp lý (từ 1.5 - 2.5 Mbps cho chuẩn HD 720p) hoặc nâng cấp tầng player sang ExoPlayer để tối ưu hóa thuật toán nạp đệm trước (pre-buffering).
3. Có thể thay thế Web Service PHP bằng nền tảng khác như Node.js hay Python được không?
Hoàn toàn được. Do ứng dụng Android giao tiếp với máy chủ thông qua giao thức chuẩn HTTP và trao đổi dữ liệu định dạng JSON, bạn có thể thay thế backend bằng Node.js (Express), Python (FastAPI/Django), Java (Spring Boot) hoặc Go mà không cần chỉnh sửa logic xử lý dữ liệu trên ứng dụng di động.
4. Chi phí duy trì hệ thống phát video này hàng tháng là bao nhiêu?
Với quy mô thử nghiệm và phục vụ nội bộ (dưới 500 người dùng hàng ngày), chi phí duy trì chỉ bao gồm tiền thuê hosting Linux và tên miền, dao động từ $3 - $10 USD/tháng. Khi lượng truy cập tăng trưởng, chi phí sẽ mở rộng tuyến tính theo dung lượng lưu trữ đám mây và băng thông CDN tiêu thụ.
5. Tại sao đồ án sử dụng Explicit Intent thay vì Implicit Intent khi mở màn hình xem video?
Explicit Intent được sử dụng vì thành phần mục tiêu (PlayVideoActivity) đã được xác định tường minh trong cùng gói ứng dụng (Package). Điều này đảm bảo tính bảo mật, tăng tốc độ khởi chạy Activity và ngăn chặn việc hệ thống mở nhầm các ứng dụng phát video bên thứ ba ngoài ý muốn.
Kết luận
Đồ án tốt nghiệp "Xây dựng ứng dụng Android xem video trực tuyến" của tác giả Cao Tuấn Nghĩa đã giải quyết xuất sắc bài toán xây dựng giải pháp truyền thông đa phương tiện hoàn chỉnh trên nền tảng di động. Bằng việc kết hợp hài hòa giữa kiến trúc Native Android, hệ thống Web Service PHP tinh gọn và cơ sở dữ liệu quan hệ MySQL, đề tài đã mang lại một sản phẩm có tính ứng dụng cao, vận hành mượt mà và tối ưu hóa tài nguyên phần cứng.
Công trình không chỉ đóng góp một giải pháp kỹ thuật khả thi với chi phí triển khai tối thiểu mà còn là tài liệu tham khảo chất lượng, mang tính hệ thống cao cho cộng đồng lập trình viên và sinh viên kỹ thuật. Sự phát triển tiếp theo của dự án theo hướng tích hợp ExoPlayer, kiến trúc MVVM và lưu trữ đám mây sẽ mở ra tiềm năng thương mại hóa mạnh mẽ cho các dịch vụ giáo dục và giải trí số trong tương lai.