คำเตือน:นี่เป็นคำแนะนำขั้นสูงที่เกี่ยวข้องกับการแก้ไขสแต็ค Bluetooth บน Android - อ่านคู่มือนี้อย่างครบถ้วนและปฏิบัติตามคำแนะนำทั้งหมดตรงตามที่ให้มา
แม้ว่าชุดหูฟัง Bluetooth และเสียง Bluetooth จะค่อนข้างเป็นที่นิยม แต่ก็เป็นปัญหาเล็กน้อยสำหรับผู้รักเสียงเพลงเพราะว่า Bluetooth ได้รับการพิสูจน์แล้วว่าลดคุณภาพเสียง เนื่องจากข้อมูลเสียงและความถี่บางส่วนหายไปในอากาศผ่านการสตรีม Bluetooth
นี่คือเหตุผลที่ผู้ผลิตบางรายนำตัวแปลงสัญญาณ aptX และ LDAC ออก เพื่อปรับปรุงคุณภาพเสียงเหนือตัวแปลงสัญญาณ Bluetooth SBC มาตรฐานซึ่งรองรับโดยหูฟังและอุปกรณ์ Bluetooth ส่วนใหญ่ อย่างไรก็ตาม อุปกรณ์ที่มีตัวแปลงสัญญาณ aptX และ LDAC มีราคาแพงกว่ามากเนื่องจากตัวแปลงสัญญาณเหล่านี้ ต้องการค่าธรรมเนียมใบอนุญาตซึ่งผู้บริโภคจ่ายในระยะยาว
คุณภาพเสียงต่ำของตัวแปลงสัญญาณบลูทูธ SBC เกิดจากข้อจำกัดของสแต็คบลูทูธและการกำหนดค่าหูฟังในปัจจุบันทั้งหมด และข้อจำกัดนี้สามารถหลีกเลี่ยงได้ในอุปกรณ์ที่มีอยู่
หากคุณสนใจเสียง Bluetooth เราจะแสดงให้คุณเห็นที่ส่วนท้ายของคู่มือนี้เกี่ยวกับวิธีการถ่ายโอนข้อมูลบันทึกเสียงของ Bluetooth และตรวจสอบเพื่อดูว่าคุณภาพเสียงและความถี่ประเภทใดที่คุณได้รับจากเครื่องรับ Bluetooth ของ Android
คู่มือนี้จะเน้นไปที่การปรับแต่งและวิธีอ่านเอาต์พุตเสียง Bluetooth ของคุณเพื่อปรับปรุงคุณภาพเอาต์พุตของตัวแปลงสัญญาณ Bluetooth SBC มาตรฐานอย่างมาก โปรดอ่านคู่มือนี้อย่างละเอียดถี่ถ้วนเนื่องจากเป็นเนื้อหาที่ให้ความรู้และมีหลายสิ่งที่แตกต่างกัน เพื่อแฟลชหรือปรับแต่ง ขึ้นอยู่กับรุ่นอุปกรณ์ของคุณ
ที่ส่วนท้ายของคู่มือนี้เป็นรายการสแต็ค Bluetooth ที่เตรียมไว้ล่วงหน้าสำหรับอุปกรณ์ Android ยอดนิยมจำนวนมาก - สิ่งเหล่านี้สามารถแฟลชในการกู้คืนได้เช่นเดียวกับไฟล์ .zip ที่สามารถแฟลชได้อื่น ๆ - หากไม่มีอุปกรณ์ใดที่เป็นของคุณ คุณจะมี เพื่อทำตามคำแนะนำในการแก้ไขสแต็ค Bluetooth บน Android
ข้อมูลทางเทคนิคโดยย่อเกี่ยวกับตัวแปลงสัญญาณ SBC
SBC มีพารามิเตอร์ต่างๆ มากมายที่มีการเจรจาระหว่างขั้นตอนการตั้งค่าการเชื่อมต่อ:
- ประเภทและหมายเลขช่องสัญญาณเสียง:Joint Stereo, Stereo, Dual Channel, Mono;
- จำนวนย่านความถี่:4 หรือ 8;
- จำนวนบล็อคเสียงในหนึ่งแพ็กเก็ต:4, 8, 12, 16;
- อัลกอริธึมการจัดสรรบิต Quantization:ความดัง, SNR;
- จำนวนบิตสูงสุดและต่ำสุดที่ใช้ในกระบวนการหาปริมาณ:โดยปกติ 2-53
ต้องใช้ตัวถอดรหัสเพื่อรองรับพารามิเตอร์เหล่านี้ร่วมกัน ตัวเข้ารหัสอาจใช้งานเพียงบางส่วนเท่านั้น
สแต็ค Bluetooth ที่มีอยู่มักจะเจรจากับโปรไฟล์ต่อไปนี้:Joint Stereo, 8 bands, 16 blocks, Loudness, bitpool 2..53 โปรไฟล์นี้เข้ารหัสเสียง 44.1 kHz ด้วยบิตเรต 328 kbps
พารามิเตอร์ Bitpool ส่งผลโดยตรงต่อบิตเรตภายในโปรไฟล์เดียวกัน ยิ่งสูงเท่าใด บิตเรตก็จะยิ่งสูงขึ้น และคุณภาพก็สูงขึ้นด้วย
อย่างไรก็ตาม พารามิเตอร์ bitpool ไม่ได้ผูกกับโปรไฟล์เฉพาะ บิตเรตยังได้รับผลกระทบอย่างมากจากพารามิเตอร์อื่นๆ เช่น ประเภทช่องสัญญาณเสียง จำนวนแถบความถี่ จำนวนบล็อกเสียง คุณสามารถเพิ่มบิตเรตทางอ้อมได้โดยการเจรจากับโปรไฟล์ที่ไม่ได้มาตรฐาน โดยไม่ต้องเปลี่ยนบิตพูล
ตัวอย่างเช่น Dual Channel เข้ารหัสแชนเนลแยกกัน โดยใช้บิตพูลทั้งหมดสำหรับแต่ละแชนเนล การบังคับให้อุปกรณ์ใช้ Dual Channel แทน Joint Stereo จะทำให้เราได้รับบิตเรตเกือบสองเท่าที่บิตพูลสูงสุดเท่าเดิม 617 kbps
สำหรับฉันแล้วรู้สึกว่า bitpool ควรเป็นตัวแปรภายใน เป็นข้อบกพร่องในการออกแบบข้อกำหนด A2DP ที่ค่าบิตพูลไม่ได้ผูกกับพารามิเตอร์ตัวแปลงสัญญาณอื่น ๆ และกำหนดเป็นค่าส่วนกลางเท่านั้น
ค่า Bitpool และ Bitrate คงที่เหล่านี้มาจากค่าที่แนะนำสำหรับเสียงคุณภาพสูง แต่คำแนะนำไม่ใช่ข้ออ้างที่จะจำกัดโปรไฟล์ให้มีค่าเหล่านี้
ข้อกำหนด A2DP v1.2 ซึ่งใช้งานตั้งแต่ปี 2550 ถึง 2558 กำหนดให้ตัวถอดรหัสทั้งหมดทำงานอย่างถูกต้องด้วยบิตเรตสูงสุด 512 kbps:
ตัวถอดรหัสของ SNK จะสนับสนุนค่า bitpool ที่เป็นไปได้ทั้งหมดที่ไม่ส่งผลให้อัตราบิตสูงสุดเกิน โปรไฟล์นี้จำกัดอัตราบิตสูงสุดที่ใช้ได้เป็น 320kb/s สำหรับโมโน และ 512kb/s สำหรับโหมดสองช่องสัญญาณ
ในเวอร์ชันใหม่ของข้อกำหนดนี้ ไม่มีการจำกัดบิตเรต สันนิษฐานว่าหูฟังรุ่นใหม่ที่ออกหลังจากปี 2015 สามารถรองรับบิตเรตได้ สูงถึง 1,000 kbps .
ด้วยเหตุผลบางประการ สแต็ค Bluetooth ที่ทดสอบทั้งหมดในปัจจุบัน (Linux (PulseAudio), Android, Blackberry และ macOS) มีข้อจำกัดเทียมของพารามิเตอร์ bitpool สูงสุด ซึ่งส่งผลกระทบโดยตรงต่อบิตเรตสูงสุด แต่นี่ไม่ใช่ปัญหาที่ใหญ่ที่สุด หูฟังเกือบทั้งหมดยังจำกัดค่าบิตพูลสูงสุดไว้ที่ 53
อุปกรณ์ส่วนใหญ่ทำงานได้ดีบนสแต็ก Bluetooth ที่ดัดแปลงด้วยบิตเรต 507 kbps โดยไม่มีการขัดจังหวะและเสียงแตก แต่อัตราบิตดังกล่าวจะไม่ได้รับการเจรจาภายใต้สภาวะปกติด้วยสแต็ค Bluetooth ในสต็อก
***จำเป็นสำหรับการทดสอบโดยใช้คำแนะนำด้านล่าง: bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso.torrent
วิธีทดสอบบนพีซี
การทดสอบความเข้ากันได้ของหูฟัง SBC อัตราบิตสูงเป็นวิธีที่ง่ายที่สุดที่จะทำบนพีซีด้วยอะแดปเตอร์ Bluetooth ฉันได้เตรียมอิมเมจ Ubuntu ด้วยสแต็ก Bluetooth ที่แก้ไขแล้ว ซึ่งสามารถทำงานเหมือนในเครื่องเสมือน (โดยการเชื่อมต่ออะแดปเตอร์ Bluetooth เป็นอุปกรณ์ USB ภายในเครื่องเสมือน มันยังใช้งานได้กับอะแดปเตอร์ที่ติดตั้งในแล็ปท็อป) หรือโดยการบูตจาก แฟลชไดรฟ์ USB ภาพนี้ใช้โปรไฟล์ต่อไปนี้:Dual Channel, 8 bands, 16 blocks, Loudness, bitpool 2..41, 44.1 kHz ซึ่งให้บิตเรต 485 kbps
ทำงานใน VM
- ดาวน์โหลด Virtualbox และ Virtualbox Extension Pack:https://www.virtualbox.org/wiki/Downloads;
- ติดตั้ง Virtualbox เริ่มเลย
- ติดตั้ง Extension Pack โดยใช้ File → Preferences → Extensions;
- สร้างเครื่องเสมือนใหม่:Linux, Ubuntu (64 บิต), 1024 RAM อย่าสร้าง HDD
- ไปที่การตั้งค่าเครื่องเสมือนใน Storage เลือก Controller:IDE, Empty, กดไอคอน CD → เลือกไฟล์ดิสก์ออปติคัลเสมือน
- เลือก Bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso ที่ดาวน์โหลดไว้
- บันทึกและปิดหน้าต่างการตั้งค่า เริ่มเครื่องเสมือน
- คลิกขวาที่ไอคอนสาย USB ที่ด้านล่างขวา เลือกอะแดปเตอร์บลูทูธ
ทำงานบนพีซี
อิมเมจรองรับการบูท BIOS/CSM และ UEFI
- เบิร์นรูปภาพไปยังแฟลชไดรฟ์ USB โดยใช้ Etcher:https://www.balena.io/etcher/ การดำเนินการนี้จะลบไฟล์ที่มีอยู่ทั้งหมดบนไดรฟ์ USB
- ปิดเครื่องคอมพิวเตอร์
- เสียบแฟลชไดรฟ์ USB เปิดเครื่อง PC แล้วกดปุ่มลำดับการบู๊ต (ปกติคือ Esc หรือ F12)
- เลือก USB แฟลชไดรฟ์ของคุณ
ทำการทดสอบ
- (ไม่บังคับ แต่แนะนำ) ดับเบิลคลิกที่สคริปต์ “Btsnoop Dump” บนเดสก์ท็อป จะเริ่มเก็บข้อมูล Bluetooth สำหรับการวิเคราะห์ในภายหลัง อย่าปิดหน้าต่างเทอร์มินัล
- เปลี่ยนหูฟังเป็นโหมดจับคู่
- คลิกไปที่ลูกศรที่มุมบนขวา เลือกไอคอนบลูทูธ → การตั้งค่าบลูทูธ
- เลือกหูฟังของคุณ รอจนกว่าการจับคู่จะเสร็จสิ้นและปิดหน้าต่าง
- ตั้งค่าระดับเสียงของ Ubuntu เป็นประมาณ 2/3 ลดระดับเสียงโดยใช้ปุ่มชุดหูฟังเนื่องจากอาจดังมากหลังจากจับคู่
- เปิดโฟลเดอร์ "เพลง" เล่น "testrecord1.flac";
- (ไม่บังคับ แต่แนะนำ) ปิดโปรแกรมเล่น ปิดหน้าต่างเทอร์มินัล การดำเนินการนี้จะหยุดการเก็บข้อมูล
- (ไม่บังคับ แต่แนะนำ) เปิดเบราว์เซอร์ Firefox อัปโหลดการถ่ายโอนข้อมูล (btsnoop_hci.btsnoop บนเดสก์ท็อป) ไปที่ https://btcodecs.valdikss.org.ru/
คุณสามารถฟังเพลงอื่นในโฟลเดอร์เพลงหรืออัปโหลดเพลงของคุณเองได้
ไม่ควรมีเสียงแตก เสียงขัดจังหวะ หรือการบิดเบือนของเสียงอื่นๆ ในหูฟัง หากคุณได้ยินเสียงคุณภาพสูง แสดงว่าหูฟังของคุณรองรับเสียงด้วยอัตราบิต 485 kbps
วิธีทดสอบบนอุปกรณ์ Android
ในการทดสอบจากสมาร์ทโฟนหรือแท็บเล็ต Android คุณต้องใช้สแต็ก Bluetooth ที่แก้ไขแล้ว ซึ่งต้องใช้สิทธิ์รูท
วิธีบันทึกการถ่ายโอนข้อมูลบลูทูธบน Android
- ปิดบลูทูธ
- ในการตั้งค่านักพัฒนาซอฟต์แวร์ ให้เปิดใช้งานสวิตช์ "เปิดใช้งานบันทึกการสอดแนม Bluetooth HCI"
- เปิดบลูทูธ เชื่อมต่อกับชุดหูฟังโดยใช้เมนูบลูทูธ (นี่สำคัญ! ไม่อนุญาตให้เชื่อมต่ออัตโนมัติ!);
- เล่นตัวอย่างเสียงสั้นๆ
- เปิดการตั้งค่านักพัฒนาซอฟต์แวร์ ปิดใช้งานสวิตช์ "เปิดใช้งานบันทึกการสอดแนม Bluetooth HCI"
- ควรจะสร้าง /storage/emulated/0/btsnoop_hci.log หรือ /data/misc/bluetooth/logs/btsnoop_hci.log หากไม่มี ให้เปิด /etc/bluetooth/bt_stack.conf ด้วยโปรแกรมแก้ไขข้อความ และดูเส้นทางในตัวเลือก BtSnoopFileName
ไม่ควรมีเสียงแตก เสียงขัดจังหวะ หรือการบิดเบือนของเสียงอื่นๆ ในหูฟัง หากคุณได้ยินเสียงคุณภาพสูงจากไลบรารีที่มีการแพตช์ แสดงว่าหูฟังของคุณรองรับเสียงด้วยอัตราบิต 512 kbps
โปรดปฏิบัติตามอัลกอริทึมด้านบนอย่างระมัดระวัง โดยเฉพาะอย่างยิ่ง หากคุณปิดหูฟังหรือยกเลิกการเชื่อมต่อหลังจากจับคู่ จำเป็นต้องเชื่อมต่อกับหูฟังด้วยตนเองจากการตั้งค่า Bluetooth ไม่อนุญาตให้เชื่อมต่ออัตโนมัติ!
อุปกรณ์ที่รองรับ SBC อย่างน้อย 512 kbit/s
- 1MORE iBFree
- JBL เอเวอร์เรสต์ 310
- JBL เอเวอเรสต์ 700
- Skullcandy HESH 3
- Sony WI-C400
- Sony MDR-1ABT
- Sony MDR-ZX770BT
- Sony MDR-XB650BT
- Sony MDR-XB950B1
- Sony SBH50
- Bluedio T4s (Bitpool max 39. ตอบสนองต่อการไม่สนับสนุน Dual Channel แต่ทำงานได้หากถูกบังคับ 462 kbit/s. ไม่สอดคล้องกับข้อกำหนด A2DP)
- Bluedio T5 (ตอบสนองต่อการไม่รองรับ Dual Channel แต่ใช้งานได้หากบังคับ ไม่เป็นไปตามข้อกำหนด A2DP)
- Bluedio T6 (ตอบสนองต่อการไม่รองรับ Dual Channel แต่ใช้งานได้หากบังคับ ไม่เป็นไปตามข้อกำหนด A2DP ใช้ชิป Max 97220)
- Marshall Major II บลูทูธ
- โอเวอร์ไดรฟ์ RealForce D1
- ตัวแก้ไข W830BT
- DEXP BT-250
- อะแดปเตอร์ Logitech BT
- ส่วนหัวของยานยนต์ Noname (ชิป CSR8645)
- ชุดเครื่องเสียงรถยนต์ Sony DSX-A400BT
อุปกรณ์ที่รองรับ SBC ที่สูงกว่า 512 kbit/s
- JBL Everest 310 (617-660 kbit/s)
- Sony WI-C400 (576 kbit/s)
- Sony MDR-ZX770BT (617-660 kbit/s)
- Marshall Major II Bluetooth (617-660 kbit/s)
- โอเวอร์ไดรฟ์ RealForce D1 (730 kbit/s, dual channel, 4 subbands)
อุปกรณ์ที่ไม่ทำงานกับบิตเรตที่สูงขึ้นหรือ Dual Channel
- Harper HB-202 (เสียงแตก; ชิป Beken BK3256)
- Sony Ericsson MW600 (ความผิดเพี้ยนความถี่สูง เสียงแตก อุปกรณ์ตั้งแต่ปี 2009)
เหตุใดจึงสำคัญ:SBC 328k และ 485k เทียบกับ aptX
ตรงกันข้ามกับความเชื่อที่นิยมในเรื่องคุณภาพเสียง aptX ในบางกรณี อาจทำให้คุณภาพเสียงแย่กว่า SBC ด้วยอัตราบิตมาตรฐาน 328k
SBC จัดสรรบิตควอนไทเซชันแบบไดนามิกสำหรับย่านความถี่ โดยดำเนินการแบบ "จากล่างขึ้นบน" หากใช้บิตเรตทั้งหมดสำหรับความถี่ต่ำและกลาง ความถี่บนจะ “ถูกตัดออก” (ปิดเสียง)
aptX ควอนไทซ์แถบความถี่ด้วยจำนวนบิตเท่ากันอย่างต่อเนื่อง ซึ่งทำให้เป็นตัวแปลงสัญญาณบิตเรตคงที่:352 kbps สำหรับ 44.1 kHz, 384 kbps สำหรับ 48 kHz ไม่สามารถ "โอนบิต" ไปยังความถี่ที่ส่วนใหญ่ต้องการได้ ต่างจาก SBC ตรงที่ aptX จะไม่ "ตัด" ความถี่ แต่จะเพิ่มสัญญาณรบกวนของควอนไทเซชันเข้าไป ลดช่วงไดนามิกของเสียง และบางครั้งก็ทำให้เกิดเสียงแตก ในทางกลับกัน SBC “กินรายละเอียด” – ละทิ้งพื้นที่ที่เงียบที่สุด
โดยเฉลี่ยแล้ว เมื่อเปรียบเทียบกับ SBC 328k แล้ว aptX จะบิดเบือนเพลงน้อยลงด้วยช่วงความถี่กว้าง แต่สำหรับเพลงที่มีช่วงความถี่แคบและช่วงไดนามิกกว้าง SBC 328k ในบางครั้งอาจชนะ
ให้เราพิจารณากรณีพิเศษ การบันทึกเสียงเปียโน นี่คือสเปกโตรแกรม:
พลังงานส่วนใหญ่อยู่ที่ความถี่ 0-4 kHz และนานถึง 10 kHz
สเปกโตรแกรมของไฟล์ aptX มีลักษณะดังนี้:
นี่คือ SBC 328k:
จะเห็นได้ว่า SBC 328k ตัดช่วงที่สูงกว่า 16 kHz ออกเป็นระยะ และใช้บิตเรตที่มีอยู่ทั้งหมดสำหรับช่วงที่ต่ำกว่าค่านี้ อย่างไรก็ตาม aptX ทำให้เกิดการบิดเบือนในสเปกตรัมความถี่ที่ได้ยินโดยหูของมนุษย์มากขึ้น ซึ่งสามารถเห็นได้ในสเปกโตรแกรมดั้งเดิมที่หักออกจาก aptX spectrogram (ยิ่งสว่างยิ่งผิดเพี้ยนมากขึ้น):
ในขณะที่ SBC 328k นำเสนอสัญญาณบิดเบือนน้อยลงในช่วงตั้งแต่ 0 ถึง 10 kHz และส่วนที่เหลือถูกตัด:
บิตเรต 485k สำหรับ SBC ก็เพียงพอที่จะบันทึกช่วงความถี่ทั้งหมด โดยไม่ต้องตัดย่านความถี่ออก
SBC 485k ในตัวอย่างเสียงนี้ดีกว่า aptX มากในช่วง 0-15 kHz และมีความแตกต่างที่เล็กกว่าแต่ยังคงสังเกตเห็นได้ชัดเจน – ที่ 15-22 kHz (เข้มกว่า ความเพี้ยนน้อยกว่า):
เมื่อเปลี่ยนไปใช้ SBC ที่มีอัตราบิตสูง คุณจะได้เสียงที่เหนือชั้นกว่า aptX เกือบตลอดเวลาบนหูฟังทุกประเภท
- original_and_aptx.zip
- sbc.zip
วิธีการปรับเปลี่ยน Bluetooth Stacks บน Android 5 – 7
การปรับเปลี่ยนเหล่านี้ควรใช้กับสต็อคบลูทู ธ Android Bluedroid (Android 5) และ Fluoride (Android 6-7) ไม่รองรับสแต็กที่แก้ไขโดย Qualcomm
แทนที่ Joint Stereo ด้วย Dual Channel ในการกำหนดค่า SBC มาตรฐาน
android/platform/external/bluetooth/bluedroid/btif/co/bta_av_co.c:99
รหัส:
const tA2D_SBC_CIE btif_av_sbc_default_config ={BTIF_AV_SBC_DEFAULT_SAMP_FREQ / * samp_freq * / A2D_SBC_IE_CH_MD_JOINT / * ch_mode * / A2D_SBC_IE_BLOCKS_16 / * block_len * / A2D_SBC_IE_SUBBAND_8 / * num_subbands * / A2D_SBC_IE_ALLOC_MD_L / * alloc_mthd * / BTA_AV_CO_SBC_MAX_BITPOOL / * max_bitpool * / A2D_SBC_IE_MIN_BITPOOL /* min_bitpool */};
แทนที่ A2D_SBC_IE_CH_MD_JOINT ด้วย A2D_SBC_IE_CH_MD_DUAL
เพิ่มลำดับความสำคัญของช่องสัญญาณคู่
android/platform/external/bluetooth/bluedroid/btif/co/bta_av_co.c:41
รหัส:
if (src_cap.ch_mode &A2D_SBC_IE_CH_MD_JOINT) pref_cap.ch_mode =A2D_SBC_IE_CH_MD_JOINT; อื่น if (src_cap.ch_mode &A2D_SBC_IE_CH_MD_STEREO) pref_cap.ch_mode =A2D_SBC_IE_CH_MD_STEREO; อื่น if (src_cap.ch_mode &A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode =A2D_SBC_IE_CH_MD_DUAL; อื่น if (src_cap.ch_mode &A2D_SBC_IE_CH_MD_MONO) pref_cap.ch_mode =A2D_SBC_IE_CH_MD_MONO เลื่อนด้วย A2D_SBC_IE_CH_MD_DUAL ขึ้นไปด้านบน
- ปิดหรือเพิ่มการจำกัดอัตราบิต
สแต็คบลูทู ธ Android ไม่เพียง แต่ขีด จำกัด บิตพูล แต่ยัง จำกัด บิตเรตด้วย 328 kbit / s หากหูฟังรองรับ เช่น bitpool 53 สำหรับ 48 kHz Android จะลด bitpool ลงเพื่อให้พอดีกับขีดจำกัด 328 kbit/s สิ่งนี้จะเกิดขึ้นหลังจากการเจรจาตัวแปลงสัญญาณ ในขั้นตอนการเข้ารหัส อย่าคำนึงถึงค่าบิตพูลในแพ็กเก็ต Bluetooth SetCapabilities
android/platform/external/bluetooth/bluedroid/btif/src/btif_media_task.c:172
รหัส:
#define DEFAULT_SBC_BITRATE 328
แทนที่ด้วย 512
- (สำหรับการทดสอบเท่านั้น) ปิดใช้งานขีดจำกัด MTU
จำเป็นสำหรับบิตเรตที่สูงกว่า ~580 kbit/s
btif/src/btif_media_task.c:174
รหัส:
/* ขนาดเพย์โหลด 2DH5 679 ไบต์ - (ส่วนหัว L2CAP 4 ไบต์ + ส่วนหัว AVDTP 12 ไบต์) */#define MAX_2MBPS_AVDTP_MTU 663
วิธีการปรับเปลี่ยน Bluetooth Stacks บน Android 8 – 9
การปรับเปลี่ยนเหล่านี้ยังไม่ได้รับการทดสอบ แต่น่าจะใช้ได้
เพิ่มการรองรับ Dual Channel ลงในแหล่ง A2DP SBC
/platform/system/bt/stack/a2dp/a2dp_sbc.cc:55
รหัส:
/ * ความสามารถ SBC SRC ตัวแปลงสัญญาณ * / คง const tA2DP_SBC_CIE a2dp_sbc_caps ={A2DP_SBC_IE_SAMP_FREQ_44 / * samp_freq * / (A2DP_SBC_IE_CH_MD_MONO | A2DP_SBC_IE_CH_MD_JOINT) / * ch_mode * / (A2DP_SBC_IE_BLOCKS_16 | A2DP_SBC_IE_BLOCKS_12 | A2DP_SBC_IE_BLOCKS_8 | A2DP_SBC_IE_BLOCKS_4) / * block_len * / A2DP_SBC_IE_SUBBAND_8 / * * * * * * * * num_subbands / A2DP_SBC_IE_ALLOC_MD_L / * * * * * * * * alloc_method / A2DP_SBC_IE_MIN_BITPOOL / * * * * * * * * min_bitpool / A2DP_SBC_MAX_BITPOOL / * * * * * * * * max_bitpool / BTAV_A2DP_CODEC_BITS_PER_SAMPLE_16 / * bits_per_sample * /};
เพิ่ม A2DP_SBC_IE_CH_MD_DUAL ใน ch_mode
แทนที่ Joint Stereo ด้วย Dual Channel ในการกำหนดค่าเริ่มต้น
/platform/system/bt/stack/a2dp/a2dp_sbc.cc:82
รหัส:
/ * เริ่มต้น SBC ตัวแปลงสัญญาณการกำหนดค่า * / const tA2DP_SBC_CIE a2dp_sbc_default_config ={A2DP_SBC_IE_SAMP_FREQ_44 / * samp_freq * / A2DP_SBC_IE_CH_MD_JOINT / * ch_mode * / A2DP_SBC_IE_BLOCKS_16 / * block_len * / A2DP_SBC_IE_SUBBAND_8 / * num_subbands * / A2DP_SBC_IE_ALLOC_MD_L / * alloc_method * / A2DP_SBC_IE_MIN_BITPOOL, /* min_bitpool */ A2DP_SBC_MAX_BITPOOL, /* max_bitpool */ BTAV_A2DP_CODEC_BITS_16PER_Spresample/}แทนที่ A2DP_SBC_IE_CH_MD_JOINT ด้วย A2DP_SBC_IE_CH_MD_DUAL
เพิ่มลำดับความสำคัญของช่องสัญญาณคู่
/platform/system/bt/stack/a2dp/a2dp_sbc.cc:1155
รหัส:
static bool selects_best_channel_mode (uint8_t ch_mode, ta2dp_sbc_cie * p_result, btav_a2dp_codec_config_t * p_codec_config) {if (ch_mode &a2dp_sbc_ie_ch_md_joint) {p_result-> ch_mode =a2dp_sbc_ie_ch_md_joint; p_codec_config->channel_mode =BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; คืนค่าจริง; } if (ch_mode &A2DP_SBC_IE_CH_MD_STEREO) { p_result->ch_mode =A2DP_SBC_IE_CH_MD_STEREO; p_codec_config->channel_mode =BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; คืนค่าจริง; } if (ch_mode &A2DP_SBC_IE_CH_MD_DUAL) { p_result->ch_mode =A2DP_SBC_IE_CH_MD_DUAL; p_codec_config->channel_mode =BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; คืนค่าจริง; } if (ch_mode &A2DP_SBC_IE_CH_MD_MONO) { p_result->ch_mode =A2DP_SBC_IE_CH_MD_MONO; p_codec_config->channel_mode =BTAV_A2DP_CODEC_CHANNEL_MODE_MONO; คืนค่าจริง; } คืนค่าเท็จ}ย้ายถ้า A2DP_SBC_IE_CH_MD_DUAL ขึ้นไปด้านบน
เพิ่มขีดจำกัดบิตเรต
/platform/system/bt/stack/a2dp/a2dp_sbc_encoder.cc:42
รหัส:
#define A2DP_SBC_DEFAULT_BITRATE 328แทนที่ด้วย 512
- (สำหรับการทดสอบเท่านั้น) ปิดใช้งานขีดจำกัด MTU
จำเป็นสำหรับบิตเรตที่สูงกว่า ~580 kbit/s
/platform/system/bt/stack/a2dp/a2dp_sbc_encoder.cc:47
รหัส:
#define MAX_2MBPS_AVDTP_MTU 663