LẬP TRÌNH ĐA PHƯƠNG TIỆN và TRIỂN KHAI THỬ NGHIỆM các ỨNG DỤNG Đa PHƯƠNG TIỆN PHÂN CÔNG CÔNG VIỆC3MỞ ĐẦU4CHƯƠNG 1. TỔNG QUAN VỀ LẬP TRÌNH ĐA PHƯƠNG TIỆN51.1.Một số khái niệm51.1.1.Môi trường đa phương tiện51.1.2.Lập trình đa phương tiện51.2.Lập trình đa phương tiện trên Windows61.2.1.Tổng quan kiến trúc môi trường61.2.2.Windows API71.2.3.Thư viện liên kết động (DLL)91.2.4.Drivers91.2.5.Hardware Abstraction Layer (HAL)101.3.Một số bộ API hỗ trợ lập trình đa phương tiện trên Windows101.3.1.DirectX101.3.2.FFmpeg11CHƯƠNG 2. CẤU TRÚC MỘT SỐ ĐỊNH DẠNG VIDEO132.1.Định dạng AVI132.1.1.Giới thiệu132.1.2.Cấu trúc AVI RIFF132.1.3.Thành phần MainAVIHeader172.1.4.Khối LIST “movi”182.1.5.Khối “idxl”202.1.6.Các khối dữ liệu khác202.2.Định dạng MPEG212.2.1.Giới thiệu212.2.2.Cấu trúc tập tin MPEG212.3.So sánh hai định dạng AVI và MPEG22CHƯƠNG 3. TỔNG QUAN VỀ STREAMING VIDEO233.1.Định nghĩa233.2.Các giao thức trong streaming video243.2.1.Giao thức RTSP (RealTime Streaming Protocol)243.2.2.Giao thức RTP (Realtime Transport Protocol)27CHƯƠNG 4. THỬ NGHIỆM ỨNG DỤNG304.1.Ứng dụng thao tác với video304.1.1.Các công cụ, thư viện sử dụng304.1.2.Kịch bản mô phỏng chức năng304.2.Mô phỏng ứng dụng streaming video334.2.1.Cài đặt phía server334.2.2.Cài đặt phía client374.2.3.Nhận xét39KẾT LUẬN40
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG ──────── * ─────── BÁO CÁO BÀI TẬP LỚN TRUYỀN THÔNG ĐA PHƯƠNG TIỆN ĐỀ TÀI: LẬP TRÌNH ĐA PHƯƠNG TIỆN VÀ TRIỂN KHAI THỬ NGHIỆM CÁC ỨNG DỤNG ĐA PHƯƠNG TIỆN Nhóm sinh viên thực hiện: Lâm Minh Anh – 2011 1113 Nguyễn Văn Tuấn – 2011 2710 Ngô Thiện Thắng – 2011 2228 Lớp: CNTT-TT 1.1 K56 Giảng viên hướng dẫn: PGS.TS Nguyễn Thị Hoàng Lan HÀ NỘI – THÁNG 12 NĂM 2014 Mục lục Phân công công việc Tên thành viên Công việc Lâm Minh Anh Tìm hiểu lập trình đa phương tiện môi trường Windows số API thường sử dụng Ngơ Thiện Thắng Tìm hiểu cấu trúc định dạng AVI MPEG thử nghiệm kịch streaming video Windows Nguyễn Văn Tuấn Tìm hiểu streaming video lập trình ứng dụng thao tác với video Windows Mở đầu Đa phương tiện (multimedia) kết hợp nhiều khuôn dạng liệu văn bản, hình ảnh, âm thanh, video, … Hiện đa phương tiện có nhiều phát minh, sáng chế công nghệ ứng dụng thực tiễn, góp phần làm cho sống trở nên thân thiện trực quan Và để tạo phát minh khơng thể khơng nhắc đến lập trình đa phương tiện Báo cáo trình bày số vấn đề liên quan đến lập trình đa phương tiện, cấu trúc số định dạng video, streaming video, tiến hành thử nghiệm ứng dụng tương tác đa phương tiện Nội dung báo cáo chia làm chương: Chương Tổng quan lập trình đa phương tiện: Trình bày số nét khái quát lập trình đa phương tiện số đặc điểm kiến trúc mơi trường lập trình đa phương tiện Chương Cấu trúc số định dạng video: Trình bày cấu trúc số định dạng video phổ biến AVI MPEG, chủ yếu tập trung vào định dạng AVI tài liệu cấu trúc định dạng MPEG có Chương Tổng quan streaming video: Giải thích số khái niệm liên quan đến khái niệm truyền dịng, hoạt động streaming video ứng dụng thực tiễn Chương Thử nghiệm ứng dụng: Thực lập trình xây dựng ứng dụng thử nghiệm biên tập video với số thao tác cắt video, tách audio-video…, với thử nghiệm kịch ứng dụng streaming video Với kiến thức hạn chế, báo cáo chắn tránh khỏi thiếu sót Em xin nhận góp ý, sửa chữa cô nội dung trình bày báo cáo Chương Tổng quan lập trình đa phương tiện 1.1.Một số khái niệm 1.1.1 Môi trường đa phương tiện Môi trường đa phương tiện bao gồm toàn hệ thống thiết bị hệ thống phần mềm hỗ trợ loại phương tiện (media) môi trường mạng truyền thông cho phép xây dựng truyền tải ứng dụng multimedia Hình 1.1 Mơi trường đa phương tiện 1.1.2 Lập trình đa phương tiện Lập trình đa phương tiện việc sử dụng ngơn ngữ lập trình việc sáng tạo, thiết kế ứng dụng mang tính đa phương tiện tương tác ứng dụng lĩnh vực truyền thông, quảng cáo, giáo dục giải trí dựa sở tảng môi trường đa phương tiện Một vài ví dụ đơn giản việc thiết kế đồ họa, trị chơi điện tử, làm hoạt hình 3D, thiết kế web, biên tập âm thanh, phim ảnh Hầu hết sản phẩm truyền thơng (quảng cáo, truyền hình, Internet,…) giải trí đại (game, điện ảnh, hoạt hình, …) sử dụng ngày sản phẩm lập trình đa phương tiện Sơ đồ trình bày sơ lược lập trình đa phương tiện nói chung: Hình 1.2 Tổng quan lập trình đa phương tiện o o o o o Phần cứng: bao gồm thiết bị thu nhận (webcam, microphone, máy scan, bàn phím, …), thiết bị hiển thị, trình diễn (màn hình, máy chiếu, loa, …) Hệ điều hành: mơi trường để lập trình trình diễn ứng dụng đa phương tiện Driver: trình điều khiển phần cứng, ứng với thiết bị cụ thể hệ điều hành cụ thể API: giao diện lập trình ứng dụng, cung cấp framework (khung làm việc) cho việc thao tác với liệu đa phương tiện API hệ điều hành khác khác Cơng cụ lập trình: Phần mềm để lập trình viên sử dụng để xây dựng ứng dụng (Visual Studio, Eclipse, Netbeans, …) dựa ngơn ngữ lập trình, ví dụ C/C++, C#, Java, … 1.2 Lập trình đa phương tiện Windows 1.2.1 Tổng quan kiến trúc mơi trường Việc lập trình đa phương tiện nói chung bao gồm hai kiểu, tương ứng với hai chế độ làm việc CPU: o Kernel Mode: tương ứng với lập trình cấp thấp, người lập trình sử dụng ngơn ngữ Assembly tác động trực tiếp vào thiết bị phần cứng Khi CPU Kernel Mode, thực thi thị tham chiếu đến thiết bị phần cứng Kernel mode che giấu thao tác với phần cứng khỏi người dùng Tuy nhiên, lập trình Kernel Mode vơ khó khăn ngày sử dụng có hỗ trợ nhiều từ API o User Mode: tương ứng với lập trình cấp cao Khi CPU User Mode, khơng thể truy cập tới phần cứng tham chiếu đến phần cứng cách trực tiếp Các đoạn mã User Mode chuyển đổi thành hàm API hệ thống để truy cập tới nhớ phần cứng Một số API phổ biến lập trình đa phương tiện DirectX, OpenGL,… Hình 1.3 Kiến trúc mơi trường lập trình đa phương tiện Windows 1.2.2 Windows API API (Application Programming Interface – giao diện lập trình ứng dụng) hệ thống thư viện mã nguồn lập trình hệ thống máy tính hay ứng dụng cung cấp để hỗ trợ lập trình viên, cho phép yêu cầu dịch vụ tạo từ chương trình máy tính khác, và/hoặc cho phép liệu trao đổi qua lại chúng Cũng giống bàn phím thiết bị giao tiếp người dùng máy tính, API giao tiếp phần mềm công cụ lập trình hệ điều hành Bộ API hệ điều hành không giống Những phần mềm máy MacOSX chạy Windows 7, MacOSX Windows có API hồn tồn khác Tuy nhiên có phần mềm chạy đa tảng, thực chất có nhiều phiên ứng với hệ điều hành, chất chúng lập trình API khác hệ điều hành để xây dựng nên phiên khác Về chất, API hệ điều hành nào, cung cấp khả truy xuất đến tập thao tác hay sử dụng, ví dụ thao tác vẽ cửa sổ hay icon hình, hay thao tác chọn tệp từ đĩa cứng Chúng bao gồm tập hàm, thủ tục, biến cấu trúc liệu để thực chức định Và thực chất, lập trình đa phương tiện tương tự việc lập trình ứng dụng khác, khác biệt API mà ta sử dụng cách tương tác với hệ thống phần cứng đa phương tiện Các thành phần Windows API nói riêng, API nói chung bao gồm: Các hàm (function): hạt nhân Window API Đó mã lệnh để hồn thành cơng việc cụ thể Chúng chứa thư viện DLL (sẽ trình bày sơ lược phần sau) truy xuất cách dễ dàng chương trình Windows o Cấu trúc (structure): kết hợp nhiều biến riêng biệt, thường dùng để nhóm thơng tin có liên quan với thành nhóm Ví dụ cấu trúc Sinh Viên gồm thông tin: tên (string), mã sinh viên (big int), số điện thoại (big int), tuổi (int), lớp (string) o Các số (constant): số cách thức thuận lợi để tham chiếu đến giá trị sử dụng lại nhiều lần việc đặt tên cho chúng, ví dụ: PI = 3.14159; RESOLUTION = [1280;720]… Các số phải định nghĩa đầu file mã nguồn o Riêng Windows API hầu hết mã lệnh chứa file *.DLL (Dynamic Link Library – thư viện liên kết động) chứa thư mục hệ thống Windows (thường C:\Windows\System32) Các file DLL cho phép chương trình bên ngồi dùng hàm chúng Hầu hết hàm API chứa user32.dll (các hàm giao diện người dùng), kernel32.dll (các hàm hệ điều hành), gdi32.dll (các hàm giao tiếp thiết bị đồ họa) shell32.dll (các hệ vỏ Windows) Trên Windows, để thực lập trình đa phương tiện, Microsoft cung cấp mơi trường Microsoft Multimedia Extensions (MME) với số đặc trưng: • Media types: Audio WAVE file format, nhạc MIDI format, ảnh BMP/DIB, video AVI • MME format: RIFF format, Text and Graphic RTF file format • Xử lí thao tác MME: thao tác xử lí thực thiết bị phần mềm Một thành phần quan trọng hệ thống multimedia Windows MCI (Multimedia Control Interface – Giao diện điều khiển đa phương tiện) MCI cung cấp lớp đệm lập trình viên thiết bị phần cứng MCI đối tượng độc lập, lập trình có ngơn ngữ lập trình riêng Có hàm bắt đầu mci để truy xuất Media Control Interface: * mciExecute * mciGetCreatorTask * mciGetDeviceID * mciGetDeviceIDFromElementID * mciGetErrorString * mciGetYielProc * mciSendCommand * mciSendString * mciSendYieldProc 1.2.3 Thư viện liên kết động (DLL) Thư viện liên kết động thư viện cho phép ứng dụng liên kết đến sử dụng Nó xem tổ hợp hàm liệu mà sử dụng nhiều ứng dụng khác thời điểm Khi viết đóng gói DLL, hàm sử dụng ứng dụng dạng mã máy mà khơng phải quan tâm đến mã nguồn viết chi tiết Với ứng dụng trước kia, ta đính kèm file mã nguồn sử dùng hàm chương trình; nhiên, giả sử để thao tác với máy in, in nội dung ta cần gọi hàm print() ta có mã nguồn hàm print Giả sử DLL, ứng dụng muốn sử dụng hàm print() bao gồm hàm vào mã nguồn: từ chương trình Word, Excel, Internet Explorer, hệ thống có nhiều hàm print() này, làm cho dung lượng để chứa chương trình tăng lên Ngồi ra, phần cứng thay đổi, ta lại phải thay đổi mã nguồn hàm print() để hoạt động (nếu cần), việc đẫn tới việc thay đổi theo dây chuyền đến ứng dụng, gây nhiều khó khăn Ưu điểm DLL: o Giảm không gian sử dụng nhớ: DLL tự động xóa bỏ khỏi nhớ chừng đếm tham chiếu trở 0, trạng thái cho biết khơng cịn có tiến trình sử dụng DLL o Có thể đóng gói đưa vào chương trình khác: ta khơng cần phải viết lại hàm đính kèm mã nguồn hàm cần dùng vào chương trình mà sử dụng trực tiếp DLL mà ta biên dịch o Tạo khả tương tác ngơn ngữ lập trình: Một ứng dụng sử dụng DLL viết ngôn ngữ lập trình Các nhà phát triển phần mềm việc đóng gói module vào DLL với ngơn ngữ ưa thích, sau module sử dụng ứng dụng viết C++ hay Visual Basic 1.2.4 Drivers Chương trình điều khiển hay trình điều khiển loại phần mềm máy tính đặc biệt, phát triển phép tương tác với thiết bị phần cứng Mỗi trình điều khiển ứng với thiết bị định Chương trình tạo giao diện để giao tiếp với thiết bị ứng với qua bus máy tính đặc biệt Nó cung cấp lệnh để nhận gửi liệu tới thiết bị Trình điều khiển cung cấp giao tiếp cần thiết cho hệ điều hành phần mềm ứng dụng Thường gọi đơn giản driver, trình điều khiển thiết bị phần mềm máy tính viết riêng cho thiết bị phần cứng cụ thể hệ điều hành cụ thể cho phép chương trình, thường hệ điều hành ứng dụng phần mềm, tương tác suốt với thiết bị Chính tính suốt mà ta không nhận tồn driver, công việc đơn giản sử dụng công cụ để tạo nên sản phẩm phù hợp với nhu cầu 1.2.5 Hardware Abstraction Layer (HAL) Lớp phần cứng trừu tượng (Hardware Abstraction Layer) đóng vai trị che giấu khác biệt phần cứng từ hầu hết hệ điều hành hạt nhân, hầu hết mã Kernel Mode không cần phải thay đổi để chạy hệ thống phần cứng khác Trên máy tính, HAL coi trình điều khiển cho bo mạch chủ cho phép hướng dẫn từ ngơn ngữ máy tính mức độ cao để giao tiếp với thành phần cấp thấp hơn, ngăn chặn truy cập trực tiếp đến phần cứng HAL thường cho phép lập trình viên để viết chương trình độc lập, ứng dụng hiệu suất cao cách cung cấp tiêu chuẩn hệ điều hành (OS) lệnh gọi đến phần cứng Q trình trừu tượng hóa phần phần cứng thường thực theo cấu trúc CPU Mỗi loại CPU có kiến trúc tập lệnh cụ thể (ISA – Instruction Set Architecture) ISA đại diện cho hoạt động máy tính mà có sẵn để sử dụng thao tác lập trình biên dịch Một chức trình biên dịch cho phép lập trình để viết thuật tốn ngơn ngữ cấp cao mà không cần phải quan tâm tập lệnh CPU cụ thể Sau đó, cơng việc trình biên dịch để CPU cụ thể thực thi HAL giúp cho nhiều máy tính khác nhau, nhiều hệ điều hành khác sử dụng phần cứng dễ dàng khác biệt 1.3 Một số API hỗ trợ lập trình đa phương tiện Windows 1.3.1 DirectX DirectX tập hợp đa dạng hàm giao tiếp lập trình ứng dụng (API) riêng Windows, cung cấp cơng cụ chuẩn hố tính hỗ trợ cho đồ hoạ, âm thanh, việc cài đặt ứng dụng, tương tác nhiều người tham gia trò chơi DirectX chia thành ba lớp: o Lớp tảng: phần cốt lõi DirectX, tập hợp API cấp thấp tạo nên sở cho hoạt động multimedia hiệu cao Windows Thông qua lớp tảng tác động đến API sau: DirectDraw: Quản lý bề mặt đồ hoạ Direct3D: Cung cấp tính 3D cấp thấp DirectInput: Hỗ trợ thiết bị nhập, kể Joystick hệ DirectSound: Cung cấp hiệu ứng âm trộn tiếng DirectSound 3D: Giúp tạo hiệu ứng âm 3D từ kiểu loa 2D thông thường DirectSetup: Giúp cài đặt phần mềm, Driver cách tự động 10 Chương Thử nghiệm ứng dụng 4.1 4.1.1 Ứng dụng thao tác với video Các công cụ, thư viện sử dụng 28 Để xây dựng chương trình, chúng em thực lập trình Java việc sử dụng công cụ thư viện lập trình sau: • Bộ cơng cụ phát triển Java SE Development Kit 1.7.0_51 • Trình biên dịch Eclipse Kepler • Bộ giao diện lập trình ứng dụng (API) Jffmpeg để thực số chức thao tác với video trình bày 4.1.2 Kịch mô chức Giao diện cửa sổ gồm menu với ba item là: file, audio, video Và hai nút là: Play video Play audio dùng để mở file video mở chạy file audio có sẵn Hình 4.1 Giao diện chương trình Để mở file video audio người dùng vào item file để chọn chức phù hợp 29 Hình 4.2 Mở file video sẵn thiết bị Đối với chức Tách audio, người dùng cần chọn file video cần tách audio, sau chọn chức tách audio “Extract Audio” item audio menu chính, sau lưu đường dẫn cho file audio cần tách, chờ lúc để chương trình thực Hình 4.3 Tách audio từ video có sẵn Người dùng thực cắt đoạn từ video có sẵn cách vào item video tìm đến item “Cut Video” để sử dụng chức cắt video Sau chọn video nguồn, người dùng nhập vào thời gian bắt đầu thời gian kết thúc file video cần cắt Sau đó, người dùng chờ thời gian để chương 30 trình thực hiện, thành cơng thị thơng báo người dùng xem kết vừa thực Hình 4.4 Chức cắt video từ video có sẵn Chức thay đổi âm lượng gốc người dùng tìm đến item audio menu chọn “Change Volume”, sau hiển thị cửa sổ để tùy chọn mức âm lượng mà người dùng muốn thay đổi Nếu thực thành cơng có thơng báo người dùng xem kết Hình 4.5 Chức thay đổi âm lượng gốc video Người dùng thay đổi lại kích thước đoạn video để phù hợp với mục đích sử dụng (ví dụ xem video điện thoại khơng hỗ trợ độ phân giải cao) cách tìm đến item video menu chọn “Change Aspect Video”, chương trình hiển thị cửa sổ để tùy chọn kích thước mà người dùng 31 muốn thay đổi Nếu thành cơng chương trình thơng báo người dùng xem kết chương trình: Hình 4.6 Chức thay đổi kích thước video 4.2 Mơ ứng dụng streaming video Mơ tả hệ thống: Có PC chạy Windows 8.1, máy đóng vai trị làm server, máy cịn lại đóng vai trị client, kết nối LAN với nhau: o + Server: địa IP 192.168.0.99 + Client: địa IP 192.168.0.100 Cả máy Cilent Server cài sẵn phần mềm VLC media player 2.1.5 o 4.2.1 Cài đặt phía server Bước 1: Mở cơng cụ VLC chọn Media menu Chọn Stream danh sách tùy chọn 32 Bước 2: Nhấn vào nhút Add tab File Tìm đến tập tin mà muốn stream Và nhấn nút Stream phía bên góc phải cửa sổ 33 Bước 3: Trong cửa số nhấn Next Bước 4: Chọn ô Display locally muốn play server local lúc stream Chọn phương pháp truyền chọn UDP (legacy) sau nhấn Add tab điền địa IP server 192.168.0.99 34 Bước 5: Hiện tab nhấn Next Bước 6: Hiện tab nhấn Stream 35 Bước 7: Kết có biểu tượng Streaming cửa sổ server streaming video có địa udp://@192.168.0.99:1234 4.2.2 Cài đặt phía client Bước 1: Mở cơng cụ VLC chọn Media menu Chọn Open Netưork Stream danh sách tùy chọn 36 Bước 2: Nhập địa IP server nhấn Play Bước 3: Kết trả video thị chậm so với video play server trình truyền 37 4.2.3 Nhận xét - Khi phía server ngừng phát video client dừng - Phía server phát đến đâu client nhận đến - Phía client khơng thể xem lại server phát 38 Kết luận Truyền thông đa phương tiện lĩnh vực có nhiều tiềm phát triển tương lai Ngày nay, ứng dụng đòi hỏi thân thiện, trực quan với người dùng Điều thể vai trị quan trọng lập trình phát triển ứng dụng đa phương tiện giai đoạn Qua trình thực hiện, chúng em tìm hiểu số vấn đề lập trình đa phương tiện, số API thường dùng lập trình đa phương tiện; cấu trúc định dạng AVI MPEG với số khái niệm streaming video Kết xây dựng chương trình biên tập video đơn giản thực số chức mô nội dung lí thuyết thao tác với video tách audio, cắt video, chỉnh âm lượng… Cùng với việc thử nghiệm streaming video PC mô cụ thể nội dung lý thuyết streaming video 39 Tài liệu tham khảo Nguyễn Thị Hoàng Lan, Bài giảng Truyền thông đa phương tiện ứng dụng, Đại học Bách Khoa Hà Nội Cyril Concolato, MPEG File Formats, March 14th, 2005 Microsoft MSDN, AVI RIFF File Reference, http://msdn.microsoft.com/en- us/library/windows/desktop/dd318189(v=vs.85).aspx, lần cuối truy cập 19/11/2014 Buddhima Sandeepana Wijeweera, How to play audio and video files in Java applications, http://buddhimawijeweera.wordpress.com/2011/05/01/how-toplay-audio-and-video-files-in-java-applications/, lần cuối truy cập 19/11/2014 FFmpeg Community, FFmpeg API Documentation, https://www.ffmpeg.org/ffmpeg.html, lần cuối truy cập 20/11/2014 40 ... hoạt hình, …) sử dụng ngày sản phẩm lập trình đa phương tiện Sơ đồ trình bày sơ lược lập trình đa phương tiện nói chung: Hình 1.2 Tổng quan lập trình đa phương tiện o o o o o Phần cứng: bao gồm thiết... loại phương tiện (media) môi trường mạng truyền thông cho phép xây dựng truyền tải ứng dụng multimedia Hình 1.1 Mơi trường đa phương tiện 1.1.2 Lập trình đa phương tiện Lập trình đa phương tiện. .. trình đa phương tiện, cấu trúc số định dạng video, streaming video, tiến hành thử nghiệm ứng dụng tương tác đa phương tiện Nội dung báo cáo chia làm chương: Chương Tổng quan lập trình đa phương tiện: