2012-03-11 20 views
11

Android không hỗ trợ nhiều định dạng tệp phương tiện (tệp như .mkv), theo mặc định. Nhưng những người chơi như MXPlayer và MoboPlayer cho phép bạn chơi các tệp như vậy. Các ứng dụng này hoạt động như thế nào? Có bất kỳ hướng dẫn hoặc bài viết lập trình nào giải thích cách nó được thực hiện không?Ứng dụng Media Player Android như MXPlayer và MoboPlayer phát các định dạng tệp không được hỗ trợ như MKV như thế nào?

+0

mkv chỉ là một vật chứa. bạn có thể sử dụng nhiều codec video/audio khác nhau bên trong ... – Goddchen

Trả lời

10

Android không hỗ trợ tất cả định dạng phương tiện theo mặc định. Do đó để hỗ trợ định dạng không được hỗ trợ, các ứng dụng như MoboPlayer thực hiện các tác vụ trình phát phương tiện chuẩn bằng cách sử dụng kết hợp Java và mã gốc thông qua JNI.

Để hiểu rõ hơn, hãy cho chúng tôi biết trình phát đa phương tiện hoạt động như thế nào để phát tệp phương tiện và cách chúng được thực hiện bởi MoboPlayer như ứng dụng trong Android.

Typical tasks of a Media Player

Một người chơi cần thực hiện các nhiệm vụ sau đây (a) Demux định dạng file và giải nén video/audio (b) Giải mã video và âm thanh (c) Hiển thị video và chơi âm thanh. Chúng ta hãy xem xét ba lĩnh vực này có thể được xử lý như thế nào trong trường hợp MoboPlayer như trình phát.

File format Demux

Android không hỗ trợ tất cả các vùng chứa định dạng tệp theo mặc định. Ví dụ, ASF (định dạng tệp của các tệp WMV) không được hỗ trợ. Do đó, người chơi cần có trình giảm tốc riêng để thực hiện công việc. libavformat (được sử dụng bởi FFMPEG) là một thư viện mã nguồn mở hàng đầu.

Video/Audio decode

libavcodec (được sử dụng bởi FFMPEG) là một thư viện giải mã nguồn mở hàng đầu mà giải mã dòng demuxed và sản xuất khung đầu ra liệu không nén. Do đó nó thường được sử dụng bởi những người chơi như MoboPlayer.

Video display

Có hai tùy chọn để hiển thị video. Người chơi sử dụng bộ đệm SurfaceView hoặc bộ đệm tăng tốc OpenGL. Android cung cấp một đối tượng bề mặt java (trừu tượng của đối tượng flinger bề mặt cơ bản) cho một đối tượng gốc bên trong được gọi là NativeWindow, sau đó có thể được truy cập bằng mã gốc.

ICS (Android 4.0) trở đi, Android cũng cung cấp quyền truy cập vào bộ đệm tăng tốc OpenGL (SurfaceTexureTextureView). Chúng cũng có thể được sử dụng để hiển thị video.

Audio playout

Người chơi có thể trực tiếp tương tác với các đối tượng AudioTrack cung cấp ở cấp Java để chơi các mẫu âm thanh được giải mã.

+1

OakBytes là đúng. Những người chơi này sử dụng trình phân tích cú pháp/phần mềm giải mã phần mềm bên thứ ba hoặc là độc quyền hoặc FFMPEG. Một số người chơi cũng sử dụng opengl để hiển thị. Đa số trong số họ sử dụng SuraceView và NativeWindow đối tác bản địa của nó để hiển thị video đã giải mã. Tác phẩm này không có khung gốc và song song với nó. Do đó moboplayer cũng cung cấp cho một tùy chọn để sử dụng phần mềm hoặc bộ giải mã phần cứng. – peasea