2012-07-04 39 views
29

Tôi cần giải mã H.264 tăng tốc phần cứng cho dự án nghiên cứu, để kiểm tra giao thức tự xác định.Làm cách nào để sử dụng giải mã video tăng tốc phần cứng trên Android?

Khi tôi có Tìm kiếm trên web, tôi đã tìm thấy một số cách để thực hiện giải mã video tăng tốc phần cứng trên Android.

  1. Sử dụng ffmpeg libstagefright (overview of libstagefright) hoặc sử dụng libstagefright trong hệ điều hành trực tiếp, giống như here.
  2. Sử dụng OpenMax trên nền tảng phần cứng cụ thể. như here about samsung devicehere about Qualcomm Snapdragon series
  3. Một số người đề cập PVplayer,

Một số người "say" libstagefright là cách duy nhất trong khi Qualcomm kẻ đã thực hiện thành công rõ ràng.

Hiện tại tôi không chắc chắn cách nào có thể hoạt động. Bây giờ tôi hơi bối rối. Nếu tất cả có thể làm việc, tôi chắc chắn sẽ thích một phương pháp phần cứng độc lập.

Như tôi đã thử nghiệm một số trình phát video tăng tốc H/W với Galaxy Tab 7.7 (3.2 & Enxyos), VLC, Mobo, Rock, vplayer, rock và mobo hoạt động tốt, VLC không hoạt động, vplayer để có lỗi kết xuất chi phí hiệu suất của nó.

Dù sao, tôi đã thực hiện 'thao tác' trên Trình phát nhạc Rock và xóa tất cả .so libs của nó trong dữ liệu \ data \ com.redirecting \ rockplayer và phần mềm giải mã sự cố trong khi giải mã hw vẫn hoạt động tốt! Tôi tự hỏi làm thế nào họ đã làm điều đó. Dường như với tôi rằng tăng tốc hw có thể độc lập với nền tảng phần cứng.

Ai đó có thể khắc phục sự cố này không? Hoặc cung cấp bất kỳ tham chiếu nào có thông tin bổ sung hoặc chi tiết tốt hơn?

+0

tôi chút nhầm lẫn! Bạn có muốn truy cập trực tiếp (không có API phương tiện Android) đến bộ giải mã tăng tốc H/W để giải mã luồng bit của bạn không? Bởi vì tất cả các điện thoại hiện đại SOCs giải mã H.264 bằng cách sử dụng H/w Acceleration. –

+0

@ OakBytes, tôi muốn thực hiện giải mã H/W tăng tốc tuy nhiên nó đã hoàn tất. Bây giờ tôi chỉ biết cách giải mã luồng bằng giải mã phần mềm ffmpeg. Tăng tốc H/W đề cập đến mức hiệu suất ở mức 1080p @ 30fps trong khi phần mềm giải mã yếu hơn nhiều. Tôi đã tránh đề cập đến giải mã phần mềm như sử dụng CPU vì mô-đun tăng tốc H/W cũng là một phần của CPU. Điều gì làm bạn có ý nghĩa bởi tất cả các điện thoại hiện đại đã sử dụng gia tốc H/W? –

+0

Khi Gallery Media Player được sử dụng để phát các clip H.264, tất cả các điện thoại Android gần đây đều sử dụng bộ giải mã H.264 tăng tốc H/W. Tôi đoán bạn có kế hoạch sử dụng bộ giải mã H.264 để giải mã bit H.264 thô và nhận được đầu ra được giải mã, thay vì phát tệp có chứa video H.264 và một số âm thanh. –

Trả lời

22

Để trả lời câu hỏi trên, chúng ta hãy để tôi giới thiệu vài khái niệm liên quan đến Android

OpenMAX Android sử dụng OpenMAX cho giao diện codec. Do đó tất cả các codec gốc (phần cứng tăng tốc hoặc cách khác) cung cấp giao diện OpenMAX. Giao diện này được sử dụng bởi StageFright (Khung trình phát) để giải mã phương tiện bằng cách sử dụng codec

NDK Android cho phép ứng dụng Java tương tác với thư viện gốc C/C++ cơ bản bằng NDK. Điều này đòi hỏi phải sử dụng JNI (Giao diện bản địa Java).

Bây giờ đến câu hỏi của bạn How to tap native decoder to decode raw video bitstream?

Trong Android phiên bản 4.0 trở xuống, Android không cung cấp quyền truy cập vào bộ giải mã video cơ bản ở lớp Java. Bạn sẽ cần viết mã gốc để tương tác trực tiếp với bộ giải mã OMX. Mặc dù điều này là có thể, nó không phải là tầm thường vì nó sẽ cần kiến ​​thức về cách OMX hoạt động và cách ánh xạ OMX này đến ứng dụng bằng cách sử dụng NDK.

Trong phiên bản 4.1 (Jelly Bean), Android dường như cung cấp quyền truy cập vào bộ giải mã được tăng tốc phần cứng ở cấp ứng dụng thông qua API JAVA.Thông tin thêm về API mới tại http://developer.android.com/about/versions/android-4.1.html#Multimedia

+0

Cảm ơn bạn đã làm rõ về các khái niệm và câu trả lời. Tôi đã xem xét thông qua tài liệu tham khảo chỉ để tìm thấy nó quá đúng mà tôi phải đào sâu vào khung hệ điều hành. Điều này chắc chắn sẽ hoạt động. –

+0

Tuy nhiên, như các hoạt động trên Rockplayer cho thấy, trong đó tôi đã xóa tất cả các thư viện .so và giải mã phần cứng vẫn hoạt động trong khi phần mềm không thành công, có thể có một số cách đơn giản hơn trong phiên bản Android 4.0 và belows. Đối với giải mã bitstream thô của tôi và tất cả, tôi có thể phải tìm ra toàn bộ điều OMX. Bạn có thể cung cấp API Java trong Jelly Bean không? –

+0

@Holygenn Tôi đã thêm liên kết vào Media Player API trong Jelly Bean. Trong trường hợp của RockPlayer, nó có hiển thị trực tiếp video bằng cách sử dụng Bộ giải mã tăng tốc phần cứng hay không nó cung cấp cho bạn bộ đệm đầu ra? Nó là dễ dàng hơn để làm trước đây hơn với bộ giải mã tăng tốc phần cứng –

0

Sử dụng ExoPlayer (github).

Dự án nguồn mở do Google tài trợ của nó thay thế cho MediaPlayer của nền tảng. Mỗi thành phần trong đường ống có thể mở rộng bao gồm nguồn mẫu (cách các khung H.264 được trích xuất từ ​​giao thức tùy chỉnh của bạn) thành hiển thị (đối với Surface, SurfaceTexture, v.v.).

Nó bao gồm một số đẹp demo app showing usage.

Các vấn đề liên quan