getUserMedia()获取流失败的原因查询及解决

  • Chrome 47以后,getUserMedia API只能允许来自“安全可信”的客户端的视频音频请求,如HTTPS和本地的Localhost。 例如:https://192.168.1.2:8080
  • localhost是唯一不用https的域名。
  • 因此,解决这个问题一个方法是让自己的Web支持HTTPS,还有一个方法使用旧版本的Chrome。如Chrome 46等。

转载于:https://my.oschina.net/slothbear/blog/1838155

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用WebRTC技术将getUserMedia获取传给Java后端。具体步骤如下: 1. 在前端使用getUserMedia获取,并将发送给后端。 ```javascript const constraints = { audio: true, video: true }; navigator.mediaDevices.getUserMedia(constraints) .then(stream => { // 将stream发送给后端 sendStreamToBackend(stream); }) .catch(error => { console.error(error); }); function sendStreamToBackend(stream) { // 使用WebRTC技术将stream传输给后端 // 可以使用Socket.IO或WebSockets来发送stream const socket = io(); const peer = new RTCPeerConnection(); peer.addStream(stream); peer.createOffer() .then(offer => { peer.setLocalDescription(offer); socket.emit('offer', offer); }); socket.on('answer', answer => { peer.setRemoteDescription(answer); }); peer.onicecandidate = event => { if (event.candidate) { socket.emit('candidate', event.candidate); } }; socket.on('candidate', candidate => { peer.addIceCandidate(candidate); }); } ``` 2. 在后端接收,并进行处理。 ```java import org.glassfish.tyrus.client.ClientManager; import javax.websocket.*; import java.io.IOException; import java.net.URI; @ClientEndpoint public class WebsocketClient { private Session session; @OnOpen public void onOpen(Session session) { this.session = session; } @OnMessage public void onMessage(String message) { // 接收到消息后进行处理 System.out.println(message); } @OnClose public void onClose(Session session, CloseReason closeReason) { System.out.println("WebSocket closed: " + closeReason); } @OnError public void onError(Session session, Throwable throwable) { System.out.println("WebSocket error: " + throwable.getMessage()); } public void connect(String uri) throws IOException, DeploymentException { ClientManager client = ClientManager.createClient(); client.connectToServer(this, URI.create(uri)); } public void send(String message) throws IOException { session.getBasicRemote().sendText(message); } } ``` ```java import javax.websocket.*; import javax.websocket.server.ServerEndpoint; import java.io.IOException; import java.util.HashSet; import java.util.Set; @ServerEndpoint("/stream") public class StreamEndpoint { private static Set<Session> sessions = new HashSet<>(); @OnOpen public void onOpen(Session session) { sessions.add(session); } @OnMessage public void onMessage(Session session, String message) { // 接收到消息后进行处理 System.out.println(message); // 将消息发送给所有连接的客户端 for (Session s : sessions) { try { s.getBasicRemote().sendText(message); } catch (IOException e) { e.printStackTrace(); } } } @OnClose public void onClose(Session session) { sessions.remove(session); } @OnError public void onError(Session session, Throwable throwable) { throwable.printStackTrace(); } } ``` 上述代码中,`WebsocketClient`是Java后端连接WebSocket服务器的客户端,`StreamEndpoint`是WebSocket服务器的端点,用于接收从前端发送来的数据。你可以根据具体需求对代码进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值