Можно ли получить доступ только к функциям декодирования?
К сожалению нет. У нас есть доступ только к высокоуровневому API, работающему с потоком/исходным файлом независимо с ограниченным влиянием, таким как положение во времени, состояние воспроизведения и различные события. Мы можем рисовать кадры на холсте как необработанный RGB(A) из текущего декодированного кадра, но это все.
Причина в том, что я использую собственный протокол потоковой передачи, поэтому на стороне клиента у меня есть закодированный видеопоток, который мне нужно декодировать и отображать.
Вы не описываете этот протокол, поэтому мы можем только догадываться, но вы можете создать совместимый с браузером поток, который может использоваться элементом видео, используя Расширения источника мультимедиа. Это позволяет создавать адаптивные и настраиваемые потоковые решения прямо в клиенте.
Реализации декодера видео на чистом JavaScript, к сожалению, неприменимы, поскольку не могут обеспечить достаточную производительность.
Это не обязательно правда. Примерами являются, например, чистая реализация JS, которая декодирует потоки MPEG1 в режиме реального времени, как аудио, так и видео, такие как this и это. Конечно, это работает на самом пределе возможностей большинства браузеров в настоящее время. Существует также декодер H-264 на основе emscripten, который, кажется, также использует GPU через WebGL, но я не могу говорить о его производительности - хотя это может быть хорошей отправной точкой для следующего абзаца:
Лучший вариант — изучить WebAssembly, который может запускать предварительно скомпилированный двоичный код, например, из исходного кода C/C++. Это позволяет вам использовать реализации декодеров HVEC/H.264 с открытым исходным кодом, работающие на исходной скорости в браузере (однако будьте осторожны с лицензиями и условиями, особенно для H.264) или использовать части программного обеспечения, такие как (ссылаемый) ffmpeg.
Меня интересует любое даже не портируемое решение
В этом случае вы можете захотеть создать веб-расширение ( расширения браузера), которые могут использовать обмен сообщениями для взаимодействия с собственным приложением. (последним в данном случае может быть ffmpeg или программа, которая может напрямую работать с потоком).
Как именно это будет работать, конечно, будет зависеть от используемого вами протокола и так далее.
Просто мои 2 цента, основанные на ограниченном объеме/описании.
person
Community
schedule
19.12.2017