2012-03-13 24 views
5

Tôi muốn tạo động bitstream trong JavaScript, ví dụ: một OGG-video lớn. Có thể yêu cầu trình duyệt yêu cầu chức năng JavaScript cho bitstream thay vì thực hiện yêu cầu HTTP-GET cho một số vị trí không?Có thể tạo bitstream trong JS cho nguồn video HTML5 không?

Cách duy nhất để nạp dữ liệu vào thẻ video mà tôi tìm thấy sẽ chứa dữ liệu: -URL. Nhưng điều đó đòi hỏi toàn bộ video phải được mã hóa trong tài liệu.

Đây là giải pháp không tốt cho các video lớn, thường được phát trực tuyến. AFAIK bạn không thể thêm dữ liệu động vào dữ liệu URL.

Có ai biết nếu điều này có thể bằng cách nào đó không?

+0

Bạn có nghĩa là sử dụng một "dữ liệu: string" - như người ta có thể trong một img-tag? (http://stackoverflow.com/questions/1207190/embedding-base64-images) – T4NK3R

Trả lời

0

này bây giờ nên có thể với MediaSource API.

Dưới đây là một ví dụ từ liên kết ở trên:

var video = document.querySelector('video'); 

var assetURL = 'frag_bunny.mp4'; 
// Need to be specific for Blink regarding codecs 
// ./mp4info frag_bunny.mp4 | grep Codec 
var mimeCodec = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"'; 

if ('MediaSource' in window && MediaSource.isTypeSupported(mimeCodec)) { 
    var mediaSource = new MediaSource(); 
    //console.log(mediaSource.readyState); // closed 
    video.src = URL.createObjectURL(mediaSource); 
    mediaSource.addEventListener('sourceopen', sourceOpen); 
} else { 
    console.error('Unsupported MIME type or codec: ', mimeCodec); 
} 

function sourceOpen (_) { 
    //console.log(this.readyState); // open 
    var mediaSource = this; 
    var sourceBuffer = mediaSource.addSourceBuffer(mimeCodec); 
    fetchAB(assetURL, function (buf) { 
    sourceBuffer.addEventListener('updateend', function (_) { 
     mediaSource.endOfStream(); 
     video.play(); 
     //console.log(mediaSource.readyState); // ended 
    }); 
    sourceBuffer.appendBuffer(buf); 
    }); 
}; 

function fetchAB (url, cb) { 
    console.log(url); 
    var xhr = new XMLHttpRequest; 
    xhr.open('get', url); 
    xhr.responseType = 'arraybuffer'; 
    xhr.onload = function() { 
    cb(xhr.response); 
    }; 
    xhr.send(); 
}; 
0

Nếu video của bạn được mã hóa để phát trực tiếp, video sẽ được tải xuống dần dần bởi bất kỳ trình duyệt nào đang yêu cầu. Đó chỉ là cách nó hoạt động. Bạn sẽ cần cả OGG và MP4 cho

FF/Chrome/IE9.

http://www.mediacollege.com/video/streaming/http.html

"được mã hóa trên tài liệu" không có ý nghĩa gì. Video được mã hóa bởi bộ mã hóa của bạn và có thể có thêm cài đặt để tối ưu hóa cho phát trực tuyến (tức là mã hóa XX giây đầu tiên ở tốc độ bit thấp hơn để bắt đầu nhanh hơn).

1

Tôi không biết nếu có thể với Javascript, nhưng bạn có thể có thể làm một cái gì đó như thế với một máy nghe nhạc Java hoặc Javascript (?), Như Cortado.

http://www.flumotion.net/cortado/

+0

Cảm ơn, điều này rất hữu ích. Tôi thấy một bộ giải mã JavaScript ở đâu đó vẽ khung trên một khung hình. Điều này rõ ràng không phải là nhanh và không có âm thanh. Nhưng đó là tất cả một cách giải quyết. Cortado yêu cầu Java, ví dụ. – anty

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