2013-12-12 16 views
10

Tôi muốn xem liệu có thể truy cập trực tiếp vào Opus bằng cách sử dụng getUserMedia hoặc bất kỳ thứ gì tương tự từ các trình duyệt mới nhất hay không.Làm cách nào để sử dụng Opus Codec từ JavaScript

Tôi đã nghiên cứu rất nhiều nhưng không có kết quả Tốt.

Tôi biết rằng Opus hoặc Speex thực sự được sử dụng trong API webkitSpeechRecognition. Tôi muốn thực hiện nhận dạng giọng nói nhưng sử dụng máy chủ của riêng tôi chứ không phải của Google.

Trả lời

11

Vì vậy, có rất nhiều đề xuất về Emscripten nhưng không ai làm, vì vậy tôi đã chuyển bộ mã hóa opus-tools sang JavaScript bằng Emscripten. Phụ thuộc vào những gì bạn nghĩ, hiện tại có các cơ hội sau:

+0

Chà! Thật đáng kinh ngạc. Đánh dấu đây là câu trả lời được chấp nhận, mặc dù tôi chưa thử nghiệm nó! –

+0

@OmarIthawi Cảm ơn bạn. Xem [demo này] (https://blog.rillke.com/opusenc.js/) và [báo cáo lỗi] (https://github.com/Rillke/opusenc.js/issues) hoặc cho tôi biết cách thực hiện nó tuyệt vời hơn. –

3

Thật không may, hiện tại không thể truy cập bộ giải mã trình duyệt trực tiếp từ JavaScript để mã hóa. Cách duy nhất để làm điều đó là sử dụng WebRTC và thiết lập ghi âm trên máy chủ. Tôi đã thử điều này bằng cách biên dịch libjingle với một số mã khác ra khỏi Chromium để làm cho nó chạy trên một máy chủ Node.js ... nó gần như không thể.

Điều duy nhất bạn có thể thực hiện hiện tại là gửi dữ liệu PCM thô đến máy chủ của bạn. Điều này chiếm khá nhiều băng thông, nhưng bạn có thể giảm thiểu điều đó bằng cách chuyển đổi các mẫu float32 xuống 16 bit (hoặc 8 bit nếu nhận dạng giọng nói của bạn có thể xử lý nó).

Hy vọng API trình ghi phương tiện sẽ hiển thị sớm để chúng tôi có thể sử dụng codec trình duyệt.

+0

Cảm ơn nhiều. Tôi nghĩ rằng tôi đã đạt đến cạnh của HTML5. Đáng buồn là tôi sẽ quay trở lại một giải pháp dựa trên Flash bằng cách sử dụng 'rtmp'. –

+0

Điều đáng buồn là Google đã có điều này trong hai thành phần 'x-webkit-speech' và' webkitSpeechRecognition', tôi ước nếu họ chỉ cho phép thay đổi máy chủ. Điều này sẽ thực sự giải quyết vấn đề của tôi. –

+0

@OmarIthawi Tôi thực sự không đồng ý rằng API nhận dạng giọng nói là nơi cần thực hiện điều này. Tôi có thể tưởng tượng một trường hợp nhận dạng giọng nói có thể được thực hiện bởi chính trình duyệt, mà không cần gửi nó đến một số máy chủ ở đâu đó. API Media Recorder là nơi bạn cần đáp ứng ngay lập tức. Nếu không, sẽ rất hữu ích nếu bạn có thể ghi đè nhận dạng giọng nói qua plugin trình duyệt. – Brad

3

Đây không phải là giải pháp hoàn chỉnh, câu trả lời của @ Brad thực sự là câu trả lời chính xác vào thời điểm này.

Một cách để thực hiện việc này là biên dịch Opus to Emscripten và hy vọng rằng PC của bạn có thể xử lý mã hóa bằng JavaScript. Một cách khác là sử dụng speex.js.

4

Chúng tôi đang sử dụng emscripten để mã hóa và giải mã bằng cách sử dụng gsm610 với getUserMedia và nó hoạt động cực kỳ tốt, ngay cả trên thiết bị di động. Những ngày này javascript cho hiệu suất gần như bản địa, do đó, emscripten là khả thi để biên dịch codec. Vấn đề duy nhất là các tệp .js rất lớn, vì vậy bạn chỉ muốn biên dịch các phần bạn đang sử dụng.

+1

Thử thách duy nhất của chúng tôi là tìm một codec video mã nguồn mở miễn phí sẽ hoạt động với getUserMedia. – CpnCrunch

Các vấn đề liên quan