2014-06-21 18 views
5

Tôi sử dụng Licode đó là Nền tảng truyền thông WebRTC nguồn mở. Tôi muốn giảm chất lượng video (kích thước bit khung hình video).Licode Erizo.Stream Chất lượng khung hình video

Dòng trông như thế này:

var stream = Erizo.Stream({ 
    audio:true, 
    video:video_constraints, 
    data: true, 
    attributes: {name:'myStream', type:'public'} 
}); 

Có thể để có được VideoFrame như thế này:

var bitmap; 
var canvas = document.createElement('canvas'); 
var context = canvas.getContext('2d'); 

canvas.id = "testCanvas"; 
document.body.appendChild(canvas); 

setInterval(function() { 
    bitmap = stream.getVideoFrame(); 
    canvas.width = bitmap.width; 
    canvas.height = bitmap.height; 
    context.putImageData(bitmap, 0, 0); 
}, 100); 

Và tôi gửi canvas (một video Frame):

var bitmap; 
    var canvas = document.createElement('canvas'); 
    var context = canvas.getContext('2d'); 

    setInterval(function() { 
     canvas.width = video.clientWidth; 
     canvas.height = video.clientHeight; 
     context.drawImage(video, 0, 0, canvas.width, canvas.height); 
     mydata = canvas.toDataURL("image/jpeg"); 
     erizoStream.sendData({ base64:mydata}); 
    }, 200); 

Các erizoStream.sendData({ base64:mydata}); là vô dụng cho hiệu suất tốc độ.

Nó sẽ gửi dữ liệu nhanh chóng nhưng khi nhận được nó có vấn đề với hình ảnh động:

stream.addEventListener("stream-data", function(evt){ 
      //alert('Received data '+ evt.msg['base64']); 
      if(evt.msg['base64']){ 
      renderBase64(evt.msg['base64']); 
      } 

     }); 

Tập setInterval thời gian 200ms làm cho việc gửi chỉ đi nhanh. Nhưng điều này sẽ nhanh hơn khi tôi mở trang (tab) trong cửa sổ mới.

Tôi muốn giảm khung hình video (kích thước bit) mà không cần sử dụng erizoStream.sendData();. Chỉ từ chính video hoặc sử dụng nó với việc giải quyết vấn đề hiệu suất tốc độ.

+0

Vì vậy, [thay đổi chất lượng tại url Jpeg] (http://stackoverflow.com/questions/14383557/setting-canvas-todataurl-jpg-quality) tạo được ra ngoài? Những hạn chế về video hiện tại của bạn cho cuộc gọi getUserMedia là gì? –

Trả lời

4

Khi xuất bản phòng ..

 room.publish(localStream, {maxVideoBW: 300}); 

Có thể thêm maxVideoBW, nó đặt độ rộng băng video tối đa đến 300 kbps. Điều này làm giảm giá trị chất lượng để trở thành đúng giá trị băng thông.

Và đừng quên thay đổi maxFrameRate:

var video_constraints = {mandatory: { 
     maxFrameRate:30 
     }, 
     optional: [ ] 
    }; 

Như một ví dụ để tính toán nó:

Nếu bạn có 30 khung hình mỗi giây, và băng thông 300 kbps:

Sau đó, bạn đang sử dụng tải lên 300/30 = 10 KB/giây.

Bằng cách giảm BW xuống 35, bạn có thể giải quyết vấn đề hiệu suất tốc độ.

Quality control

+1

Câu trả lời tuyệt vời ........... – Muath

+1

Tôi hy vọng nó hoạt động cho bạn –

+0

Điều này giải quyết sự chậm chạp – Muath

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