2012-12-20 16 views
6

Đây là bước tiếp theo cho another question Tôi đã hỏi, nhưng với thông tin chính xác hơn.Sử dụng SignalR làm lớp dịch vụ cho WebRTC

Tôi có hai trang web cơ bản giống hệt nhau giới thiệu WebRTC, một trang sử dụng XSockets làm lớp báo hiệu phụ trợ và một sử dụng SignalR làm lớp báo hiệu phụ trợ.

Hai chương trình phụ trợ về cơ bản giống hệt nhau, chỉ khác nhau ở các điểm mà ở đó (rõ ràng) có các cách gửi dữ liệu khác nhau cho khách hàng. Tương tự, mã WebRTC TypeScript/JavaScript trên hai máy khách hoàn toàn giống nhau, vì tôi đã trừu tượng hóa lớp báo hiệu.

Vấn đề là trang web XSockets hoạt động liên tục, trong khi trang web SignalR không thành công (chủ yếu là nhất quán, mặc dù không hoàn toàn). Thông thường nó không thành công khi gọi peerConnection.setLocalDescription(), nhưng nó cũng có thể không âm thầm; hoặc nó có thể (đôi khi) thậm chí làm việc.

Bạn có thể xem hai trang khác nhau trong hoạt động ở đây:

XSockets trang web: http://xsockets.demo.alanta.com/

trang web SignalR: http://signalr.demo.alanta.com/

Các mã nguồn cho cả hai là tại https://bitbucket.org/smithkl42/xsockets.webrtc, với phiên bản XSockets trên Chi nhánh xsockets và phiên bản SignalR trên chi nhánh signalr. Vì vậy, câu hỏi của tôi là: không ai biết lý do tại sao sử dụng một lớp tín hiệu thay vì một lớp tín hiệu khác sẽ tạo ra bất kỳ sự khác biệt nào đối với WebRTC không? Không. Ví dụ, một hay khác gửi lại chuỗi Unicode thay vì ANSI? Hay tôi đã chẩn đoán sai vấn đề, và sự khác biệt thực sự là ở đâu?

Trả lời

2

Đã tìm ra. Hóa ra rằng SignalR 1.0 RC1 có một lỗi trong đó thay đổi bất kỳ "+" trong một chuỗi vào một không gian. Vì vậy, dòng trong SDP trông như thế này:

a=ice-pwd:qZFVvgfnSso1b8UV1SUDd2+z

đã nhận được đổi tên thành này:

a=ice-pwd:qZFVvgfnSso1b8UV1SUDd2 z

Nhưng vì không phải mọi SDP đã có một "+" trong đó trên một dòng quan trọng , đôi khi nó sẽ hoạt động. Mọi thứ đã giải thích.

Lỗi đã được báo cáo cho những người làm việc tốt trên SignalR (xem https://github.com/SignalR/SignalR/issues/1194), và trong khi đó, một đơn giản encodeURIComponent()decodeURIComponent() quanh các chuỗi được đề cập đã sửa lỗi đó.

+0

Ken, Bạn có sử dụng SignalR để chỉ báo hiệu hoặc để truyền dữ liệu video/âm thanh không? –

+0

@ElanHasson - Chỉ dành cho báo hiệu. WebRTC phức tạp và được triển khai không đầy đủ (về cơ bản chỉ có Firefox và Chrome, với một số vấn đề tương thích), nhưng vẫn là phương tiện được ưu tiên cho dữ liệu video/âm thanh thời gian thực. Tôi đã không cố gắng sử dụng WebSockets để cung cấp âm thanh/video, nhưng từ những gì tôi biết về thiết kế và triển khai điển hình của nó, tôi nghĩ bạn có một số vấn đề thực sự. Và tôi nghĩ rằng việc bỏ phiếu dài, Sự kiện bên máy chủ và các cách tiếp cận tương tự khác sẽ không bắt đầu. –

+1

Tôi đồng ý. Tôi vừa chuyển sang Flex/Red5 ngay bây giờ. Red5 có thể chuyển mã các luồng trực tiếp mà phần tử video HTML5 có thể tiêu thụ, với dự phòng trên trình xem flash. Tôi đã chết một chút bên trong khi phát triển giải pháp này. –