修改Kurento组呼示例以仅支持音频

时间:2017-06-14 11:51:21

标签: webrtc kurento

我需要修改Link

中的Kurento群组调用示例

如果一个参与者没有摄像头,则仅发送音频。现在只使用相机时收到音频。当只有麦克风可用时,我收到DeviceMediaError。

我设法过滤相机设备是否已连接,然后仅发送音频,但这不起作用。也许参与者应该使用音频标签而不是视频标签?

编辑:它只适用于Firefox,而不适用于Chrome。有什么想法吗?

1 个答案:

答案 0 :(得分: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文件中将商品媒体限制设置为 video:false

更新代码 -

  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 join(socket, room, callback) {
let userSession = userRegister.getById(socket.id);
userSession.setRoomName(room.name);

room.pipeline.create('WebRtcEndpoint', {mediaProfile : 'WEBM_AUDIO_ONLY'}, (error, outgoingMedia) => {
    if (error) {
        console.error('no participant in room');
        if (Object.keys(room.participants).length === 0) {
            room.pipeline.release();
        }
        return callback(error);
    }

    // else
    outgoingMedia.setMaxAudioRecvBandwidth(100);

在加入会议室时,在服务器端添加媒体配置文件参数

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);
接受电话时

添加媒体资料参数

希望这会有所帮助。