PulseAudio không thể đặt cấu hình thẻ thành 'a2dp_sink'. Làm thế nào tôi có thể xem các bản ghi và tìm ra những gì sai?


31

Hiện tại tôi đã cài đặt Ubuntu 16.04 và a2dp được sử dụng để làm việc trên bản cài đặt mới, mà tôi muốn để lại như là một tùy chọn cuối cùng. Khi việc ghép nối bị xóa khỏi cài đặt bluetooth và đôi khi được ghép lại, nó sẽ quản lý trên cấu hình a2dp, nhưng nếu tai nghe bị ngắt kết nối và sau đó kết nối lại các cấu hình a2dp sẽ không hoạt động nữa (mặc dù nó nói là trên a2dp), nó chỉ hoạt động sau khi chuyển sang HSP / HSF và sau đó tôi không thể đặt nó trên a2dp.

Tôi đã thử làm:

 pacmd set-card-profile <index> a2dp_sink

nhưng lỗi sau xuất hiện:

"Failed to set card profile to 'a2dp_sink'"

Tôi khá thiếu kinh nghiệm về Linux vì vậy tôi không biết làm thế nào để có được nhật ký hoặc những gì cần tìm trong chúng, nhưng tôi đã nhận được điều này từ danh sách thẻ pacmd:

Khi nó hoạt động:

name: <bluez_card.50_C9_71_97_A1_86>
driver: <module-bluez5-device.c>
owner module: 27
properties:
    device.description = "Jabra REVO a4.0.0"
    device.string = "50:C9:71:97:A1:86"
    device.api = "bluez"
    device.class = "sound"
    device.bus = "bluetooth"
    device.form_factor = "headset"
    bluez.path = "/org/bluez/hci0/dev_50_C9_71_97_A1_86"
    bluez.class = "0x240404"
    bluez.alias = "Jabra REVO a4.0.0"
    device.icon_name = "audio-headset-bluetooth"
    device.intended_roles = "phone"
profiles:
    headset_head_unit: Headset Head Unit (HSP/HFP) (priority 20, available: unknown)
    a2dp_sink: High Fidelity Playback (A2DP Sink) (priority 10, available: unknown)
    off: Off (priority 0, available: yes)
active profile: <a2dp_sink>
sinks:
    bluez_sink.50_C9_71_97_A1_86/#6: Jabra REVO a4.0.0
sources:
    bluez_sink.50_C9_71_97_A1_86.monitor/#10: Monitor of Jabra REVO a4.0.0
ports:
    headset-output: Headset (priority 0, latency offset 0 usec, available: unknown)
        properties:

    headset-input: Headset (priority 0, latency offset 0 usec, available: unknown)
        properties:

Khi nó không:

name: <bluez_card.50_C9_71_97_A1_86>
driver: <module-bluez5-device.c>
owner module: 25
properties:
    device.description = "Jabra REVO a4.0.0"
    device.string = "50:C9:71:97:A1:86"
    device.api = "bluez"
    device.class = "sound"
    device.bus = "bluetooth"
    device.form_factor = "headset"
    bluez.path = "/org/bluez/hci0/dev_50_C9_71_97_A1_86"
    bluez.class = "0x240404"
    bluez.alias = "Jabra REVO a4.0.0"
    device.icon_name = "audio-headset-bluetooth"
    device.intended_roles = "phone"
profiles:
    headset_head_unit: Headset Head Unit (HSP/HFP) (priority 20, available: unknown)
    a2dp_sink: High Fidelity Playback (A2DP Sink) (priority 10, available: yes)
    off: Off (priority 0, available: yes)
active profile: <off>
ports:
    headset-output: Headset (priority 0, latency offset 0 usec, available: yes)
        properties:

    headset-input: Headset (priority 0, latency offset 0 usec, available: unknown)
        properties:

Và mô-đun sở hữu là:

name: <module-bluez5-device>
argument: <path=/org/bluez/hci0/dev_50_C9_71_97_A1_86>
used: 0
load once: no
properties:
    module.author = "João Paulo Rechi Vita"
    module.description = "BlueZ 5 Bluetooth audio sink and source"
    module.version = "8.0"

Tôi đã cố gắng sửa đổi /etc/bluetooth/audio.conf và cài đặt blueman nhưng nó không hoạt động. Tôi cũng đã thử cài đặt lại bluez và pulseaudio nhưng không có gì thay đổi.

Có cách nào tôi có thể biết những gì sai và sửa chữa nó?


bạn có thể vui lòng giải thích bạn lấy thông tin này từ đâu không? và chỉ số là gì? cảm ơn!
Ezequiel Moreno

Kiểm tra tại đây Askubfox.com/a/817926/33292
pylover

Câu trả lời:


23

Dựa trên dòng "hồ sơ hoạt động: <off>" cấu hình âm thanh không kích hoạt.

Một chương trình dễ sử dụng để thay đổi hồ sơ là pavucontrol. Bạn có thể cài đặt nó với sudo apt install pavucontrol -y. Sau đó chạy pavucontrol từ dòng lệnh hoặc Alt + F2 nếu bạn đang ở trên Kubfox và nhập pavucontrol.

Chọn tab cấu hình và sau đó thử thay đổi cấu hình cho tai nghe của bạn và xem liệu đó có cập nhật cho bạn không. Dường như có một lỗi với bluetooth a2dp vẫn còn trong linux và nó ảnh hưởng đến hai trong số 16.04 cài đặt của tôi. Nếu đã nói A2DP thay đổi thành TẮT, ngắt kết nối thiết bị trong applet bluetooth, sau đó kết nối lại. Sau đó, cuối cùng tiến hành thay đổi hồ sơ trở lại A2DP và nó sẽ hoạt động.

Bạn cũng có thể thử các thao tác sau trên dòng lệnh và tab này sẽ hoàn thành phần lớn cho bạn. Thay thế số 2 bằng số chỉ mục hiện tại cho cả hai lệnh pacmd bên dưới.

pacmd set-card-profile 2 off
bluetoothctl
disconnect 50:C9:71:97:A1:86
connect 50:C9:71:97:A1:86
pacmd set-card-profile 2 a2dp_sink

Đối với một cách phức tạp hơn nhưng tự động làm điều tương tự để tắt cấu hình và sau đó quay lại a2dp nhưng không ngắt kết nối và kết nối thiết bị bluetooth

index=`pacmd list-cards | grep bluez_card -B1 | grep index | awk '{print $2}'`;pacmd set-card-profile $index off; pacmd set-card-profile $index a2dp_sink 

Tôi cũng đã tạo ra một kịch bản hoạt động nhưng cẩu thả để làm điều tương tự nhưng cũng ngắt kết nối và kết nối lại tai nghe bluetooth. Nó lấy chỉ mục cấu hình vì chỉ mục thay đổi mỗi khi thiết bị bị ngắt kết nối và kết nối lại. Đây là mã hóa cứng với id thiết bị cho tai nghe bạn đã liệt kê ở trên

pacmd set-card-profile `pacmd list-cards | grep bluez_card -B1 | grep index | awk '{print $2}'` off; sleep 2 ; echo -e "disconnect 50:C9:71:97:A1:86\n quit"|bluetoothctl;sleep 5; echo -e "connect 50:C9:71:97:A1:86\n quit"|bluetoothctl; sleep 5; pacmd set-card-profile `pacmd list-cards | grep bluez_card -B1 | grep index | awk '{print $2}'` a2dp_sink

Trong quá trình thử nghiệm, tôi đã kết thúc với 5 giây để ngủ thay vì 3 vì thiết bị chưa sẵn sàng thay đổi cấu hình âm thanh. Kết quả của bạn có thể thay đổi trong vài giây +/- 5 giây. Chỉnh sửa liên quan đến một cạm bẫy tiềm năng. Tôi đã thấy rằng đôi khi cần phải chạy tập lệnh lớn hơn hai lần trước khi nó hoạt động. Tôi không chắc việc tăng thời gian ngủ có giúp ích hay không vì tôi chưa kiểm tra điều đó. Nhưng tôi đã sử dụng nó trên hai máy có cùng nhãn hiệu tai nghe BT và nó đang làm những gì được cho là để tự động hóa quá trình để âm thanh hoạt động trên tai nghe.

Cuối cùng, vấn đề sẽ được vá trong gói bluetooth nhưng dường như tiếp tục quay trở lại trong các bản phát hành mới của Ubuntu cũng như các phiên bản khác của Linux. Nhưng dù sao cũng hy vọng điều đó có ích cho bạn


>> Làm thế nào tôi có thể xem nhật ký và tìm ra những gì sai? << Sẽ thật tuyệt nếu bạn cũng có thể trả lời câu hỏi này :)
kitingChris

Đặt âm thanh cho tai nghe bluetooth trong pavucontrol gui hoạt động với tôi. Hoạt động tốt hơn công cụ âm thanh Gnome.
QkiZ

1
2 năm sau và câu trả lời này là cần thiết cho tôi với chiếc Sony WH-H900N của tôi.
Joakim Wimmerstedt

(1 năm sau) bằng XFCE và trình quản lý blueman, tôi thường phải bluetoothctl disconnect aa:bb:cc:dd:ee:ff && bluetoothctl connect aa:bb:cc:dd:ee:fftrước khi nhấp chuột phải vào menu Thiết bị sẽ cho phép tôi chuyển cấu hình âm thanh sang A2DP. Thỉnh thoảng tôi cũng phải giết một quá trình quản lý blueman con khi mất quá nhiều thời gian để hiển thị menu thiết bị.
ericP

Cảm ơn đã cung cấp các lệnh này. Đây là cách giải quyết duy nhất hoạt động với Ubuntu 18.04 và Sony WH-1000xm2 của tôi. Tôi đã viết kịch bản cho ý chính này: gist.github.com/egelev/2e6b57d5a8ba62cf6df6fff2878c3fd4
egelev

19

Để cho phép hệ thống của bạn được phát hiện dưới dạng chìm A2DP (ví dụ: để phát nhạc từ điện thoại của bạn qua loa máy tính), hãy thêm vào Enable=Source,Sink,Media,Socketbên dưới .[General]/etc/bluetooth/audio.conf

Sau khi làm điều này, khởi động lại daemon bluetooth

systemctl restart bluetooth

Kết nối thiết bị tai nghe của bạn

bluetoothctl
connect <MAC>

Kiểm tra thẻ của bạn và thiết lập hồ sơ

pacmd list-cards
pacmd set-card-profile <index> <profile>

1
Sử dụng ubfox 16.04 /etc/bluetooth/audio.conf không tồn tại, tôi nên viết dòng này ở đâu?
thebeancount

Điều này đã sửa nó cho tôi trên Debian Sid, cảm ơn bạn!
Xerz

@thebeancount thêm tệp nếu nó không tồn tại
Jimubao

thỉnh thoảng nếu bạn mất kết nối với bồn rửa A2DP, hãy thử "tắt nguồn" trong bluetoothctl và sau đó "systemctl restart bluetooth" và sau đó trong bluetoothctl "bật nguồn" và kết nối lại thiết bị của bạn
Jimubao

1
Đã làm việc trên ARch / Manjaro! Tuy nhiên, tập tin hiện được đặt tại /etc/bluetooth/main.confphiên bản gần đây
MCMZL

13

Tôi gặp vấn đề này trên Ubuntu 16.04.1 LTS và áp dụng công việc GDM xung quanh được tìm thấy trong https://wiki.debian.org/BluetoothUser/a2dp đã giải quyết nó.

Cụ thể, tạo / chỉnh sửa /var/lib/gdm3/.config/pulse/client.confđể đọc:

autospawn = no
daemon-binary = /bin/true

Sau đó

sudo chown gdm:gdm /var/lib/gdm3/.config/pulse/client.conf

Tôi cũng đã thêm vào /etc/pulse/default.pa

load-module module-switch-on-connect

Mặc dù điều này có thể không thực sự cần thiết.

Sau khi khởi động lại, tôi đã kết nối qua trình quản lý bluetooth đã có thể chuyển thành công cấu hình âm thanh sang a2dp_sink .


Tôi gặp vấn đề là bluez-firmware không có sẵn trong bước đầu tiên trong liên kết, sau đó người dùng gdm không thể tìm thấy. Ngoài ra, thư mục gdm3 không tồn tại, do đó phải tạo toàn bộ đường dẫn đó.
lời giới thiệu

Tôi đã thực hiện cách giải quyết thứ hai từ liên kết đó từ Debian, hoạt động như một cơ duyên!
Amfocation

5

lagerismi đã đăng một kịch bản ở đây trên launchpad dựa trên câu trả lời của Jamie S.

  • Thay đổi địa chỉ MAC của thiết bị trong biến bên trong tập lệnh! (có thể được tìm thấy với bluetoothctl-> Thiết bị)

  • Làm cho tập lệnh thực thi chmod a-x bluetooth_headphone_reactivation.sh

Để thực hiện tự động khi khởi động (chỉ hoạt động nếu tai nghe đã được bật):

  • Thêm tập lệnh vào tập lệnh bắt đầu / tắt máy trong bảng điều khiển của KDE

Để thực hiện thủ công nhanh:

  • Thêm một mục vào trình khởi động ứng dụng (bạn cũng có thể đặt phím tắt keyboad như "CTRL + ALT + H" và / hoặc ghim bộ khởi động này vào thanh cửa sổ)

Kịch bản:

#!/bin/sh
device_mac='<your-devices-mac-address-here>'
pacmd set-card-profile `pacmd list-cards | grep bluez_card -B1 | grep index | awk '{print $2}'` off
sleep 2 
echo "disconnect $device_mac\n quit"|bluetoothctl
sleep 5
echo "connect $device_mac\n quit"|bluetoothctl
sleep 5
pacmd set-card-profile `pacmd list-cards | grep bluez_card -B1 | grep index | awk '{print $2}'` a2dp_sink

Bạn nên sử dụng -evới echo.
jarno

3

Trên Xubfox 16.04.2
Sử dụng trình quản lý blueman:

  1. kết nối -> tắt hồ sơ
  2. kết nối lại -> thiết lập hồ sơ a2dp
  3. bây giờ tai nghe của bạn đã ổn

Kịch bản bash JBL của tôi

#!/bin/bash
#headset mac
mac="00:1D:DF:67:0A:29"
profile="a2dp"
# Special Bluetooth controller, default is empty
btMac=""
#connect|disconnect wait time
waitTime=5

macId="${mac//:/_}"
deviceId="bluez_card.$macId"

declare -A profiles
profiles['a2dp']='a2dp_sink'
profiles['hsp']='headset_head_unit'
profiles['off']='off'

function btCmd() {
    cmd="$1\nquit"
    [ ! -z "$btMac" ] && cmd="select $btMac\n$cmd"
    echo -e "$cmd" | bluetoothctl
}
function setProfile() {
    cmd="pactl set-card-profile $deviceId ${profiles[$1]}"
    echo $cmd
    $cmd
}
function btWaitConnect() {
    conState=$1
    for ((i=1;i<=$waitTime;++i)); do
        tmp="`btCmd "info $mac"|grep 'Connected: '`"
        [ ! -z "`echo "$tmp"|grep $conState`" ] && echo "$tmp" && return 0
        sleep 1s
    done
    echo "$tmp"
    return 1
}
function btConnect() {
    tmp="`btCmd "trust $mac\nconnect $mac" | grep -v 'NEW\|DEL\| quit'`"
    echo "$tmp"

    tmp="`btWaitConnect yes`"
    echo $tmp
    [ -z "`echo "$tmp" | grep yes`" ] && echo -e "Device $mac:\n\tConnected: fail." && return 1
    sleep 2s
    return 0
}
function btDisConnect() {
    tmp="`btCmd "disconnect $mac" | grep -v 'NEW\|DEL\| quit'`"
    echo "$tmp"

    tmp="`btWaitConnect no`"
    echo $tmp
    [ -z "`echo "$tmp" | grep no`" ] && echo -e "Device $mac:\n\tdisconnected: fail." && return 1
    sleep 1s
    return 0    
}


# controller
echo ""
btCtls="`btCmd list | grep '^Controller' | grep " $btMac"`"
echo -e "controller:\n$btCtls"
[ -z "$btCtls" -o ! -z "`echo "$btCtls" | grep "not available"`" ] && exit 1


# connect -> set off
echo ""
tmp="`btCmd paired-devices | grep '^Device' | grep " $mac"`"
echo -e "paired-devices:\n$tmp"
[ `echo "$tmp" | wc -l` != 1 ] && echo "Please pair the Bluetooth headset first: $mac" && exit 1
btConnect || exit $?
setProfile off

# reconnect -> set profile
btDisConnect || exit $?
btConnect || exit $?
setProfile $profile

Câu trả lời này và @freespace đã giúp tôi thiết lập i3
Luis Lobo Borobia

Bản cập nhật mới nhất chứa thiết lập bồn rửa mặc định, nhưng tôi không biết, nếu cần thiết.
jarno

2

Vì vậy, nếu bạn đang sử dụng Debian, bạn có thể làm như sau: Từ chối chuyển hồ sơ sang a2dp_sink: Không được kết nối

Vấn đề

Tai nghe Bluetooth được kết nối, nhưng ALSA / PulseAudio không nhận được thiết bị được kết nối hoặc không có thiết bị nào để chọn. Điều này xảy ra vì GDM thu được A2DP chìm khi bắt đầu phiên, vì GDM cần pulseaudio trong phiên gdm để truy cập. Ví dụ, trình đọc màn hình yêu cầu nó.

Dung dịch

Để ngăn GDM bắt giữ chìm A2DP khi bắt đầu phiên, hãy chỉnh sửa /var/lib/gdm3/.config/pulse/client.conf(hoặc tạo nó, nếu nó không tồn tại):

autospawn = no
daemon-binary = /bin/true

Sau đó, bạn phải cấp quyền truy cập vào tệp này cho người dùng Debian-gdm:

chown Debian-gdm:Debian-gdm /var/lib/gdm3/.config/pulse/client.conf

Bạn cũng sẽ cần phải tắt tính năng khởi động pulseaudio:

rm /var/lib/gdm3/.config/systemd/user/sockets.target.wants/pulseaudio.socket

Để tự động kết nối a2dp cho một số thiết bị, hãy thêm phần này vào /etc/pulse/default.pa:

load-module module-switch-on-connect

Khởi động lại.


Cảm ơn ngài đã không theo dõi đám đông sùng bái hàng hóa và thực sự giải thích vấn đề! Tôi có thể xác nhận rằng điều này thực sự giúp ích cho Debian.
Marcin Owsiany

1

Tôi chắc chắn rằng các câu trả lời trước thực sự cố gắng giải quyết nguyên nhân gốc rễ của vấn đề. Tôi, tuy nhiên, đã không thể làm cho bất kỳ ai trong số họ làm việc. Tôi gặp vấn đề chính xác giống như OP, nhưng trên Linux Mint 17/18. Tôi đã viết kịch bản này để kết nối bluetooth một cách đáng tin cậy và sử dụng a2dp.

Sao chép / dán cho hậu thế, nhưng vấn đề cốt lõi là nó sao chép chính xác những gì OP (và tôi) sẽ phải làm trong UI.

Kịch bản của Dominik sẽ không hoạt động đáng tin cậy đối với tôi, vì nó sẽ chỉ thử một lần để thiết lập mọi thứ. Tôi phải chạy nó nhiều lần để nó hoạt động. Đây là những gì tôi đã kết thúc, nó hoạt động mọi lúc.

#!/bin/bash

MAC=$1
CARD=$(echo "${MAC}" | sed -e 's/:/_/g')
CARD="bluez_card.${CARD}"

$(pactl list | grep -qi 'Active Profile: a2dp_sink')
a2dpUsed=$?

# this loops until a2dp is _actually used_ on the given MAC.
while [ ${a2dpUsed} -ne 0 ];
do
    #
    echo "Restarting bluetooth."
    rfkill unblock bluetooth
    sudo service bluetooth restart
    sudo hciconfig hci0 up

    # reconnect
    echo -e "power on\nconnect ${MAC}" | bluetoothctl

    #
    echo "Waiting for headset to be connected..."
    btConnected=1

    while [ ${btConnected} -gt 0 ];
    do

        sleep .1
        $(bluetoothctl <<< "info ${MAC}" | grep -qi "Connected: yes")
        btConnected=$?
    done

    #
    echo "Bluetooth connected, waiting for profiles to register"

    cardFound=1
    while [ ${cardFound} -ne 0 ];
    do
        $(pactl list | grep -qi "${CARD}")
        cardFound=$?
    done

    #
    echo "Setting bluetooth a2dp profile"
    pactl set-card-profile ${CARD} a2dp_sink
    $(pactl list | grep -qi 'Active Profile: a2dp_sink')
    a2dpUsed=$?
done

echo "a2dp is working."

1

Như được ghi lại ở đây , đó là bởi vì GDM thu được A2DP chìm khi bắt đầu phiên, vì GDM cần pulseaudio trong phiên gdm để truy cập.
Hãy thử thêm phần này vào "/var/lib/gdm3/.config/pulse/default.pa" hoặc tạo nó, sau đó khởi động lại:

#!/usr/bin/pulseaudio -nF
#

# load system wide configuration
.include /etc/pulse/default.pa

### unload driver modules for Bluetooth hardware
.ifexists module-bluetooth-policy.so
  unload-module module-bluetooth-policy
.endif

.ifexists module-bluetooth-discover.so
  unload-module module-bluetooth-discover
.endif

0

Tôi đã cố gắng thiết lập Bluetooth của mình và luôn gặp lỗi này.

Tôi thấy rằng vấn đề là Skype. Nếu tôi có Skype đang chạy, tôi không thể thiết lập a2dp_sinkhồ sơ.

Vì vậy, nếu bạn gặp phải vấn đề này, hãy xem bạn có chạy Skype không và tắt nó đi.


0
systemctl restart bluetooth
  • Mở cài đặt âm thanh (có thể truy cập bằng cách nhấp vào biểu tượng loa trong khay)
  • Hãy thử và thay đổi cấu hình đầu ra thành A2DP chìm.
  • Nếu điều đó không hiệu quả, hãy thay đổi thiết bị của bạn thành Loa hoặc một cái gì đó khác và sau đó chuyển lại thiết bị.
  • Tôi thường thấy rằng sau đó tôi có thể thiết lập hồ sơ đầu ra của mình

0

Tôi đã chọn giải quyết nó bằng một quy tắc udev, vì tôi là người dùng duy nhất của hệ thống, vì vậy $USER, $XAUTHORITY$DISPLAYnổi tiếng.

Có lẽ điều này hữu ích cho ai đó muốn một giải pháp được xác định trong một tệp duy nhất, chạy trên Ubuntu 18.04.1 LTS.

Móc được kích hoạt thông qua inputhệ thống con vì loa dường như được khởi tạo hoàn toàn ở giai đoạn này.

# file: /etc/udev/rules.d/99-jbl-go2.rules
# fix JBL GO2 with CSR bluetooth: switch to a2dp profile upon connect
# byteborg 20190110
SUBSYSTEMS=="input", ACTION=="add", ATTRS{name}=="70:99:1C:41:C6:EB", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/run/user/1000/gdm/Xauthority", RUN+="/bin/su alpha -c '/usr/bin/pacmd set-card-profile bluez_card.70_99_1C_41_C6_EB a2dp_sink'"

Archlinux Wiki đề cập đến các thiết bị Cambridge Silicon Radio cung cấp cấu hình sai khi kết nối ( https://wiki.archlinux.org/index.php/Bluetooth_headset#A2DP_sink_profile_is_unav Available ). Tôi có thể thừa nhận hành vi này với loa bluetooth "JBL GO 2", hoạt động sai như đã đề cập. a2dp dường như sẽ khả dụng trong một thời gian ngắn sau khi kết nối - có lẽ là vấn đề thời gian?


0

Điều này đã khắc phục sự cố hồ sơ thẻ-set cho tôi: https://bugs.launchpad.net/ubfox/+source/pulseaudio/+orms/1181106/comments/15

Trích dẫn:

1) Modify the /etc/bluetooth/audio.conf
================================

[General]
Enable = Source,Sink,Headset,Gateway,Control,Media
Disable = Socket

HFP=false

[A2DP]
SBCSources=1
MPEG12Sources=0

2) Check for pulseaudio module :
==========================

$ pactl list | grep -i module-bluetooth

If you dont have :
     module-bluetooth-policy
     module-bluetooth-discover
     module-bluetooth-device

Just do :
$ sudo apt-get install pulseaudio-module-bluetooth
$ pulseaudio -k
$ pactl load-module module-bluetooth-device
$ pactl load-module module-switch-on-connect

3) Connect the bluetooth headset
===========================

Use blueman to pair, and connect audio sink
Use pavucontrol to change for A2DP (even if blueman said "audio profile off")

Please confirm that works for you too.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.