2017-06-14 20 views
0

我需要从Link修改Kurento群呼例如仅支持音频

修改Kurento群呼例如只发送音频,如果一个参与者没有摄像头。现在只有在使用相机时才会收到音频。当只有麦克风可用时,我收到一个DeviceMediaError。

我设法过滤摄像头设备是否连接,然后只发送音频,但这是行不通的。也许参与者应该有音频标签而不是视频标签?

编辑:它只适用于Firefox而不适用于Chrome。有任何想法吗?

回答

0

的档案 - https://github.com/Kurento/kurento-tutorial-java/blob/master/kurento-group-call/src/main/java/org/kurento/tutorial/groupcall/UserSession.java

变化以下行 -

sender.getOutgoingWebRtcPeer().connect(incoming, MediaType.AUDIO); 

,并设置提供媒体约束视频:假在浏览器JS文件。

更新的代码 -

let constraints = { 
    audio: true, 
    video: false 
}; 

let localParticipant = new Participant(sessionId); 
participants[sessionId] = localParticipant; 
localVideo = document.getElementById('local_video'); 

let video = localVideo; 

let options = { 
    localVideo: video, 
    mediaConstraints: constraints, 
    onicecandidate: localParticipant.onIceCandidate.bind(localParticipant), 
    configuration : { iceServers : [ 
       {"url":"stun:74.125.200.127:19302"}, 
       ] } 
}; 

localParticipant.rtcPeer = new kurentoUtils.WebRtcPeer.WebRtcPeerSendonly(options, function(error) { 
    if (error) { 
     return console.error(error); 
    } 

    localVideoCurrentId = sessionId; 

    localVideo = document.getElementById('local_video'); 
    localVideo.src = localParticipant.rtcPeer.localVideo.src; 
    localVideo.muted = true; 

    this.generateOffer(localParticipant.offerToReceiveVideo.bind(localParticipant)); 
}); 

server.js代码

​​

在服务器端添加介质特征参数同时加入房间。

function getEndpointForUser(userSession, sender, callback) { 

if (userSession.id === sender.id) { 
    return callback(null, userSession.outgoingMedia); 
} 

let incoming = userSession.incomingMedia[sender.id]; 

if (incoming == null) { 
    console.log(`user : ${userSession.id} create endpoint to receive video from : ${sender.id}`); 
    getRoom(userSession.roomName, (error, room) => { 
     if (error) { 
      return callback(error); 
     } 
     room.pipeline.create('WebRtcEndpoint', {mediaProfile : 'WEBM_AUDIO_ONLY'}, (error, incomingMedia) => { 
      if (error) { 
       if (Object.keys(room.participants).length === 0) { 
        room.pipeline.release(); 
       } 
       return callback(error); 
      } 

      console.log(`user: ${userSession.id} successfully create pipeline`); 
      incomingMedia.setMaxAudioRecvBandwidth(0); 
      incomingMedia.getMaxAudioRecvBandwidth(0); 

接受呼叫时添加介质特征参数

希望这有助于。

+0

那么我还能够使用视频,如果我有一个视频设备? – Towen

+0

您需要检查设备的视频,然后相应地设置媒体约束。这必须在服务器和客户端端以及媒体接收器的客户端完成。您只需要编写单独的功能,仅用于音频呼叫和音频 - 视频呼叫。 –

+0

感谢您的详细解答。我已经检查是否有凸轮或只有音频设备可用。根据这个我把约束改为假或者真。这就是我所要改变的一切吗?是仅在音频呼叫和视频呼叫之间区分服务器端的唯一步骤吗? – Towen