{"repo":"zhaohappy/libmedia","free":true,"listed":false,"github":"https://github.com/zhaohappy/libmedia","clone":"git clone https://github.com/zhaohappy/libmedia.git","description":"一个 TypeScript 实现的高性能媒体库，支持 WebCodecs 和 Wasm。 A high-performance media library implemented in TypeScript, support WebCodecs and Wasm.","language":"TypeScript","stars":374,"topics":["av1","dash","decoder","flv","m3u8","mpegts","player","webassembly","encoder","mux"],"license":"LGPL-3.0","category":"dev-tools","readme_excerpt":"libmedia ====== 中文 English 文档 介绍 libmedia 是一个用于在 Web 平台上处理多媒体内容（如音频、视频、字幕）的工具库。 libmedia 有 TypeScript 模块和 WebAssembly 模块，并且设计理念上以 TypeScript 模块为主导；我们将音视频的封装解封装层放在 TypeScript 模块实现，这样就能使用异步 IO 来处理各种来源的流，可以让整个系统在非 SharedArrayBuffer 和非 Worker 环境上运行。 解码编码模块放入 WebAssembly 模块中，这些模块可以从 FFmpeg 的 libavcodec 模块中编译而来，并且将每种解码器和编码器编译成单独的 wasm 模块，解决编译产物太大的问题，使用的时候只需要去加载要使用的模块。同时编解码模块可以使用 WebCodecs。 libmedia 的 API 设计上参照 FFmpeg 设计，很多数据结构概念都是一致的，所以你能看见诸如 、 、 、 、 等数据结构。FFmpeg 作为音视频行业事实上的标准，其设计是非常优秀的；照着设计直接得到优秀的设计模式，还减少开发者学习理解的难度，毕竟做音视频开发的多少都对 FFmpeg 学习过；当然最主要的原因是我们需要让这些数据可以在 TypeScript 模块和 WebAssembly 模块中都可以进行读写操作，其在内存上的布局和 FFmpeg 保持一致是前提。 libmedia 是设计在多线程上的，只是可以回退到单线程上运行；所以对多线程开发比较亲和；开发者可以很优雅的基于此做多线程的开发，毕竟在音视频领域使用多线程带来的体验绝对要高出很多。 库 - 音视频封装解封装库（flv、mp4、mpegts、matroska、ogg、mp3） - 音视频编解码库，主要是 C/C++(FFmpeg 和其他编解码项目) 编译的 Wasm 和 Web 平台标准 WebCodecs - 音频重采样（FFmpeg 音频重采样模块编译） - 音频变速、变调处理（soundtouch 编译） - 视频缩放，格式转换（FFmpeg libswscale 模块编译） - Web 平台网络文件 IO 相关（Fetch、WebSocket、WebTransport、File） - 音视频协议（dash、m3u8、rtp、rtsp、rtmp） - 音视频渲染（8bit、10bit、HDR、audioWorklet、WebGL、WebGPU） - 媒体任务处理管线，用于多线程并行化处理任务 多线程 libmedia 支持多线程，但需要页面可以使用 SharedArrayBuffer，你可以通过在顶层文档的响应头上添加以下两个响应头: - Cross-Origin-Opener-Policy: same-origin - Cross-Origin-Embedder-Policy: require-corp 来开启使用 SharedArrayBuffer，若不支持多线程将回退到主线程上运行。 工具 - AVPlayer 是 libmedia 的音视频播放器实现，支持软解、硬解、MSE；支持多种封装协议、多种编码格式。 在线 demo 在线本地播放器 - AVTranscoder 是 libmedia 的转码工具实现 在线 demo 使用 查看 编译配置示例 找到对应你的构建工具的参考示例，快速知道如何集成 libmedia 到你的项目中。 当前支持的封装格式 Format Input Output ----","default_branch":null,"files":null,"tree":[],"storefront":"/r/zhaohappy","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/zhaohappy/libmedia/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}