Kể từ ngày 27 tháng 3 năm 2025, bạn nên sử dụng android-latest-release thay vì aosp-main để xây dựng và đóng góp cho AOSP. Để biết thêm thông tin, hãy xem phần Thay đổi đối với AOSP.
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
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 để mang lại tính linh hoạt cao hơn nhằm hỗ trợ các trường hợp sử dụng phức tạp trong ngành ô 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 do công cụ chính sách âm thanh khai báo thay vì được mã hoá cứng.
Đường cong âm lượng và các 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 mã chung và mã có thể định cấu hình trong tương lai, đồ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ả các thuộc tính của thiết bị chứ không chỉ loại thiết bị trong các quy tắc chính sách.
Android 7.0 giới thiệu một định dạng tệp cấu hình chính sách âm thanh (XML) để mô tả cấu trúc liên kết âm thanh.
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 liên kết phức tạp cho các ngành dọc như truyền hình và ô tô.
Android 7.0 đã ngừng dùng audio_policy.conf và thêm tính năng hỗ trợ xác định một cấu trúc liên kết â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 trúc liên kết â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à các 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 hình, cũng như các thuộc tính âm thanh. Ngoài ra, định dạng XML còn có những điểm cải tiến sau:
Trong Android 10, bạn có thể dùng đồng thời nhiều ứng dụng ghi âm đang hoạt động.
Yêu cầu bắt đầu ghi không bao giờ bị từ chối do tình trạng trùng lặp.
Lệnh gọi lại registerAudioRecordingCallback(AudioManager.AudioRecordingCallback cb)
sẽ thông báo cho các ứng dụng về những thay đổi đối với đường dẫn chụp.
Trong những trường hợp sau, ứng dụng sẽ nhận được cá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 này 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 một 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 ở trên cùng.
Hồ sơ âm thanh có cấu trúc tương tự như bộ mô tả âm thanh đơn giản của HDMI, cho phép một bộ tốc độ lấy mẫu/mặt nạ kênh khác cho từng định dạng âm thanh.
Có các định nghĩa rõ ràng cho tất cả các mối kết nối có thể có giữa thiết bị và luồng dữ liệu.
Trước đây, một quy tắc ngầm định cho phép kết nối tất cả các thiết bị được gắn 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, nội dung mô tả về cấu trúc liên kết sẽ xác định các giới hạn kết nối.
Hỗ trợ cho bao gồm việc tránh lặp lại các định nghĩa tiêu chuẩn A2DP, USB hoặc định nghĩa về việc gửi lại.
Bạn có thể tuỳ chỉnh đường cong âm lượng. Trước đây, các bảng âm lượng được mã hoá cứng. Trong định dạng XML, các bảng âm lượng được mô tả và có thể 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 trong số này đang được sử dụng.
Định dạng và vị trí của 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 minh hoạ 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à các phiên bản dưới 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 đường:
Mix ports (Cổng kết hợp) mô tả các cấu hình có thể có cho những luồng có thể mở tại HAL âm thanh để phát và ghi.
Cổng thiết bị mô tả những thiết bị có thể được gắn với loại của chúng (và tuỳ chọn là địa chỉ và thuộc tính âm thanh, nếu có liên quan).
Các tuyến được tách biệt với bộ 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 từ 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 để chuyển đổi từ chỉ mục giao diện người dùng sang âm lượng tính bằng dB. Một tệp include 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ể dùng phương thức XML Inclusions (XInclude) để thêm thông tin cấu hình chính sách âm thanh nằm trong các tệp XML khác. Tất cả các tệp được đưa vào phải tuân theo cấu trúc được mô tả ở trên với 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 các tệp include để 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ả các tệp cấu hình chính sách âm thanh (dễ xảy ra lỗi). Một 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:
AudioPolicyManager.cpp được chia thành nhiều mô-đun để giúp bạn dễ dàng duy trì và định cấu hình. Cấu trúc của 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 thường thấy ở tất cả cá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 chung đượ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 các cấu hình luồng âm thanh đầu vào, đầu ra, bộ mô tả thiết bị âm thanh, bản vá âm thanh và cổng âm thanh). Trước đây, tham số này được xác định trong AudioPolicyManager.cpp.
/engine
Triển khai các quy tắc xác định thiết bị và ổ đĩa nào sẽ được dùng cho một trường hợp sử dụng nhất định. Nó triển khai một giao diện tiêu chuẩn với phần chung, chẳng hạn như để lấy thiết bị phù hợp cho một trường hợp sử dụng phát hoặc ghi nhất định, hoặc để đặt các 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
Việc 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
Việc triển khai công cụ chính sách dựa trên các hoạt động triển khai Android Audio Policy Manager trước đây. Đâ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 các phương thức triển khai Nexus và AOSP.
/service
Bao gồm các giao diện liên kết, luồng và việc triển khai khoá 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 để giúp bạn 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. Thiết kế chính sách về tổ chức và âm thanh dựa trên Parameter Framework (Khung tham số) của Intel, một khung dựa trên quy tắc và trình bổ trợ để 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 các nhà cung cấp OEM:
Mô tả cấu trúc và các tham số của hệ thống ở định dạng XML.
Viết (bằng 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 (trong XML hoặc bằng một ngôn ngữ dành riêng cho miền) các điều kiện/quy tắc mà theo đó một tham số nhất định phải nhận một giá trị nhất định.
AOSP có 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ề Parameter Framework (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 cách sử dụng lựa chọn bản dựng USE_CONFIGURABLE_AUDIO_POLICY.
Trong 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 giới thiệu một API liệt kê và lựa chọn công khai nằm trên cơ sở hạ tầng cổng âm thanh/bản vá âm thanh và cho phép nhà phát triển ứng dụng cho biết lựa chọn ưu tiên cho một đầu ra hoặc đầu vào cụ thể của thiết bị đối với các bản ghi hoặc bản nhạc âm thanh được kết nối.
Trong Android 7.0, API Liệt kê và chọn được xác minh bằng các kiểm thử CTS và được mở rộng để bao gồm cả việc định tuyến cho các luồng âm thanh C/C++ gốc (OpenSL ES).
Việc định tuyến các luồng gốc vẫn được thực hiện bằng Java, cùng với việc bổ sung một giao diện AudioRouting thay thế, kết hợp và không dùng nữa các phương thức định tuyến rõ ràng dành riêng cho các lớp AudioTrack và AudioRecord.
Để biết thông tin chi tiết về API Liệt kê và chọn, hãy tham khảo các 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 AudioRouting.
Dịch vụ 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, bạn có thể xuất luồng âm thanh trực tiếp đến phần cứng âm thanh (thao tác này sẽ bỏ qua bộ trộn AudioFlinger để không bị trộn xuống thành 2 kênh). HAL âm thanh phải cho biết liệu một hồ sơ luồng đầu ra có hỗ trợ các chức năng âm thanh đa kênh hay không. Nếu HAL cho thấy 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 có đầ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 của bạn. Ví dụ sau đây trong frameworks/av/services/audiopolicy/config/primary_audio_policy_configuration_tv.xml cho thấy một mặt nạ kênh động, tức là trình quản lý chính sách âm thanh sẽ truy vấn các mặt nạ kênh mà đầu thu 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 tự động trộn nội dung xuống âm thanh nổi khi nội dung đượ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 các 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 Khai báo các 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: 2025-10-10 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-10-10 UTC."],[],[]]