1. iLBC คือรูปแบบเสียงอะไร?
The Internet Low Bitrate Codec ถูกสร้างขึ้นโดย Global IP Solutions (GIPS)—บริษัทวิศวกรรมเสียงสวีเดนที่ Google เข้าซื้อในปี 2010. กำหนดโดย Internet Engineering Task Force ภายใต้ RFC 3951 พร้อมการห่อหุ้ม RTP payload ที่อธิบายใน RFC 3952, iLBC ถูกออกแบบมาโดยเฉพาะสำหรับการส่งเสียงพูดที่ทนทานผ่านลิงก์ IP ที่ไม่เสถียร.
แม้ว่าเว็บเบราว์เซอร์สมัยใหม่จะมักใช้โคเดค Opus สำหรับการสื่อสารแบบเรียลไทม์สมัยใหม่, iLBC ยังคงเป็นมาตรฐานสำคัญที่ไม่มีค่าใช้สิทธิ์ซึ่งฝังอยู่ในสแตกโทรศัพท์องค์กร, ไคลเอนต์ SIP, โปรไฟล์ความเข้ากันได้ย้อนหลังของ WebRTC, และอุปกรณ์ VoIP รุ่นเก่าที่ผลิตโดย Cisco, Polycom, และระบบ Asterisk PBX.
2. คุณลักษณะสำคัญของ iLBC
| พารามิเตอร์ | ข้อกำหนด |
|---|---|
| การมาตรฐาน | IETF RFC 3951 (โคเดค), RFC 3952 (ข้อมูล RTP) |
| ส่วนขยายไฟล์ทั่วไป | .ilbc, .lbc |
| ประเภทสื่อ MIME | audio/iLBC |
| อัตราการสุ่มตัวอย่าง | $8\text{ kHz}$ (แบนแคบ) |
| ความละเอียดการควอนติฟาย | PCM เชิงเส้น 16 บิต |
| ช่องสัญญาณเสียง | โมโน (การพูดแบบช่องเดียว) |
| ความยาวเฟรมที่รองรับ | $20\text{ ms}$ โหมดและ $30\text{ ms}$ โหมด |
| อัตราบิตการทำงาน | $15.20\text{ kbit/s}$ ($20\text{ ms}$) / $13.33\text{ kbit/s}$ ($30\text{ ms}$) |
| บิตข้อมูลต่อบล็อก | $304\text{ bits}$ ($20\text{ ms}$) / $400\text{ bits}$ ($30\text{ ms}$) |
| ตัวระบุส่วนหัวแบบ Magic | #!iLBC20\n ($20\text{ ms}$) or #!iLBC30\n ($30\text{ ms}$) |
| การให้สิทธิ์ | ไม่มีค่าลิขสิทธิ์ (โอเพ่นซอร์สแบบ BSD 3 ข้อผ่าน WebRTC) |
3. คุณลักษณะเชิงลึกและการออกแบบสถาปัตยกรรม
การเข้ารหัสเฟรมแบบอิสระ (การแพร่กระจายข้อผิดพลาดเป็นศูนย์)
รูปแบบการบีบอัดเสียงแบบดั้งเดิมเช่น G.729 และโคเดกครอบครัว CELP ใช้ การพยากรณ์ระหว่างเฟรม ซึ่งแต่ละเฟรมเสียงจะพึ่งพาข้อมูลสถานะและเวกเตอร์ตัวทำนายพิตช์จากเฟรมก่อนหน้า หากแพ็กเก็ตสูญหายบนเครือข่ายที่แออัด สถานะที่หายไปจะถูกส่งต่อไปข้างหน้า ทำให้เสียงที่ตามมาถูกบิดเบือนเป็นเวลาหลายร้อยมิลลิวินาที
iLBC ขจัดการพึ่งพานี้ออก แต่ละเฟรมเสียงใน iLBC จะถูกเข้ารหัสอย่างอิสระ หากแพ็กเก็ต $N$ สูญหายระหว่างการส่ง แพ็กเก็ต $N+1$ จะถอดรหัสด้วยความแม่นยำทางเสียงเต็มรูปแบบ
โหมดการทำงานคู่ ($20\text{ ms}$ vs. $30\text{ ms}$)
เพื่อให้วิศวกรโทรคมนาคมสามารถจัดการความหน่วงได้อย่างยืดหยุ่น iLBC กำหนดโหมดการทำงานสองโหมดที่จำเป็น:
- $20\text{ ms}$ โหมดเฟรม ($15.20\text{ kbit/s}$):
- เข้ารหัสตัวอย่างเสียง 160 ตัวต่อเฟรมเป็น 38 ไบต์ ($304\text{ bits}$).
- ให้ความหน่วงของบัฟเฟอร์เชิงอัลกอริทึมที่ต่ำลง ทำให้เหมาะสมกับการสื่อสารแบบโต้ตอบ.
- $30\text{ ms}$ โหมดเฟรม ($13.33\text{ kbit/s}$):
- เข้ารหัสตัวอย่างเสียง 240 ตัวต่อเฟรมเป็น 50 ไบต์ ($400\text{ bits}$).
- ลดการใช้บิตลงประมาณ $12%$, เพื่อเพิ่มประสิทธิภาพการส่งข้อมูลบนเครือข่ายในเชื่อมต่อระยะไกล.
การปกปิดการสูญเสียแพ็กเก็ตขั้นสูง (PLC)
เมื่อเกิดแพ็กเก็ตสูญหาย iLBC ใช้ตัวกรองสังเคราะห์ LPC (Linear Predictive Coding) แบบตัวแปรสถานะเพื่อสร้างตัวแทนรอบพิจน์ที่หายไปโดยใช้สถานะขอบเขตจากเฟรมใกล้เคียง แทนการสร้างคลิก, เสียงดิจิทัลป๊อป, หรือการปิดเสียงอย่างรุนแรง แพ็กเก็ตเสียงที่สูญหายจะเสื่อมสภาพอย่างนุ่มนวล.
คุณภาพเสียง vs. โปรไฟล์บิตเรต
ภายใต้สภาพเครือข่ายที่อุดมคติ (การสูญเสียแพ็กเก็ต 0%) iLBC สามารถทำคะแนน Mean Opinion Score (MOS) ได้ประมาณ 4.14 (จาก 5.0) แม้ว่าจะต่ำกว่า G.711 PCM ที่ไม่มีการบีบอัด ($\mu$-law ที่ $\sim 4.3$) เล็กน้อย แต่ iLBC ยังคงความชัดเจนของเสียงได้แม้ที่อัตราการสูญเสียแพ็กเก็ตสูงถึง $5%\text{ to }10%$ ซึ่งในกรณีนั้นความเข้าใจของ G.729 หรือ G.711 ลดลงอย่างมาก
4. วิธีเปิดและเล่นไฟล์เสียง .ilbc
เนื่องจาก .ilbc เป็นรูปแบบสตรีมโทรศัพท์ดิบที่เฉพาะเจาะจง ไม่ใช่คอนเทนเนอร์สื่อสำหรับผู้บริโภคทั่วไป (เช่น MP3 หรือ WAV) ผู้เล่นสื่อหลักสำหรับผู้บริโภคจึงไม่สามารถตรวจจับได้เสมอไปหากไม่มีชุดโค้ดแค็กที่เฉพาะเจาะจง
วิธีที่ 1: ใช้ Audacity (นำเข้าข้อมูลดิบ)
Audacity สามารถนำเข้าไฟล์ดัมพ์ PCM ดิบหรือไฟล์เสียง iLBC ที่ถอดรหัสแล้วได้:
- เปิด Audacity.
- ไปที่ File > Import > Raw Data…
- เลือกไฟล์และตั้งค่าการเข้ารหัสเป็น Signed 16-bit PCM, ลำดับไบต์เป็น Little-endian, 1 Channel (Mono), และอัตราการสุ่มตัวอย่างเป็น 8000 Hz.
วิธีที่ 2: เล่นผ่านบรรทัดคำสั่งโดยใช้ FFplay
หากการสร้าง FFmpeg ของคุณคอมไพล์ด้วยส่วนขยาย libilbc:
ffplay -f ilbc sample.ilbc
วิธีที่ 3: ตัววิเคราะห์ VoIP เฉพาะ
เครื่องมือวินิจฉัยเครือข่ายเช่น Wireshark สามารถดึงและสร้างใหม่ payload เสียง .ilbc โดยตรงจากเซสชันแพ็กเก็ต SIP/RTP ที่บันทึกไว้และเล่นผ่านยูทิลิตี้ RTP Player ในตัว
5. วิธีสร้างและแปลงไฟล์เสียง .ilbc
การทำงานกับเสียง .ilbc ต้องการอินพุตเสียง 16-bit, ช่องเดียว, $8000\text{ Hz}$
การเข้ารหัสเป็น iLBC ด้วย FFmpeg
เพื่อแปลงตัวอย่างเสียง .wav หรือ .mp3 ที่มีอยู่เป็นบิตสตรีม .ilbc:
ffmpeg -i input_speech.wav \
-ar 8000 \
-ac 1 \
-c:a libilbc \
output_audio.ilbc
-ar 8000: ทำการรีแซมเปิลเสียงเป็นอัตราที่ต้องการ 8 kHz.-ac 1: ลดการผสมหลายช่องเป็นโมโน.-c:a libilbc: ใช้ตัวเข้ารหัสอ้างอิงlibilbc.
ระบุโหมดเฟรม ($20\text{ ms}$ หรือ $30\text{ ms}$)
คุณสามารถเลือกโหมดเฟรมโดยใช้แฟล็ก -mode:
# Encode using 30ms mode (13.33 kbit/s)
ffmpeg -i input_speech.wav -ar 8000 -ac 1 -c:a libilbc -mode 30 output_30ms.ilbc
# Encode using 20ms mode (15.20 kbit/s)
ffmpeg -i input_speech.wav -ar 8000 -ac 1 -c:a libilbc -mode 20 output_20ms.ilbc
ถอดรหัสไฟล์ .ilbc กลับเป็น WAV มาตรฐาน
เพื่อแปลงไฟล์ .ilbc เป็นไฟล์ WAV ที่ไม่ได้บีบอัดและสามารถเล่นได้ทุกที่:
ffmpeg -f ilbc -i voice_message.ilbc converted_audio.wav
6. คำถามที่พบบ่อย (FAQ)
Q1: ปัญหาหลักที่รูปแบบเสียง iLBC ถูกสร้างขึ้นเพื่อแก้คืออะไร?
รูปแบบ iLBC ถูกออกแบบมาเพื่อรักษาความเข้าใจของเสียงพูดผ่านเครือข่าย IP โดยทำให้แต่ละเฟรมเสียงเป็นอิสระกัน ป้องกันไม่ให้ข้อผิดพลาดจากการสูญเสียแพ็กเก็ตกระจายไปยังเฟรมเสียงต่อ ๆ ไป.
Q2: อัตราบิตการทำงานสองระดับของไฟล์ .ilbc คืออะไร?
สตรีม .ilbc ทำงานที่อัตรา $13.33\text{ kbit/s}$ เมื่อใช้เฟรม $30\text{ ms}$ หรือ $15.20\text{ kbit/s}$ เมื่อกำหนดเป็นเฟรม $20\text{ ms}$
Q3: รูปแบบ iLBC สามารถใช้สำหรับสตรีมเพลงคุณภาพสูงได้หรือไม่?
ไม่, iLBC เป็นโคเดกเสียงแคบที่จำกัดอัตราการสุ่มตัวอย่างที่ $8\text{ kHz}$ อย่างเคร่งครัด, ปรับให้เหมาะสมเฉพาะสำหรับเสียงมนุษย์ระหว่าง $90\text{ Hz}$ ถึง $4000\text{ Hz}$
Q4: ตัวแปลงสัญญาณเสียง iLBC ปราศจากค่าลิขสิทธิ์หรือไม่?
ใช่, iLBC ได้รับการมาตรฐานเต็มรูปแบบภายใต้ IETF RFC 3951 และเผยแพร่ภายใต้ใบอนุญาต BSD แบบ 3 ข้อที่เป็นโอเพนซอร์สและไม่มีค่าลิขสิทธิ์ผ่านโครงการ WebRTC
Q5: iLBC เปรียบเทียบกับตัวแปลงสัญญาณ Opus สมัยใหม่อย่างไร?
ในขณะที่ iLBC ให้การปกปิดการสูญเสียแพ็กเก็ตสำหรับ VoIP แบนด์แคบในเครือข่ายบรอดแบนด์ช่วงแรก, โคเดก Opus สมัยใหม่สนับสนุนอัตราบิตแบบไดนามิก, เสียงเต็มแถบ ($48\text{ kHz}$), และความหน่วงเชิงอัลกอริทึมที่ต่ำกว่า
7. สเปคอย่างเป็นทางการและอ้างอิง
- ข้อกำหนด IETF RFC 3951: มาตรฐานการพูดและเสียงของโคเดกอัตราบิตต่ำ (iLBC) อินเทอร์เน็ต
- รูปแบบเพย์โหลด IETF RFC 3952: รูปแบบเพย์โหลดของโปรโตคอลการส่งข้อมูลแบบเรียลไทม์ (RTP) สำหรับ iLBC
- โครงการโอเพนซอร์ส WebRTC: การให้สิทธิ์โคเดก WebRTC & การนำ iLBC ไปใช้
- เอกสาร Codec ของ FFmpeg: แนวทางการรวม libilbc ของ FFmpeg