Bản phát hành Android 10 bao gồm một quá trình tái cấu trúc đáng kể của trình quản lý chính sách âm thanh để tăng tính linh hoạt nhằm hỗ trợ các trường hợp sử dụng phức tạp trong ô tô:
Chiến lược định tuyến dành riêng cho OEM.
Nhóm âm lượng có thể tuỳ chỉnh cho các nhóm loại luồng cũ sử dụng cùng một đường cong âm lượng.
Các chiến lược định tuyến được công cụ chính sách âm thanh khai báo thay vì được mã hoá cứng.
Các đường cong âm lượng và nhóm do công cụ chính sách âm thanh quản lý.
Tái cấu trúc nội bộ để chuẩn bị cho việc phân tách trong tương lai giữa mã chung và mã có thể định cấu hình, đồng thời cung cấp khả năng quản lý thiết bị âm thanh phong phú hơn. Ví dụ: việc sử dụng tất cả thuộc tính thiết bị chứ không chỉ loại thuộc tính đó trong các quy tắc chính sách.
Android 7.0 đã giới thiệu định dạng tệp cấu hình chính sách âm thanh (XML) để mô tả cấu trúc âm thanh của bạn.
Các bản phát hành Android trước đây yêu cầu sử dụng device/<company>/<device>/audio/audio_policy.conf để khai báo các thiết bị âm thanh có trên sản phẩm của bạn (bạn có thể xem ví dụ về tệp này cho phần cứng âm thanh Galaxy Nexus trong device/samsung/tuna/audio/audio_policy.conf). Tuy nhiên, CONF là một định dạng đơn giản, độc quyền và quá hạn chế để mô tả các cấu trúc phức tạp cho các ngành dọc như TV và ô tô.
Android 7.0 không dùng audio_policy.conf nữa và thêm tính năng hỗ trợ để xác định cấu hình âm thanh bằng cách sử dụng định dạng tệp XML dễ đọc hơn, có nhiều công cụ chỉnh sửa và phân tích cú pháp, đồng thời đủ linh hoạt để mô tả các cấu hình âm thanh phức tạp. Android 7.0 sử dụng cờ bản dựng USE_XML_AUDIO_POLICY_CONF để chọn định dạng XML của tệp cấu hình.
Ưu điểm của định dạng XML
Giống như trong tệp CONF, tệp XML cho phép xác định số lượng và loại hồ sơ luồng đầu ra và đầu vào, các thiết bị có thể dùng để phát và ghi lại cũng như các thuộc tính âm thanh. Ngoài ra, định dạng XML còn cung cấp các tính năng nâng cao sau:
Trong Android 10, nhiều ứng dụng ghi đang hoạt động được cho phép đồng thời.
Việc bắt đầu ghi không bao giờ bị từ chối do tình huống đồng thời.
Lệnh gọi lại registerAudioRecordingCallback(AudioManager.AudioRecordingCallback cb) thông báo cho ứng dụng về các thay đổi đối với đường dẫn chụp.
Trong những trường hợp sau, máy khách sẽ nhận được mẫu âm thanh im lặng:
Một trường hợp sử dụng nhạy cảm về quyền riêng tư (ví dụ: VOICE_COMMUNICATION) đang hoạt động.
Ứng dụng không có dịch vụ trên nền trước hoặc giao diện người dùng trên nền trước.
Chính sách công nhận các vai trò đặc biệt:
Dịch vụ hỗ trợ tiếp cận: Có thể ghi lại ngay cả khi trường hợp sử dụng nhạy cảm về quyền riêng tư đang hoạt động.
Trợ lý: Được coi là nhạy cảm về quyền riêng tư nếu giao diện người dùng nằm ở trên cùng.
Hồ sơ âm thanh có cấu trúc tương tự như chỉ số mô tả âm thanh đơn giản HDMI, cho phép một nhóm tốc độ lấy mẫu/mặt nạ kênh khác nhau cho mỗi định dạng âm thanh.
Có các định nghĩa rõ ràng cho tất cả các kết nối có thể có giữa thiết bị và luồng.
Trước đây, một quy tắc ngầm ẩn cho phép kết nối tất cả các thiết bị được đính kèm vào cùng một mô-đun HAL, ngăn chính sách âm thanh kiểm soát các kết nối được yêu cầu bằng API bản vá âm thanh. Trong định dạng XML, phần mô tả cấu trúc liên kết xác định các giới hạn kết nối.
Tính năng hỗ trợ bao gồm giúp tránh lặp lại các định nghĩa gửi A2DP, USB hoặc định tuyến lại tiêu chuẩn.
Bạn có thể tuỳ chỉnh các đường cong âm lượng. Trước đây, bảng âm lượng được mã hoá cứng. Ở định dạng XML, các bảng dung lượng được mô tả và có thể được tuỳ chỉnh.
Mẫu tại frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml cho thấy nhiều tính năng đang được sử dụng trong số này.
Định dạng và vị trí tệp
Tệp cấu hình chính sách âm thanh mới là audio_policy_configuration.xml và nằm trong /system/etc. Các ví dụ sau đây cho thấy một cấu hình chính sách âm thanh đơn giản ở định dạng tệp XML cho Android 12 và cho các phiên bản dưới Android 12.
Hiển thị ví dụ về chính sách âm thanh cho Android 12
Cấu trúc cấp cao nhất chứa các mô-đun tương ứng với từng mô-đun phần cứng HAL âm thanh, trong đó mỗi mô-đun có một danh sách các cổng kết hợp, cổng thiết bị và tuyến:
Các cổng kết hợp mô tả các cấu hình có thể có cho các luồng có thể mở tại HAL âm thanh để phát và ghi lại.
Cổng thiết bị mô tả các thiết bị có thể được đính kèm với loại thiết bị (và tuỳ chọn địa chỉ và thuộc tính âm thanh, nếu có liên quan).
Tuyến được tách biệt với chỉ số mô tả cổng kết hợp, cho phép mô tả các tuyến từ thiết bị đến thiết bị hoặc luồng đến thiết bị.
Bảng âm lượng là danh sách đơn giản gồm các điểm xác định đường cong dùng để dịch từ chỉ mục giao diện người dùng sang âm lượng tính bằng dB. Một tệp bao gồm riêng biệt cung cấp các đường cong mặc định, nhưng mỗi đường cong cho một trường hợp sử dụng và danh mục thiết bị nhất định có thể bị ghi đè.
Bạn có thể sử dụng phương thức XML Inclusions (XInclude) để đưa thông tin cấu hình chính sách âm thanh vào các tệp XML khác. Tất cả tệp được đưa vào phải tuân theo cấu trúc mô tả ở trên kèm theo các hạn chế sau:
Tệp chỉ có thể chứa các phần tử cấp cao nhất.
Tệp không được chứa các phần tử XInclude.
Sử dụng tính năng bao gồm để tránh sao chép thông tin cấu hình mô-đun HAL âm thanh của Dự án nguồn mở Android (AOSP) tiêu chuẩn vào tất cả tệp cấu hình chính sách âm thanh (dễ gặp lỗi). Tệp XML cấu hình chính sách âm thanh tiêu chuẩn được cung cấp cho các HAL âm thanh sau:
A2DP:a2dp_audio_policy_configuration.xml
Định tuyến lại danh sách phụ:rsubmix_audio_policy_configuration.xml
USB:usb_audio_policy_configuration.xml
Sắp xếp mã chính sách âm thanh
AudioPolicyManager.cpp được chia thành một số mô-đun để dễ dàng duy trì và định cấu hình. Cách sắp xếp frameworks/av/services/audiopolicy bao gồm các mô-đun sau.
Mô-đun
Mô tả
/managerdefault
Bao gồm các giao diện chung và cách triển khai hành vi phổ biến cho tất cả ứng dụng. Tương tự như AudioPolicyManager.cpp với chức năng của công cụ và các khái niệm phổ biến được trừu tượng hoá.
/common
Xác định các lớp cơ sở (ví dụ: cấu trúc dữ liệu cho hồ sơ luồng âm thanh đầu vào đầu ra, chỉ số mô tả thiết bị âm thanh, bản vá âm thanh và cổng âm thanh). Thuộc tính này đã được xác định trước đó bên trong AudioPolicyManager.cpp.
/engine
Triển khai các quy tắc xác định thiết bị và phương tiện nào sẽ được sử dụng cho một trường hợp sử dụng nhất định. Lớp này triển khai một giao diện chuẩn với phần chung, chẳng hạn như để lấy thiết bị thích hợp cho một trường hợp sử dụng phát hoặc quay video nhất định, hoặc để đặt thiết bị đã kết nối hoặc trạng thái bên ngoài (tức là trạng thái cuộc gọi của việc sử dụng bắt buộc) có thể thay đổi quyết định định tuyến.
Có hai phiên bản: có thể định cấu hình và mặc định.
Để biết thông tin về cách chọn phiên bản, hãy xem phần Cấu hình bằng Khung tham số.
/engineconfigurable
Triển khai công cụ chính sách dựa trên Khung tham số (xem bên dưới).
Cấu hình dựa trên Khung tham số và nơi chính sách được xác định bằng các tệp XML.
/enginedefault
Triển khai công cụ chính sách dựa trên các phương thức triển khai trước đó của Trình quản lý chính sách âm thanh Android. Đây là chế độ mặc định và bao gồm các quy tắc được mã hoá cứng tương ứng với hoạt động triển khai Nexus và AOSP.
/service
Bao gồm các giao diện liên kết, phân luồng và khoá triển khai bằng giao diện với phần còn lại của khung.
Cấu hình bằng Khung tham số
Mã chính sách âm thanh được sắp xếp để dễ hiểu và
duy trì, đồng thời hỗ trợ chính sách âm thanh được xác định hoàn toàn bằng
các tệp cấu hình. Cách thiết kế về tổ chức và chính sách âm thanh dựa trên Parameters Frameworkwork của Intel, một khung dựa trên trình bổ trợ và dựa trên quy tắc để xử lý các tham số.
Việc sử dụng chính sách âm thanh có thể định cấu hình cho phép nhà sản xuất thiết bị gốc (OEM) của nhà cung cấp:
Mô tả cấu trúc và các tham số của hệ thống trong XML.
Viết (trong C++) hoặc sử dụng lại một phần phụ trợ (trình bổ trợ) để truy cập vào các tham số được mô tả.
Xác định điều kiện/quy tắc (trong XML hoặc bằng ngôn ngữ dành riêng cho miền) mà theo đó một tham số nhất định phải nhận một giá trị nhất định.
AOSP bao gồm một ví dụ về tệp cấu hình chính sách âm thanh sử dụng Khung tham số tại Frameworks/av/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/PolicyConfigurableDomains.xml. Để biết thông tin chi tiết, hãy tham khảo tài liệu của Intel về Khung tham số.
Trong Android 10 trở xuống, chính sách âm thanh có thể định cấu hình được chọn bằng tuỳ chọn bản dựng USE_CONFIGURABLE_AUDIO_POLICY.
Trên Android 11 trở lên, phiên bản của công cụ chính sách âm thanh được chọn trong tệp audio_policy_configuration.xml.
Để chọn công cụ chính sách âm thanh có thể định cấu hình, hãy đặt giá trị của thuộc tính engine_library của phần tử globalConfiguration thành configurable như trong ví dụ sau:
Android 6.0 đã ra mắt một API Lựa chọn và liệt kê công khai nằm trên cơ sở hạ tầng của bản vá âm thanh/cổng âm thanh và cho phép nhà phát triển ứng dụng chỉ định lựa chọn ưu tiên cho đầu ra hoặc đầu vào của một thiết bị cụ thể cho bản ghi hoặc bản nhạc âm thanh đã kết nối.
Trong Android 7.0, API Lựa chọn và liệt kê được xác minh bằng các bài kiểm thử CTS và được mở rộng để bao gồm cả việc định tuyến cho luồng âm thanh C/C++ gốc (OpenSL ES).
Việc định tuyến luồng gốc vẫn được thực hiện trong Java, với việc bổ sung giao diện AudioRouting thay thế, kết hợp và ngừng sử dụng các phương thức định tuyến rõ ràng dành riêng cho lớp AudioTrack và AudioRecord.
Để biết thông tin chi tiết về Enumeration and Selection API (API Lựa chọn và Liệt kê), hãy tham khảo Giao diện cấu hình Android và OpenSLES_AndroidConfiguration.h.
Để biết thông tin chi tiết về việc định tuyến âm thanh, hãy tham khảo phần Định tuyến âm thanh.
Hỗ trợ đa kênh
Nếu phần cứng và trình điều khiển của bạn hỗ trợ âm thanh đa kênh qua HDMI, thì bạn có thể xuất luồng âm thanh trực tiếp đến phần cứng âm thanh (chế độ này sẽ bỏ qua bộ trộn AudioFlinger để không bị phân phối xuống 2 kênh). HAL âm thanh phải cho biết liệu cấu hình luồng đầu ra có hỗ trợ các tính năng âm thanh đa kênh hay không. Nếu HAL hiển thị các chức năng của mình, thì trình quản lý chính sách mặc định sẽ cho phép phát nhiều kênh qua HDMI. Để biết thông tin chi tiết về cách triển khai, hãy xem device/samsung/tuna/audio/audio_hw.c.
Để chỉ định rằng sản phẩm của bạn chứa đầu ra âm thanh đa kênh, hãy chỉnh sửa tệp cấu hình chính sách âm thanh để mô tả đầu ra đa kênh cho sản phẩm. Ví dụ sau đây từ frameworks/av/services/audiopolicy/config/primary_audio_policy_configuration_tv.xml cho thấy một mặt nạ kênh động, nghĩa là trình quản lý chính sách âm thanh truy vấn các mặt nạ kênh do bồn lưu trữ HDMI hỗ trợ sau khi kết nối.
Bạn cũng có thể chỉ định một mặt nạ kênh tĩnh, chẳng hạn như AUDIO_CHANNEL_OUT_5POINT1. Bộ trộn của AudioFlinger sẽ tự động kết hợp nội dung thành âm thanh nổi khi được gửi đến một thiết bị âm thanh không hỗ trợ âm thanh đa kênh.
Bộ mã hoá và giải mã nội dung nghe nhìn
Đảm bảo rằng bộ mã hoá và giải mã âm thanh mà phần cứng và trình điều khiển của bạn hỗ trợ được khai báo đúng cách cho sản phẩm của bạn. Để biết thông tin chi tiết, hãy xem phần Hiển thị bộ mã hoá và giải mã cho khung.
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2024-11-08 UTC.
[null,null,["Cập nhật lần gần đây nhất: 2024-11-08 UTC."],[],[]]