Kể từ năm 2026, để phù hợp với mô hình phát triển ổn định của nhánh chính và đảm bảo tính ổn định của nền tảng cho hệ sinh thái, chúng tôi sẽ xuất bản mã nguồn lên AOSP vào quý 2 và quý 4. Để tạo và đóng góp cho AOSP, bạn nên sử dụng android-latest-release thay vì aosp-main. Nhánh tệp kê khai android-latest-release sẽ luôn tham chiếu đến bản phát hành gần đây nhất được chuyển đến AOSP. Để biết thêm thông tin, hãy xem bài viết Các thay đổi đối với AOSP.
Google uses AI technology to translate content into your preferred language. AI translations can contain errors.
Định cấu hình chính sách âm thanh
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ể trình quản lý chính sách âm thanh
để mang lại sự linh hoạt hơn 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ũ bằng cách sử dụng cùng một đường cong âm lượng.
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 và nhóm âm lượng 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 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ụ: sử dụng tất cả thuộc tính của thiết bị chứ không chỉ loại thiết bị trong 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 liên kết â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 thuộc quyền sở hữu riêng, đơn giả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ư TV và ô tô.
Android 7.0 đã ngừng sử dụng audio_policy.conf và thêm tính năng hỗ trợ để xác định cấu trúc liên kết âm thanh bằ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à 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, cũng như các thuộc tính âm thanh. Ngoài ra, định dạng XML còn mang đến 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 đang hoạt động.
Không bao giờ từ chối việc bắt đầu ghi do tình huống đồng thời.
Phương thức gọi lại registerAudioRecordingCallback(AudioManager.AudioRecordingCallback cb)
sẽ thông báo cho ứng dụng khách về các thay đổi trong đường dẫn ghi.
Trong các trường hợp sau, ứng dụng khách sẽ nhận được mẫu âm thanh im lặng:
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ách 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.
Các vai trò đặc biệt được chính sách nhận dạng:
Dịch vụ hỗ trợ tiếp cận: Có thể ghi 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 ở 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 có một tập hợp tốc độ lấy mẫu/mặt nạ kênh khác nhau cho từng đị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 định 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. Ở định dạng XML, nội dung mô tả cấu trúc liên kết sẽ xác định các giới hạn kết nối.
Tính năng hỗ trợ cho includes giúp tránh việc lặp lại các định nghĩa gửi lại A2DP, USB hoặc định tuyến lại tiêu chuẩn.
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. Ở đị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í 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 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 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:
Cổng kết hợp mô tả các hồ sơ cấu hình có thể có cho các luồng có thể mở tại HAL âm thanh để phát và ghi.
Cổng thiết bị mô tả các thiết bị có thể được đính kèm theo loại (và tuỳ ý địa chỉ và thuộc tính âm thanh, nếu có liên quan).
Tuyến được tách khỏi bộ mô tả cổng kết hợp, cho phép mô tả các tuyến từ thiết bị sang thiết bị hoặc luồng sang 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 bao gồm riêng biệt cung cấp các đường cong mặc định, nhưng bạn có thể ghi đè từng đường cong cho một trường hợp sử dụng và danh mục thiết bị nhất định.
Bạn có thể sử dụng phương thức Bao gồm XML (XInclude) để bao gồ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 bao gồm 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 thể chứa các phần tử XInclude.
Hãy sử dụng các tệp 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ả 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 để 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 chung 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 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 hồ sơ luồng âm thanh đầu vào, bộ mô tả thiết bị âm thanh, bản vá âm thanh và cổng âm thanh). Trước đây, lớp này được xác định bên trong AudioPolicyManager.cpp.
/engine
Triển khai các quy tắc xác định thiết bị và âm lượng 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 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ị được 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 sử dụng bắt buộc) có thể thay đổi quyết định định tuyến.
Có 2 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
Định cấu hình bằng Khung tham số.
/engineconfigurable
Cách triển khai công cụ chính sách dựa vào 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
Cách triển khai công cụ chính sách dựa trên các cách triển khai Trình quản lý chính sách âm thanh Android trước đây. Đây là giá trị mặc định và bao gồm các quy tắc được mã hoá cứng tương ứng với các cách triển khai Nexus và AOSP.
/service
Bao gồm các giao diện trình liên kết, luồng và cách triển khai khoá bằng giao diện với phần còn lại của khung.
Định 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ấu trúc và thiết kế chính sách âm thanh dựa trên Khung tham số của Intel, một khung dựa trên quy tắc và dựa trên 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 nhà cung cấp OEM:
Mô tả cấu trúc của hệ thống 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 phần phụ trợ (trình bổ trợ) để truy cập các tham số được mô tả.
Xác định (bằng XML hoặc bằng ngôn ngữ dành riêng cho miền) các điều kiện/quy tắc mà một tham số nhất định phải nhận một giá trị nhất định.
AOSP bao gồm 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 cách sử dụng tuỳ 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 API Lựa chọn và Liệt kê 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 thiết bị cụ thể cho các bản ghi hoặc bản nhạc âm thanh được kết nối.
Trong Android 7.0, API Lựa chọn và Liệt kê được kiểm chứng 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 các luồng âm thanh C/C++ gốc (OpenSL ES).
Việc định tuyến các luồng gốc tiếp tục đượ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 các lớp AudioTrack và AudioRecord.
Để biết thông tin chi tiết về 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
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 trực tiếp luồng âm thanh sang phần cứng âm thanh (thao tác này 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 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 biết 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 đa 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 của bạn. Ví dụ sau đây từ frameworks/av/services/audiopolicy/config/primary_audio_policy_configuration_tv.xml cho thấy mặt nạ kênh động, nghĩa là trình quản lý chính sách âm thanh sẽ truy vấn các mặt nạ kênh được bộ thu HDMI hỗ trợ sau khi kết nối.
Bạn cũng có thể chỉ định 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 trộn nội dung xuống âm thanh nổi khi gửi đến 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
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: 2026-06-18 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: 2026-06-18 UTC."],[],[]]