2013-04-15 26 views
16

Tôi đang thực hiện cuộc gọi điện video trên webRTC. Tôi đã thực hiện thành công datachannel. Bây giờ tôi muốn thêm luồng video vào cùng một kết nối ngang hàng.WebRTC: Cách thêm luồng sau khi cung cấp và trả lời?

Tôi đã đọc luồng đó phải được thêm trước khi trả lời và cung cấp. Có cách nào để thêm luồng sau câu trả lời hoặc phiếu mua hàng không?

Trong trường hợp tôi đã thêm luồng trước khi cung cấp hoặc trả lời, làm cách nào tôi có thể ngừng phát trực tuyến và khởi động lại khi cần?

Có thể có bất kỳ sự cố nào trong việc duy trì quá nhiều luồng không?

Trả lời

9

Để thêm luồng sau khi tạo tín hiệu hoàn chỉnh, kết nối ngang hàng nên đàm phán lại bằng luồng.

pc1.addstream(stream) 

Sau đó, một lần nữa tạo phiếu mua hàng và gửi cho người khác.

Đồng đẳng từ xa sẽ thêm luồng và gửi câu trả lời SDP.

Để ngăn chặn dòng:

stream.stop(); 
pc1.removeStream(stream); 
+0

Nếu với createOffer đầu tiên() tôi tạo ra một DataChannel, tôi có thể sử dụng nó để gửi dữ liệu của createOffer thứ hai() sau khi addstream(), hoặc tôi sẽ mất với createOffer thứ hai() kết nối đó ? – Piranna

+3

Bạn có thể sử dụng datachannel được tạo bằng cách sử dụng phiếu mua hàng đầu tiên. –

+0

Vì vậy, các kết nối và luồng dữ liệu vẫn tồn tại sau khi gọi hàm createOffer() lần thứ hai? Đó là một tính năng tuyệt vời! :-) – Piranna

8

Theo kinh nghiệm của tôi, những gì Konga Raju khuyên không làm việc. Tôi không thể gửi "phiếu mua hàng được cập nhật" và việc phát trực tuyến video thực sự xảy ra.

tôi thấy rằng chuỗi sự kiện này làm việc cho trường hợp của tôi, trong đó tôi muốn các dòng video từ ngang hàng 1 tới ngang 2.

  1. thiết lập một số đường cho đồng nghiệp để trao đổi tin nhắn. (Phương sai về cách mọi người thực hiện điều này là điều làm cho các mẫu mã WebRTC khác nhau trở nên không thể chấp nhận được, thật đáng buồn.)
  2. Ở mỗi bên, hãy thiết lập các trình xử lý cho các sự kiện báo hiệu quan trọng. (Một số người đã báo cáo rằng bạn cần phải tạo các trình xử lý này vào những thời điểm đặc biệt, nhưng tôi chưa phát hiện ra trường hợp đó. ) Có 3 sự kiện cơ bản:
    • một ứng cử viên băng được gửi từ phía bên kia == > gọi addIceCandidate với nó
    • một thông báo đề nghị ==>SetRemoteDescription & làm cho một câu trả lời & gửi nó
    • một thông báo trả lời ===>SetRemoteDescription
  3. Trên mỗi bên, tạo ra các đối tượng PeerConnection với sự kiện xử lý chúng tôi c đang về: onicecandidate, onremovestream, onaddstream vv
    • ứng cử viên băng bật ra của đối tượng PeerConnection ===> gửi cho bên kia
  4. Khi cả hai đồng nghiệp có mặt và tất cả các bộ xử lý được đưa ra , peer 1 nhận được thông báo kích hoạt của một số loại để bắt đầu quay video (gọi getUserMedia)
  5. Sau khi getUserMedia thành công, chúng tôi có một luồng. Gọi addStream trên đối tượng kết nối ngang hàng.
  6. Sau đó ngang 1 làm cho một đề nghị
  7. Do xử lý chúng tôi thiết lập trước đó, ngang 2 gửi một câu trả lời
  8. Đồng thời với điều này (và khá opaquely), đối tượng kết nối ngang hàng bắt đầu sản xuất các ứng cử viên băng. Họ được gửi qua lại giữa hai đồng nghiệp và xử lý (bước 2 & 3 ở trên)
  9. Truyền bắt đầu bằng cách riêng của mình, opaquely, như là kết quả của 2 điều kiện:
    • trao đổi lời đề nghị/câu trả lời
    • ứng viên băng nhận , trao đổi và xử lý

tôi đã không tìm thấy một cách để thêm video sau khi bước 9. Khi tôi muốn thay đổi một cái gì đó, tôi quay lại bước 3.

+0

bạn có thể làm điều đó khá khác biệt, ví dụ: bướC# getUserMedia của bạn - bạn có thể bắt đầu quay video cục bộ (xem trước) trước khi bắt đầu báo hiệu (bước 1). Tôi đang đọc ở đây vì tôi đã gặp sự cố khi cố gắng thực hiện DataChannel rồi AddStream ... nó sẽ thay đổi những điều cần làm AddStream SAU khi DataChannel xuất hiện ở trạng thái sẵn sàng. –

+3

oh thân yêu, không cần phải tạo kết nối ngang hàng nữa, chúng ta có thể tiến hành từ #step 4. –

+0

Dường như có thể: https://www.webrtc-experiment.com/docs/how-to-switch-streams.html –

-1

MediaStream chỉ nên được thêm vào kết nối ngang hàng đầu tiên sau đó trao đổi phiếu mua hàng, câu trả lời, ứng viên nên được thực hiện. Nếu onAddStream() được gọi, điều đó có nghĩa là bạn đang nhận được video từ xa.

+0

Vui lòng cung cấp một số mã mẫu. – bish

+0

Bạn đã hiểu sai câu hỏi. OP muốn thêm luồng sau khi kết nối được thiết lập. – Nisarg

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