Xem mẫu

  1. CHUYỂN ĐỔI ĐỊNH DẠNG VIDEO SANG MP4 SỬ DỤNG LARAVEL Nguyễn Hữu Cầm Trường Đại học Hà Nội Tóm tắt: Mp4 là định dạng thường được sử dụng và chấp nhận trên mọi nền tảng, từ các trình duyệt, mạng xã hội và chạy ổn định trên hệ điều hành khác nhau như Linux, Windows. Viết ứng dụng nhỏ cho phép chuyển đổi định dạng các video sang mp4 giúp cho người dùng có thể xem videos trên các thiết bị khác nhau mà không cần phải cài đặt thêm dịch vụ thứ 3 để xem video là một vấn đề cần thiết. Từ khoá: Event, FFMpeg, Laragon, Laravel, Libmp3lame, lossy, MVC, Mp4. A.Giới thiệu Ngày nay, có rất nhiều định dạng video trên thế giới, từng định dạng video sẽ có một chương trình chuyên biệt để xem các video đó. Điều này gây ra sự cản trở lớn cho người dùng rằng sẽ nên lưu video đó theo định dạng nào phù hợp nhất, do tất cả các thiết bị hầu như được tạo ra bởi các công ty lớn như Apple, Microsoft hoặc Sony. Tuy nhiên các sản phẩm họ tạo ra thỉnh thoảng không tương thích với những công ty còn lại, một số đọc được định dạng này, số còn lại đọc được định dạng khác. Điều này gây nên sự hạn chế trong quá trình sử dụng của người dùng, do họ sẽ phải tải phần mềm để đọc định dạng này và tải phần mềm khác để đọc định dạng khác, gây phiền toái cho người dùng. Mp4 là định dạng tập tin kĩ thuật số, được sử dụng phổ biến nhất để lưu trữ và chia sẻ audio và video, với chât lượng cao thậm chí sau khi bị nén. Mp4 phổ biến hơn các định dạng khác do định dạng này tương thích với các trình duyệt và các thiết bị khác nhau. Mp4 có thể được sử dụng trong các thiết bị của Apple và Microsoft, bao gồm máy tính, tablets, phones, game consoles hoặc TV. Ngoài ra, Mp4 được chấp nhận ở nhiều trình chơi media, các phần mềm chỉnh sửa video, thậm chí trong quá trình giảng dạy, các thầy cô giáo có thể nhúng file mp4 vào Powerpoint mà không gặp bất kì trở ngại nào trong quá trình sử dụng. [24] FFMpeg là dự án mã nguồn mở miễn phí, được dùng để xử lí audio và video. FFMpeg có thể mã hoá, giải mã, chuyển mã, stream (ví dụ như livestream trên Facebook), chuyển đổi độ phân giải, nén file, xuất hình ảnh, mute âm thanh, v.v. FFMpeg hỗ trợ hầu hết các định dạng và chạy trên nhiều nền tảng như Linux hoặc Windows, mặc cho 2 hệ điều hành này có kiến trúc khác nhau. B. Cách thức triển khai 1. Môi trường triển khai  Laravel 6.2: Framework PHP, được thiết kế theo mô hình nổi tiếng M.V.C dùng để tạo ra các trang web động 207
  2.  Laragon dùng Nginx server: Cho phép tạo project với beautified Url 2. Cách thức cài đặt và triển khai Để convert sang định dạng mp4 từ các loại định dạng video khác, cần thư viện tên là FFMpeg, cài đặt ở đây https://www.ffmpeg.org/download.html#build-windows cho phiên bản Windows Sau khi tải xuống FFmpeg, tiến hành giải nén sẽ được 3 thư mục là bin, doc và presets, chỉ cần quan tâm đến thư mục /bin Figure 25: Kết quả sau khi giải nén Tạo Environment variable cho FFmpeg nhằm cho phép FFMpeg chạy trên command line. Figure 26: Environment variable cho FFMpeg Sau đó kiểm tra FFmpeg đã chạy hay chưa Figure 27: Kết quả sau khi cài FFmpeg 208
  3. 3. Chuyển đổi định dạng media trong Laravel 3.1. Cài đặt FFMpeg Cài FFMpeg cho phép ứng dụng chuyển đổi định dạng chạy trên command line. Tuy nhiên để có thể chuyển đổi định dạng từ các định dạng khác về Mp4 trong PHP thì cần cài interface, cho phép FFMpeg và PHP giao tiếp được với nhau, thuận tiện hơn cho người sử dụng. Để cho phép Laravel chuyển đổi định dạng sang Mp4 thì cài đặt thư viện này https://github.com/pascalbaljetmedia/laravel-ffmpeg Chạy composer require pbmedia/laravel-ffmpeg để tiến hành cài đặt trong thư mục Laravel Sau khi cài đặt thông qua composer, tiến hành publish cấu hình trong Laravel > php artisan vendor:publish -- provider="Pbmedia\LaravelFFMpeg\FFMpegServiceProvider" Sử dụng câu lệnh trên cho phép lập trình viên tuỳ biến file config thay đường dẫn trỏ đến file ffmpeg.exe và ffprobe.exe mà đã download ở trên một cách dễ dàng. Hai file này là 2 file quan trọng cho mục đích chuyển đổi định dạng 3.2. Tiến hành xử lí Để dễ dàng cho việc chuyển đổi định dạng file, tất cả các file cần để chuyển đổi và các file sau khi chuyển đổi sẽ được lưu tại thư mục storage/app/public/media, đây là thư mục cho phép người dùng lưu file cá nhân lên server Figure 28: Folder trước khi convert 209
  4. Để đơn giản, giao diện chỉ cần có 1 chỗ cho phép tải file lên và nút submit cho phép file được tải lên server. Giao diện người dùng để tiến hành upload file và convert Figure 29: Giao diện để tiến hành convert Để tạo được giao diện như ở trên, cần 2 routes để xử lí vấn đề này  Một route đóng vai trò GET: Dùng để hiện thị giao diện  Một route đóng vai trò POST: Dùng để gửi file lên server và tiến hành chuyển đổi định dạng file  Một route đóng vai trò GET: Dùng để xem file đã được chuyển đổi Bắt đầu với việc thêm thẻ media vào config/filesystem.php, việc thêm thẻ media vào filesystem như thế này cho phép chúng ta có thể tuỳ biến đường dẫn media trong trường hợp cần chuyển đổi, chỉ cần thay đổi đường dẫn ở một vị trí duy nhất Figure 30: Cấu hình media filesystem 210
  5. 3.3. Luồng chảy chương trình Figure 31: Activity diagram cho việc chuyển đổi video Tạo routes cho các trường hợp ở trên Figure 32: Route cho GET và POST Sau đó là view cho người dùng chọn file và upload và xem danh sách file đã được upload từ trước. Chú ý để upload file cần có attribute enctype=”multipart/form-data” Figure 33: Form cho người dùng upload và xem danh sách file đã upload và convert Logic upload cho controller như sau: Sau khi người dùng chọn file và tiến hành upload, file đó sẽ được lưu trên server tại disk “media” đã được tạo ở trên. Tiếp theo, hệ thống 211
  6. sẽ gọi event nhằm tiến hành chuyển đổi file cùng với thời gian upload của file. Cuổi cùng, sẽ lưu lịch sử upload cùng với thời gian upload để xem danh sách các file đã upload. Figure 34: Logic upload cho controller Figure 35: Event Để upload và convert thành công, cần chọn codec là lipmp3lame, sau đó gọi facade FFMpeg, mở file media vừa lưu trên server, chuyển sang định dạng mp4 và xoá file gốc sau khi đã convert xong nhằm tiết kiệm dung lượng lưu trữ cho server. Figure 36: Logic convert sang mp4 212
  7. Cuối cùng sẽ tiến hành kiểm tra lắng nghe sự kiện, sử dụng cơ chế event-listener. Figure 37: Map Event listener Sau khi upload thành công thì nhận được giao diện như sau Logic khi xem file: Khi người dùng ấn vào nút “View” phía trên, tên file được chuyển đổi được gọi do có $id đi kèm, cuối cùng sẽ đẩy tên file qua view nhằm mục đích xem ngay trên trình duyệt Figure 38: Lấy tên file được convert Sử dụng tag để xem file được chuyển đổi ngay trên trình duyệt Figure 39: View để xem file đã convert, sử dụng tag 213
  8. Figure 40: Kết quả 4. Kết luận và hướng phát triển trong tương lai Bài viết này đã trình bày cách thức chuyển đổi định dạng file từ các định dạng sang file mp4 sử dụng Laravel mà không cần sử dụng trang web ngoài để chuyển đổi. Trong tương lai sẽ cải thiện bằng cách chuyển môi trường phát triển sang Docker Linux, hỗ trợ nhiều người dùng tải file (xử lí thông qua hàng đợi – queue và jobs), cải thiện giao diện người dùng, cho phép tuỳ chỉnh độ phân giải video khi xuất, .v.v REFERENCES [1] Techsmith, "Video File Formats, Codecs, and Containers Explained," [Online]. Available: https://www.techsmith.com/blog/video-file-formats/. 214
nguon tai.lieu . vn