วิธีแก้ไข Bluetooth Stacks บน Android เพื่อเพิ่มคุณภาพเสียง Bluetooth อย่างมาก

คำเตือน: นี่เป็นคำแนะนำขั้นสูงที่เกี่ยวข้องกับการแก้ไขสแต็ค Bluetooth ของคุณบน Android - อ่านคู่มือนี้อย่างครบถ้วนและปฏิบัติตามคำแนะนำทั้งหมดตามที่กำหนด

แม้จะมีชุดหูฟังบลูทู ธ และเสียงบลูทู ธ เป็นที่นิยม แต่ก็เป็นปัญหาเล็กน้อยสำหรับออดิโอไฟล์เนื่องจากได้รับการพิสูจน์แล้วว่าลดคุณภาพเสียงเนื่องจากบิตของข้อมูลเสียงและความถี่หายไปในอากาศผ่านการสตรีมบลูทู ธ

นี่คือเหตุผลที่ผู้ผลิตบางรายกำลังใส่ตัวแปลงสัญญาณ aptX และ LDAC เพื่อปรับปรุงคุณภาพเสียงเหนือตัวแปลงสัญญาณบลูทู ธ SBC มาตรฐานซึ่งรองรับโดยหูฟังทั้งหมดและอุปกรณ์บลูทู ธ ส่วนใหญ่ - อย่างไรก็ตามอุปกรณ์ที่มีตัวแปลงสัญญาณ aptX และ LDAC มีราคาแพงกว่ามาก ต้องมีค่าธรรมเนียมใบอนุญาตซึ่งผู้บริโภคจ่ายในระยะยาว

คุณภาพเสียงต่ำของตัวแปลงสัญญาณบลูทู ธ SBC เกิดจากข้อ จำกัด เทียมของการตั้งค่าบลูทู ธ และชุดหูฟังปัจจุบันทั้งหมดข้อ จำกัด นี้สามารถหลีกเลี่ยงได้ในอุปกรณ์ที่มีอยู่

หากคุณสนใจเครื่องเสียงบลูทู ธ เราจะแสดงให้คุณดูในตอนท้ายของคู่มือนี้วิธีการถ่ายโอนข้อมูลบันทึกเสียงของบลูทู ธ และตรวจสอบเพื่อดูคุณภาพเสียงและความถี่ที่คุณได้รับจากอุปกรณ์รับสัญญาณบลูทู ธ ของ Android

คู่มือนี้ส่วนใหญ่จะมุ่งเน้นไปที่การปรับแต่งและวิธีการอ่านเอาต์พุตเสียงบลูทู ธ ของคุณอย่างง่าย ๆ เพื่อเพิ่มคุณภาพผลผลิตของตัวแปลงสัญญาณบลูทู ธ SBC มาตรฐาน - โปรดอ่านคู่มือนี้อย่างละเอียดเพื่อการศึกษาและมีสิ่งต่าง ๆ มากมาย เพื่อแฟลชหรือปรับแต่งขึ้นอยู่กับรุ่นอุปกรณ์ของคุณ

ในตอนท้ายของคู่มือนี้เป็นรายการของสแต็คบลูทู ธ ที่ได้รับการติดตั้งไว้ล่วงหน้าสำหรับอุปกรณ์ Android ที่ได้รับความนิยมมากมาย - สิ่งเหล่านี้สามารถกระพริบในการกู้คืนได้เช่นเดียวกับที่คุณสามารถใช้งานได้อีกด้วย. zip - หากไม่มีอุปกรณ์ใด ๆ เพื่อทำตามคำแนะนำสำหรับการแก้ไขสแต็ค Bluetooth บน Android

ข้อมูลทางเทคนิคสั้น ๆ เกี่ยวกับ SBC codec

SBC มีพารามิเตอร์ที่แตกต่างกันมากมายซึ่งถูกเจรจาในระหว่างขั้นตอนการตั้งค่าการเชื่อมต่อ:

  • ประเภทและหมายเลขช่องสัญญาณเสียง: สเตอริโอร่วม, สเตอริโอ, Dual Channel, Mono;
  • จำนวนย่านความถี่: 4 หรือ 8;
  • จำนวนบล็อกเสียงในหนึ่งแพ็คเก็ต: 4, 8, 12, 16;
  • ขั้นตอนวิธีการจัดสรรบิตเชิงปริมาณ: ความดัง SNR;
  • พูลบิตสูงสุดและต่ำสุดที่ใช้ในกระบวนการ quantization: ปกติ 2-53

จำเป็นต้องใช้ตัวถอดรหัสเพื่อสนับสนุนการรวมกันของพารามิเตอร์เหล่านี้ โปรแกรมเข้ารหัสอาจใช้งานเพียงส่วนหนึ่งเท่านั้น

สแต็ค Bluetooth ที่มีอยู่แล้วมักจะเจรจารายละเอียดต่อไปนี้: Joint Stereo, 8 แบนด์, 16 บล็อค, เสียงดัง, bitpool 2..53 โปรไฟล์นี้เข้ารหัสเสียง 44.1 kHz ด้วยอัตราบิต 328 kbps

พารามิเตอร์ Bitpool ส่งผลโดยตรงต่อบิตเรตภายในโปรไฟล์เดียวกัน: ยิ่งมีมากก็ยิ่งดีเรตมากขึ้นเท่านั้นและคุณภาพ

อย่างไรก็ตามพารามิเตอร์ bitpool ไม่ได้ถูกผูกไว้กับโปรไฟล์ที่เฉพาะเจาะจง อัตราบิตยังได้รับผลกระทบอย่างมีนัยสำคัญจากพารามิเตอร์อื่น ๆ เช่นชนิดของช่องสัญญาณเสียงจำนวนคลื่นความถี่จำนวนบล็อกเสียง คุณสามารถเพิ่มบิตเรททางอ้อมโดยการเจรจาโปรไฟล์ที่ไม่ได้มาตรฐานโดยไม่ต้องเปลี่ยนบิตพูล

ตัวอย่างเช่น Dual Channel เข้ารหัสช่องแยกต่างหากโดยใช้ bitpool ทั้งหมดสำหรับแต่ละช่อง การบังคับให้อุปกรณ์ใช้ Dual Channel แทน Joint Stereo จะทำให้บิตเรตเกือบสองเท่าที่บิตพูลสูงสุดเท่ากับ 617 kbps

สำหรับฉันมันรู้สึกว่า bitpool ควรเป็นตัวแปรภายใน มันเป็นความผิดพลาดในการออกแบบสเปค A2DP ที่ค่าบิตพูลไม่ได้ผูกไว้กับพารามิเตอร์ตัวแปลงสัญญาณอื่น ๆ และกำหนดเป็นค่าโกลบอลเท่านั้น

ค่า Bitpool และ Bitrate คงที่เหล่านี้มาจากค่าที่แนะนำสำหรับเสียงที่มีคุณภาพสูง แต่ข้อเสนอแนะไม่ใช่ข้อแก้ตัวในการ จำกัด โปรไฟล์ให้มีค่าเหล่านี้

ข้อกำหนด A2DP v1.2 ซึ่งเปิดใช้งานตั้งแต่ปี 2550 ถึง 2558 ต้องใช้ตัวถอดรหัสทั้งหมดเพื่อให้ทำงานได้อย่างถูกต้องโดยมีบิตเรตสูงถึง 512 kbps:

ตัวถอดรหัสของ SNK จะสนับสนุนค่าบิตพูลที่เป็นไปได้ทั้งหมดซึ่งไม่ส่งผลให้เกิดอัตราบิตเกินสูงสุด โปรไฟล์นี้ จำกัด อัตราบิตสูงสุดที่สามารถใช้ได้ที่ 320kb / s สำหรับขาวดำและ 512kb / s สำหรับโหมดสองแชนเนล

ในข้อกำหนดเวอร์ชั่นใหม่ไม่มีข้อ จำกัด บิตเรต สันนิษฐานว่าหูฟังสมัยใหม่ที่วางจำหน่ายหลังปี 2558 สามารถรองรับบิตเรต สูงถึง 1, 000 kbps

ด้วยเหตุผลบางอย่างสแต็คบลูทู ธ ที่ทดสอบในปัจจุบันทั้งหมด (Linux (PulseAudio), Android, Blackberry และ macOS) มีข้อ จำกัด ในการประดิษฐ์ของพารามิเตอร์ bitpool สูงสุดซึ่งส่งผลโดยตรงต่อบิตเรตสูงสุด แต่นี่ไม่ใช่ปัญหาที่ใหญ่ที่สุดหูฟังเกือบทั้งหมดยัง จำกัด ค่า bitpool สูงสุดไว้ที่ 53

อุปกรณ์ส่วนใหญ่ทำงานได้ดีบนสแต็กลูทู ธ ที่ดัดแปลงด้วยบิตเรต 507 kbps โดยไม่มีการขัดจังหวะและการแคร็ก แต่บิตเรตดังกล่าวจะไม่ถูกเจรจาภายใต้สภาวะปกติกับสต็อกบลูทู ธ สต็อก

*** จำเป็นสำหรับการทดสอบโดยใช้คำแนะนำด้านล่าง: bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso.torrent

วิธีทดสอบบนพีซี

การทดสอบความเข้ากันได้ของหูฟัง SBC บิตเรตสูงเป็นวิธีที่ง่ายที่สุดในการใช้พีซีที่มีอแด็ปเตอร์ Bluetooth ฉันได้เตรียมรูปภาพ Ubuntu ด้วยสแต็กลูทู ธ ที่มีการดัดแปลงซึ่งสามารถทำงานได้เหมือนในเครื่องเสมือน (โดยการเชื่อมต่ออะแดปเตอร์บลูทู ธ เป็นอุปกรณ์ USB ภายในเครื่องเสมือนมันยังทำงานร่วมกับอะแดปเตอร์ในแล็ปท็อป) หรือบูต แฟลชไดรฟ์ USB ภาพนี้ใช้โปรไฟล์ต่อไปนี้: Dual Channel, 8 band, 16 blocks, Loudness, bitpool 2..41, 44.1 kHz, ซึ่งให้อัตราบิต 485 kbps

ทำงานใน VM

  • ดาวน์โหลด Virtualbox และ Virtualbox Extension Pack: //www.virtualbox.org/wiki/Downloads;
  • ติดตั้ง Virtualbox เริ่มเลย
  • ติดตั้งชุดส่วนขยายโดยใช้ไฟล์→ค่ากำหนด→ส่วนขยาย;
  • สร้างเครื่องเสมือนใหม่: Linux, Ubuntu (64 บิต), 1024 RAM อย่าสร้าง HDD
  • นำทางไปยังการตั้งค่าเครื่องเสมือนใน Storage เลือกคอนโทรลเลอร์: IDE, ว่างเปล่ากดไอคอน CD →เลือกไฟล์ดิสก์ออปติคัลเสมือน
  • เลือกดาวน์โหลด bluetooth-dualchannel-test-ubuntu-18.04.1-desktop-amd64.iso;
  • บันทึกและปิดหน้าต่างการตั้งค่าเริ่มต้นเครื่องเสมือน
  • คลิกขวาที่ไอคอนสายเคเบิล USB ที่ด้านล่างขวาเลือกอะแดปเตอร์บลูทู ธ ของคุณ

ทำงานบนพีซี

ภาพรองรับการบูท BIOS / CSM และ UEFI

  • เบิร์นรูปภาพเป็นแฟลชไดรฟ์ USB ด้วย Etcher: //etcher.io/ การดำเนินการนี้จะลบไฟล์ที่มีอยู่ทั้งหมดในไดรฟ์ USB
  • ปิดพีซี
  • ใส่แฟลชไดรฟ์ USB เปิดเครื่องพีซีแล้วกดปุ่มเพื่อบูต (โดยปกติคือ Esc หรือ F12)
  • เลือก USB แฟลชไดรฟ์ของคุณ

ทำการทดสอบ

  • (เป็นทางเลือก แต่แนะนำ) ดับเบิลคลิกที่สคริปต์“ Btsnoop Dump” บนเดสก์ท็อป มันจะเริ่มการจับข้อมูลบลูทู ธ สำหรับการวิเคราะห์ในภายหลัง อย่าปิดหน้าต่างเทอร์มินัล
  • สลับหูฟังไปที่โหมดจับคู่
  • คลิกที่ลูกศรที่มุมบนขวาเลือกไอคอนบลูทู ธ →การตั้งค่าบลูทู ธ ;
  • เลือกหูฟังของคุณรอจนกระทั่งการจับคู่เสร็จสมบูรณ์แล้วปิดหน้าต่าง
  • ตั้งค่าระดับเสียงของ Ubuntu เป็นประมาณ 2/3 ลดระดับเสียงโดยใช้ปุ่มชุดหูฟังเนื่องจากอาจดังมากหลังจากจับคู่
  • เปิดโฟลเดอร์“ เพลง” เล่น“ testrecord1.flac”;
  • (เป็นทางเลือก แต่แนะนำ) ปิดโปรแกรมเล่นปิดหน้าต่างเทอร์มินัล วิธีนี้จะหยุดการบันทึกข้อมูล
  • (เป็นทางเลือก แต่แนะนำ) เปิดเบราว์เซอร์ Firefox อัปโหลดดัมพ์ข้อมูล (btsnoop_hci.btsnoop บนเดสก์ท็อป) ไปที่ //btcodecs.valdikss.org.ru/

คุณสามารถฟังเพลงอื่น ๆ ในโฟลเดอร์เพลงหรืออัปโหลดของคุณเอง

ไม่ควรมีการแคร็กการหยุดชะงักของเสียงหรือการบิดเบือนเสียงอื่น ๆ ในหูฟัง หากคุณได้ยินเสียงคุณภาพสูงนั่นหมายความว่าหูฟังของคุณรองรับเสียงด้วยอัตราบิตที่ 485 kbps

วิธีทดสอบบนอุปกรณ์ Android

ในการทดสอบจากสมาร์ทโฟน Android หรือแท็บเล็ตคุณต้องใช้สแต็คบลูทู ธ ที่ดัดแปลงซึ่งจำเป็นต้องมีสิทธิ์รูท

วิธีจับการถ่ายโอนข้อมูลบลูทู ธ บน Android

  1. ปิดบลูทู ธ
  2. ในการตั้งค่านักพัฒนาเปิดใช้งานสวิตช์ "เปิดใช้งานการบันทึก Snoop บลูทู ธ HCI"
  3. เปิดบลูทู ธ เชื่อมต่อกับชุดหูฟังของคุณโดยใช้เมนูบลูทู ธ (นี่เป็นสิ่งสำคัญ! ไม่อนุญาตการเชื่อมต่ออัตโนมัติ!);
  4. เล่นตัวอย่างเสียงสั้น ๆ
  5. เปิดการตั้งค่าผู้พัฒนาปิดการใช้งานสวิตช์ "เปิดใช้งานการบันทึก Snoop บลูทู ธ HCI"
  6. ควรมี /storage/emulated/0/btsnoop_hci.log หรือ /data/misc/bluetooth/logs/btsnoop_hci.log สร้างขึ้น หากไม่มีให้เปิด /etc/bluetooth/bt_stack.conf ด้วยโปรแกรมแก้ไขข้อความและดูเส้นทางในตัวเลือก BtSnoopFileName

ไม่ควรมีการแคร็กการหยุดชะงักของเสียงหรือการบิดเบือนเสียงอื่น ๆ ในหูฟัง หากคุณได้ยินเสียงคุณภาพสูงที่ดีกับห้องสมุดที่ได้รับการติดตั้งนั่นหมายความว่าหูฟังของคุณรองรับเสียงด้วยอัตราบิตที่ 512 kbps

โปรดทำตามขั้นตอนวิธีด้านบนอย่างระมัดระวัง โดยเฉพาะอย่างยิ่งหากคุณปิดหูฟังหรือตัดการเชื่อมต่อหลังจากจับคู่สิ่งสำคัญคือการเชื่อมต่อหูฟังด้วยตนเองจากการตั้งค่าบลูทู ธ ไม่อนุญาตการเชื่อมต่ออัตโนมัติ!

อุปกรณ์ที่รองรับ SBC อย่างน้อย 512 kbit / s

  • 1 เพิ่มเติม iBFree
  • JBL Everest 310
  • JBL Everest 700
  • Skullcandy HESH 3
  • Sony WI-C400
  • Sony MDR-1ABT
  • Sony MDR-ZX770BT
  • Sony MDR-XB650BT
  • Sony MDR-XB950B1
  • Sony SBH50
  • Bluedio T4s (Bitpool สูงสุด 39 ตอบสนองต่อการไม่รองรับ Dual Channel แต่ทำงานได้หากถูกบังคับ 462 kbit / s ไม่เป็นไปตามข้อกำหนด A2DP)
  • Bluedio T5 (ตอบกลับไม่รองรับ Dual Channel แต่ทำงานได้หากถูกบังคับไม่เป็นไปตามข้อกำหนด A2DP)
  • Bluedio T6 (ตอบสนองต่อการไม่รองรับ Dual Channel แต่ทำงานถ้าถูกบังคับไม่เป็นไปตามข้อกำหนด A2DP นำมาใช้ชิปสูงสุด 97220)
  • บลูทู ธ มาร์แชลล์เมเจอร์ II
  • Overdrive RealForce D1
  • Edifier W830BT
  • DEXP BT-250
  • อะแดปเตอร์ BT ของ Logitech
  • หัวหน้าหน่วยยานยนต์ 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 (617-660 kbit / s)
  • Overdrive RealForce D1 (730 kbit / s, dual channel, 4 subbands)

อุปกรณ์ที่ไม่สามารถทำงานกับบิตเรตที่สูงขึ้นหรือ Dual Channel

  1. ฮาร์เปอร์ HB-202 (แคร็กเกอร์; Beken BK3256 ชิป)
  2. 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 นั้นชนะ

ให้เราพิจารณากรณีพิเศษการบันทึกเปียโน นี่คือ spectrogram:

พลังงานส่วนใหญ่อยู่ในความถี่ 0-4 kHz และนานถึง 10 kHz

spectrogram ของไฟล์ aptX ไฟล์มีลักษณะดังนี้:

นี่คือ SBC 328k:

จะเห็นได้ว่า SBC 328k เป็นระยะตัดช่วงเหนือ 16 kHz อย่างสมบูรณ์และใช้บิตเรตที่มีอยู่ทั้งหมดสำหรับช่วงต่ำกว่าค่านี้ อย่างไรก็ตาม aptX แนะนำการบิดเบือนเพิ่มเติมให้กับคลื่นความถี่เสียงที่ได้ยินโดยหูของมนุษย์ซึ่งสามารถเห็นได้ในสเปคตรัมแบบดั้งเดิมที่หักออกจากสเปคตรัม aptX (ความสว่างการบิดเบือนที่มากขึ้น):

ในขณะที่ 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) และฟลูออไรด์ (Android 6-7) ไม่รองรับสแต็กที่ดัดแปลงด้วย Qualcomm

แทนที่ Joint Stereo เป็น Dual Channel ในการกำหนดค่า SBC มาตรฐาน

Android / แพลตฟอร์ม / ภายนอก / Bluetooth / bluedroid / btif / ร่วม / 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

เพิ่มความสำคัญของ Dual Channel

Android / แพลตฟอร์ม / ภายนอก / Bluetooth / bluedroid / btif / ร่วม / bta_av_co.c: 4

รหัส:

 ถ้า (src_cap.ch_mode & A2D_SBC_IE_CH_MD_JOINT) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_JOINT ถ้า อื่นถ้า (src_cap.ch_mode & A2D_SBC_IE_CH_MD_STEREO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_STEREO; อื่นถ้า (src_cap.ch_mode & A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_DUAL; อื่นถ้า (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 ขึ้นไปด้านบน 
  1. ปิดใช้งานหรือเพิ่มข้อ จำกัด บิตเรต

บลูทู ธ Android สแต็คไม่เพียง แต่ จำกัด บิตพูล แต่ยัง จำกัด บิตเรต 328 kbit / s ถ้าหูฟังรองรับเช่น bitpool 53 เป็น 48 kHz, Android จะลด bitpool ลงให้พอดีกับ 328 kbit / s สิ่งนี้จะเกิดขึ้นหลังจากการเจรจา codec ในขั้นตอนการเข้ารหัสไม่ได้คำนึงถึงค่า bitpool ในแพ็คเก็ต Bluetooth SetCapabilities

Android / แพลตฟอร์ม / ภายนอก / Bluetooth / bluedroid / btif / src / btif_media_task.c: 172

รหัส:

 #define DEFAULT_SBC_BITRATE 328 

แทนที่ด้วย 512

  1. (สำหรับการทดลองเท่านั้น) ปิดการใช้งานขีด จำกัด MTU

จำเป็นสำหรับบิตเรตที่สูงกว่า ~ 580 kbit / s

btif / src / btif_media_task.c: 174

รหัส:

 / * 2DH5 ขนาดของข้อมูลบรรจุ 679 ไบต์ - (4 ไบต์ L2CAP Header ส่วนหัว AVDTP 12 ไบต์) * / #define MAX_2MBPS_AVDTP_MTU 663 

วิธีแก้ไขสแต็คบลูทู ธ บน Android 8 - 9

การดัดแปลงเหล่านี้ยังไม่ได้ทดสอบ แต่ควรใช้งานได้

เพิ่มการรองรับ Dual Channel ใน A2DP SBC Source

/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_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_PER_SAMPLE_16 / * bits_per_sample * /}; 

แทนที่ A2DP_SBC_IE_CH_MD_JOINT ด้วย A2DP_SBC_IE_CH_MD_DUAL

เพิ่มความสำคัญของ Dual Channel

/platform/system/bt/stack/a2dp/a2dp_sbc.cc:1155

รหัส:

 เลือกบูลสแตติกแบบคงที่ p_codec_config-> channel_mode = BTAV_A2DP_CODEC_CHANNEL_MODE_STEREO; กลับจริง } ถ้า (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; กลับจริง } ถ้า (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; กลับจริง } ถ้า (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

  1. (สำหรับการทดลองเท่านั้น) ปิดการใช้งานขีด จำกัด MTU

จำเป็นสำหรับบิตเรตที่สูงกว่า ~ 580 kbit / s

/platform/system/bt/stack/a2dp/a2dp_sbc_encoder.cc:47

รหัส:

 #define MAX_2MBPS_AVDTP_MTU 663 

สแต็คบลูทู ธ แบบ Patch

  • Le Max 2 Oreo Patched.zip
  • LeEco Cool Changer S1 EUI_5.8.19S.zip
  • Leeco LE2 (EUI 5.9.26s, Android 6) .zip
  • Xiaomi Mi Note (Miui 9 Miui.su usnkreal v8.4.12, Android 6.0.1) .zip
  • Xiaomi mi note 3 (MIUI 9, Android 7) .zip
  • Xiaomi Mi4c (Android 7.0 NRD90M, MIUI-9.5 9.5.1.0 (NXKCNFA)) zip
  • Xiaomi MI5s (MIUI Global 9.6.1.0, Android 7) .zip
  • Xiaomi Redmi 3s (android 6.01, mmb29m, miui global 9.6.1.0) .zip
  • Xiaomi Redmi 4 (MiuiPro 10 8.8.2, Android 6.0.1, MMB29M) .zip
  • Xiaomi Redmi 4 Prime.zip
  • Xiaomi Redmi 4 pro (MIUI 9, miuipro 8.4.26) .zip
  • Xiaomi Redmi Note 3 (ฟื้นคืนชีพ Remix Android 7.1.2_r36) .zip
  • Redmi Note 4x (Masik Premium, android 7.0) .zip
  • Asus Zoom (Android 5, 2.26.40.108_20160520) .zip
  • Le Max 2 Oreo Patched.zip
  • Huawei P9 (Android 7) .zip
  • Samsung Galaxy S4 LTE GT-I9505 (Android 7.1.2; LineageOS 14.1-20180615-NIGHTLY-jfltexx) .zip
  • ซิป
  • Le Max 2 Oreo Patched.zip

บทความที่น่าสนใจ