Можно ли создать поток битов в JS для источника видео HTML5? - PullRequest
5 голосов
/ 13 марта 2012

Я хотел бы динамически генерировать поток битов в JavaScript, например, большое OGG-видео.Можно ли сказать браузеру запрашивать функцию JavaScript для битового потока вместо того, чтобы отправлять HTTP-GET-запрос в какое-то место?

Единственный возможный способ передачи данных в видео-тег, который я нашел, будет содержать данные: -URLs.Но для этого требуется, чтобы все видео было закодировано в документе.

Это плохое решение для больших видео, которые обычно транслируются в потоковом режиме.AFAIK, вы не можете динамически добавлять больше данных в URL-адреса данных.

Кто-нибудь знает, возможно ли это как-то?

Ответы [ 3 ]

1 голос
/ 30 марта 2012

Я не знаю, возможно ли это с Javascript, но вы, вероятно, можете сделать что-то подобное с проигрывателем Java или Javascript (?), Например, Cortado.

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

0 голосов
/ 21 апреля 2017

Теперь это возможно с MediaSource API .

Вот пример по ссылке выше:

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 голосов
/ 17 марта 2012

Если ваше видео закодировано для потоковой передачи, оно будет постепенно загружаться любым браузером, запрашивающим его. Вот только как это работает. Вам понадобятся и OGG, и MP4 для

FF / Chrome / IE9.

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

«закодировано в документе» не имеет никакого смысла. Видео кодируется вашим кодировщиком и может дополнительно иметь настройки для оптимизации для потоковой передачи (то есть оно кодирует первые XX секунд с более низкой скоростью передачи данных, чтобы начать быстрее).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...