1. Định dạng âm thanh iLBC là gì?
Internet Low Bitrate Codec ban đầu được tạo ra bởi Global IP Solutions (GIPS) — một công ty kỹ thuật âm thanh của Thụy Điển, được Google mua lại vào năm 2010. Được Đội ngũ Kỹ thuật Internet (IETF) định nghĩa trong RFC 3951 với việc bao gói tải trọng RTP được mô tả trong RFC 3952, iLBC được thiết kế đặc biệt để truyền giọng nói ổn định qua các liên kết IP không ổn định.
Trong khi các trình duyệt web hiện đại thường sử dụng codec Opus cho giao tiếp thời gian thực hiện đại, iLBC vẫn là một tiêu chuẩn quan trọng, không có bản quyền, được nhúng trong các ngăn xếp điện thoại doanh nghiệp, khách hàng SIP, hồ sơ tương thích ngược WebRTC, và các thiết bị VoIP kế thừa do Cisco, Polycom và hệ thống PBX Asterisk sản xuất.
2. Các đặc điểm chính của iLBC
| Tham số | Thông số |
|---|---|
| Tiêu chuẩn hoá | IETF RFC 3951 (Codec), RFC 3952 (Tải trọng RTP) |
| Các phần mở rộng tệp phổ biến | .ilbc, .lbc |
| Kiểu phương tiện MIME | audio/iLBC |
| Tần số mẫu | $8\text{ kHz}$ (băng hẹp) |
| Độ phân giải lượng tử | PCM tuyến tính 16-bit |
| Kênh âm thanh | Mono (Giọng nói kênh đơn) |
| Độ dài khung được hỗ trợ | $20\text{ ms}$ chế độ và $30\text{ ms}$ chế độ |
| Tốc độ bit hoạt động | $15.20\text{ kbit/s}$ ($20\text{ ms}$) / $13.33\text{ kbit/s}$ ($30\text{ ms}$) |
| Số bit tải trọng mỗi khối | $304\text{ bits}$ ($20\text{ ms}$) / $400\text{ bits}$ ($30\text{ ms}$) |
| Định danh tiêu đề ma thuật | #!iLBC20\n ($20\text{ ms}$) hoặc #!iLBC30\n ($30\text{ ms}$) |
| Cấp phép | Miễn phí bản quyền (mã nguồn mở BSD 3 điều khoản qua WebRTC) |
3. Các tính năng chi tiết & Thiết kế kiến trúc
Mã hoá khung độc lập (Không lan truyền lỗi)
Các định dạng nén giọng nói truyền thống như G.729 và các codec họ CELP sử dụng dự đoán liên khung, trong đó mỗi khung âm thanh phụ thuộc vào thông tin trạng thái và các vector dự đoán cao độ từ khung trước. Nếu một gói tin bị mất trên mạng đông đúc, trạng thái bị thiếu sẽ lan truyền về phía trước, làm méo âm thanh downstream trong vài trăm mili giây.
iLBC loại bỏ sự phụ thuộc này. Mỗi khung giọng nói trong iLBC được mã hoá một cách độc lập. Nếu gói tin $N$ bị mất trong quá trình truyền, gói tin $N+1$ sẽ giải mã với độ trung thực âm học đầy đủ.
Hai chế độ hoạt động ($20\text{ ms}$ so với $30\text{ ms}$)
Để cung cấp cho các kỹ sư viễn thông khả năng quản lý độ trễ linh hoạt, iLBC định nghĩa hai chế độ hoạt động bắt buộc:
- $20\text{ ms}$ Chế độ khung ($15.20\text{ kbit/s}$):
- Mã hoá 160 mẫu âm thanh mỗi khung thành 38 byte ($304\text{ bits}$).
- Cung cấp độ trễ đệm thuật toán thấp hơn, phù hợp cho các giao tiếp tương tác.
- $30\text{ ms}$ Chế độ khung ($13.33\text{ kbit/s}$):
- Mã hoá 240 mẫu âm thanh mỗi khung thành 50 byte ($400\text{ bits}$).
- Giảm tiêu thụ bit khoảng $12%$, tối ưu hoá hiệu suất tải trọng mạng trên các kết nối đường dài.
Giảm thiểu mất gói dữ liệu nâng cao (PLC)
Khi các gói tin bị mất xảy ra, iLBC sử dụng bộ lọc tổng hợp LPC (Linear Predictive Coding) biến trạng thái để tái tạo các biểu diễn chu kỳ cao độ bị thiếu bằng cách sử dụng các trạng thái biên từ các khung lân cận. Thay vì tạo ra tiếng click, tiếng pop kỹ thuật số hoặc âm thanh cắt đột ngột, các gói tin thoại bị mất sẽ giảm dần một cách nhẹ nhàng.
Chất lượng âm thanh so với hồ sơ bitrate
Trong điều kiện mạng lý tưởng (mất gói 0%), iLBC đạt Điểm Đánh Giá Trung Bình (MOS) khoảng 4.14 (trên thang 5.0). Mặc dù hơi thấp hơn so với G.711 PCM không nén ($\mu$-law ở $\sim 4.3$), iLBC vẫn giữ được độ rõ của giọng nói ở mức mất gói lên tới $5\%\text{ đến }10\%$, trong khi khả năng hiểu của G.729 hoặc G.711 giảm đáng kể.
4. Cách mở và phát tệp âm thanh .ilbc
Vì .ilbc là định dạng luồng điện thoại thô chuyên biệt chứ không phải là container đa phương tiện đa năng cho người tiêu dùng (như MP3 hoặc WAV), các trình phát phổ biến cho người tiêu dùng không phải lúc nào cũng phát hiện được nó nếu không có các gói codec chuyên dụng.
Phương pháp 1: Sử dụng Audacity (Nhập dữ liệu thô)
Audacity có thể nhập các tệp dump PCM thô hoặc các tệp âm thanh iLBC đã giải mã:
- Khởi chạy Audacity.
- Đi tới File > Import > Raw Data…
- Chọn tệp và đặt mã hoá thành Signed 16-bit PCM, thứ tự byte thành Little-endian, 1 Channel (Mono), và tần số mẫu thành 8000 Hz.
Phương pháp 2: Phát qua dòng lệnh bằng FFplay
Nếu bản dựng FFmpeg của bạn được biên dịch với phần mở rộng libilbc:
ffplay -f ilbc sample.ilbc
Phương pháp 3: Trình phân tích VoIP chuyên dụng
Các công cụ chẩn đoán mạng như Wireshark có thể trích xuất và tái tạo các tải trọng giọng nói .ilbc trực tiếp từ các phiên gói SIP/RTP đã ghi lại và phát chúng qua tiện ích RTP Player tích hợp.
5. Cách tạo và chuyển đổi tệp âm thanh .ilbc
Làm việc với âm thanh .ilbc yêu cầu đầu vào âm thanh 16-bit, kênh đơn, $8000\text{ Hz}$.
Mã hoá sang iLBC bằng FFmpeg
Để chuyển đổi một mẫu âm thanh .wav hoặc .mp3 hiện có thành luồng bit .ilbc:
ffmpeg -i input_speech.wav \
-ar 8000 \
-ac 1 \
-c:a libilbc \
output_audio.ilbc
-ar 8000: Làm lại mẫu âm thanh để đạt tần số 8 kHz yêu cầu.-ac 1: Hạ trộn âm thanh đa kênh thành mono.-c:a libilbc: Sử dụng bộ mã hoá tham chiếulibilbc.
Xác định chế độ khung ($20\text{ ms}$ hoặc $30\text{ ms}$)
Bạn có thể chọn chế độ khung bằng cách sử dụng cờ -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
Giải mã tệp .ilbc trở lại định dạng WAV chuẩn
Để chuyển đổi tệp .ilbc thành tệp WAV không nén có thể phát ở bất kỳ đâu:
ffmpeg -f ilbc -i voice_message.ilbc converted_audio.wav
6. Câu hỏi thường gặp (FAQ)
Câu 1: Vấn đề chính mà định dạng âm thanh iLBC được tạo ra để giải quyết là gì?
Định dạng iLBC được thiết kế để duy trì khả năng hiểu lời nói qua các mạng IP bằng cách làm cho mỗi khung âm thanh độc lập, ngăn lỗi mất gói lan truyền vào các khung lời nói tiếp theo.
Câu 2: Hai tốc độ bit hoạt động của tệp .ilbc là gì?
Một luồng .ilbc hoạt động ở mức $13.33\text{ kbit/s}$ khi sử dụng khung $30\text{ ms}$ hoặc $15.20\text{ kbit/s}$ khi được cấu hình cho khung $20\text{ ms}$.
Câu 3: Định dạng iLBC có thể được sử dụng để truyền phát nhạc chất lượng cao không?
Không, iLBC là một codec giọng nói hẹp dải bị giới hạn nghiêm ngặt ở tần số mẫu $8\text{ kHz}$, được tối ưu hóa chỉ dành cho giọng nói con người trong khoảng $90\text{ Hz}$ đến $4000\text{ Hz}$.
Câu 4: Bộ mã âm thanh iLBC có miễn phí bản quyền không?
Có, iLBC đã được tiêu chuẩn hoá đầy đủ theo IETF RFC 3951 và được phát hành dưới giấy phép mã nguồn mở, không thu phí bản quyền 3-clause BSD thông qua dự án WebRTC.
Câu 5: iLBC so sánh như thế nào với bộ mã Opus hiện đại?
Trong khi iLBC cung cấp khả năng che giấu mất gói cho VoIP hẹp dải trong các mạng băng rộng đầu tiên, codec Opus hiện đại hỗ trợ bitrate động, âm thanh toàn dải ($48\text{ kHz}$), và độ trễ thuật toán thấp hơn.
7. Các thông số kỹ thuật và tài liệu tham khảo chính thức
- Đặc tả IETF RFC 3951: Internet Low Bit Rate Codec (iLBC) Speech and Audio Standard
- Định dạng tải trọng IETF RFC 3952: Real-time Transport Protocol (RTP) Payload Format for iLBC
- Dự án mã nguồn mở WebRTC: WebRTC Codec Licensing & iLBC Implementation
- Tài liệu Codec FFmpeg: Hướng dẫn tích hợp FFmpeg libilbc