6

Gần đây tôi đã chuyển một bộ giải mã video thành android. Ngoài ra, đổ kết quả đầu ra trên một surfaceview và kiểm tra đầu ra bằng cách sử dụng API gốc. Bây giờ nhiệm vụ tiếp theo là triển khai phát, tạm dừng, phát trực tuyến, tức là các tính năng khác của trình phát đa phương tiện. Làm điều này sẽ là một rework như tất cả các chức năng này đã được xác định trong khuôn khổ đa phương tiện Android. Tôi nghe nói rằng chúng tôi có thể làm cho bộ giải mã của chúng tôi như một plug-in và tích hợp nó vào khung đa phương tiện của Android. Mặc dù tôi googled liên quan đến nhau, tôi khó có thể tìm thấy bất kỳ thông tin liên quan đến nhau. Vì vậy, tôi vui lòng yêu cầu bất kỳ độc giả để đề xuất một số liên kết relavent hoặc giải pháp cho vấn đề trên. Cảm ơn trước, chờ trả lời của bạn.Android: Cách tích hợp bộ giải mã vào khung đa phương tiện

Trả lời

14

Trong khung công tác SF của Android, các codec được đăng ký thông qua media_codecs.xml. Trong bản phân phối Android chuẩn, bạn có thể tìm thấy một ví dụ media_codecs.xmlhere. Tất cả các thành phần nghe nhìn được đăng ký thành các thành phần OMX.

1. Codec Đăng ký

Để đăng ký bộ giải mã video của bạn, bạn sẽ phải thêm một mục mới thuộc danh sách <Decoders>. Để đảm bảo rằng codec của bạn luôn được chọn, hãy đảm bảo rằng codec của bạn được liệt kê là mục nhập đầu tiên cho loại MIME cụ thể. Một mục ví dụ cho bộ giải mã H.264 có thể như sau.

<Decoders> 
    <MediaCodec name="OMX.ABC.XYZ.H264.DECODER" type="video/avc" > 
     <Quirk name="requires-allocate-on-input-ports" /> 
     <Quirk name="requires-allocate-on-output-ports" /> 
    </MediaCodec> 
    <MediaCodec name="OMX.google.h264.decoder" type="video/avc" /> 

đâu,

a. OMX.ABC.XYZ.H264.Decoder là tên của thành phần của bạn

b. video/avc là loại MIME của thành phần của bạn. Trong ví dụ này, nó biểu thị một bộ giải mã video AVC/H.264.

c.Các câu lệnh tiếp theo biểu thị các yêu cầu đặc biệt quirks hoặc yêu cầu đặc biệt của các thành phần của bạn. Trong ví dụ cụ thể, requires-allocate-on-input-ports chỉ ra khuôn khổ Stagefright mà thành phần ưu tiên phân bổ bộ đệm trên tất cả các cổng đầu vào của nó. Tương tự, quirk khác thông báo rằng thành phần cũng sẽ thích phân bổ trên các cổng đầu ra của nó. Để có danh sách được hỗ trợ quirks trong hệ thống, bạn có thể tham khảo hàm OMXCodec::getComponentQuirks trong tệp OMXCodec.cpp. Những quirks này dịch thành các cờ mà sau đó được đọc bởi khung công tác để tạo và khởi tạo các thành phần.

Trong ví dụ minh họa, nó được hiển thị rằng thành phần OMX của bạn được đăng ký trước mặc định Bộ giải mã video do Google triển khai.

LƯU Ý: Nếu bạn thử thiết bị này trên thiết bị đầu cuối, bạn sẽ phải đảm bảo rằng mục này được phản ánh trong tệp media_codecs.xml cuối cùng.

2. OMX Lõi Đăng ký

Để tạo thành phần của bạn và đảm bảo rằng đúng phương pháp nhà máy được gọi, bạn có thể phải đăng ký OMX cốt lõi của bạn với khuôn khổ Stagefright.

Để đăng ký nhân mới, bạn sẽ phải tạo một thư viện mới có tên libstagefrighthw.so sẽ được đặt tại /system/lib trong hệ thống kết thúc của bạn. Thư viện này sẽ phải trưng ra một biểu tượng createOMXPlugin sẽ được xem bởi dlsym.

Việc đăng ký lõi OMX là: OMXMaster gọi addVendorPlugin gọi nội bộ addPlugin("libstagefrighthw.so"). Trong addPlugin, createOMXPlugin sẽ được tra cứu bằng cách sử dụng các con trỏ hàm khác cho makeComponentInstance, destroyComponentInstance v.v ... được khởi tạo.

Khi lõi OMX được khởi tạo, bạn đã sẵn sàng chạy thành phần của riêng mình trong khung android. Tài liệu tham khảo cho OMXMaster có thể được tìm thấy here.

Với những thay đổi này, bộ giải mã video của bạn được tích hợp vào khung công tác sân khấu android.

+0

Cảm ơn rất nhiều vì đã trả lời. Tuy nhiên tôi hơi bối rối. – Zax

+0

Giả sử tôi có một dự án trong đó có một trình thám hiểm tệp để chọn tệp đầu vào để giải mã và nút giải mã để giải mã tệp đầu vào. Làm thế nào để tôi tiến hành các bước trên? chờ hồi âm của bạn. Cảm ơn trước. – Zax

+0

@Zax Tôi đã trả lời câu hỏi này trên một chủ đề khác tại đây http://stackoverflow.com/questions/15356629/how-to-create-a-stagefright-plugin – Ganesh

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