Releases: zhaohappy/libmedia
Releases · zhaohappy/libmedia
v1.2.0
v1.1.0
v1.0.1
v1 版本的 API 有一些破坏性变更,请按步骤迁移。
feat:
- refactor(avformat): 各 OFormat 的 Capabilities 放到各自下面
- feat(avformat): 支持 h264、h265、h266 裸流输出
- feat(avformat): 支持 aac format 输出
- feat: 支持 CSP 环境
- feat(avplayer): mse 模块和字幕渲染模块优化为动态加载模块
- feat(avtranscoder): 支持设置 AVStreamDiscard
- feat(avformat): 增强对 flac 帧头的合法性判断
- refactor: 各模式使用聚合模块导出,限制内部 api 对外开放
bugfix:
- fix(avformat): 兼容处理 startCode 为 0x000001 的 sps 和 pps
- fix(avformat): 处理 aac adif 头
- fix(avformat): dump duration 没有显示 N/A
- fix(avformat): 修复批量更新 box size 会丢失部分数据的问题
- fix(avformat): flv previousTagSize 不正确打印警告日志不抛错
v0.12.0
feat:
- feat(avformat): dump chapters
- feat(avformat): 增强 mp4 和 mkv 对 metadata 的支持能力,mp4 支持章节
- feat(avplayer): hls 和 dash 切换分辨率支持立即切换和平滑切换
- feat(avformat): wav 支持解析 id3 标签
- refactor(avformat): wav、mp3、flac 的 metadata 移到 formatContext 下面变成文件级元数据
- feat(avnetwork): FileIOLoader 支持传 blob
- feat(avformat): mp4 支持 pcm 音频格式
- feat(avrender): 各个 render 支持 alpha 渲染
- feat(avcodec): webcodecs 解码器支持解码 alpha(vp8、vp9、av1) 视频
- feat(avplayer): avplayer 支持使用 webcodecs 播放透明的 webm 和 mkv 视频
- feat(avformat): mp4 支持写 webvtt,mkv 支持写 ass 和 webvtt
- feat(avcodec): 添加 png、webp、gif、bmp、tiff 图片解码器
- feat(avformat): AVStream 新增 discard 字段,用于控制 demux.readAVPacket 是否读取某些流的包(mp4 格式使用)
- feat(avformat): 支持音频格式中封面流解析、播放、转码
- feat(avformat): flac 和 wav 的 AVPacket 支持 duration 字段
- feat(avformat): 添加 flac 封装器
- refactor(avformat): OMovFormat -> OIsobmffFormat,IMovFormat -> IIsobmffFormat(需更改导入路径)
- feat(avformat): avformat 支持 stream group
- feat(avformat): 支持 heif、avif 格式
- feat(avcodec): WebVideoDecoder options 新增可以配置 colorSpace、rotation、flip 等参数
bugfix:
- fix(avformat): ts 对跨 pes 的 nalu 判断前置 sei 为一帧的开始
- fix(avplayer): mes 支持 audio extradata 变化
- fix(avutil): AVPacket 和 EncodedChunk 直接转换处理 duration
- fix(avplayer): 音频或者视频不支持解码忽略而不是报错
v0.11.0
feat:
- feat(avnetwork): hls 和 dash 支持在 load 配置中设置优先 codec,lang、resolution
- feat(avplayer): avplayer 支持在 ended 状态下调 play,此时直接从头开始播放
- feat(avplayer): avplayer load 配置支持设置 maxProbeDuration 参数
bugfix:
- fix(avformat): mp3 计算 duration 需要判断 fileSize 是否合法
- fix(avformat): mkv tag 为 V_QUICKTIME 时需要处理 codecPrivate 有 size 的场景
v0.10.0
feat:
- refactor(avformat): 将 bitFormat 转变成 flags,方便之后追加新的标志位
- feat(avcodec): 添加 mjpeg 解码器
- feat(avformat): 支持 pts 没有的情况下可以解码
- feat(avformat): 支持 avi 封装格式
- feat(avformat): 新增 wav oformat
- feat(avplayer): 支持强制使用音频为主时间
- feat(avformat): fmp4 封装支持写入 mfra box 支持 seek
- feat(avcodec): webcodec 编解码器 options 添加规范定义参数
- feat(avcodec): 编码器支持 copyTs 参数控制使用输入 dts、 pts 输出
- feat(avplayer): avplayer 新增 enableAudioWorklet 和 ioLoaderOptions 配置
- refactor(avutil): 收束各 codec 中 parseAVCodecParameters 参数 stream 的范围
- feat(videoscale): VideoScaler 支持设置颜色空间参数
- feat(avcodec): webcodec 解码器支持传 codec string 初始化
bugfix:
- fix(avutil): 修复解析 H264 SPS 时未处理 scaling list 数据
- fix(avformat): 处理 AVSeekFlags.BYTE seek 操作
- fix(avrender): 处理 sar 不是 1:1 是情况,需要纠正显示宽高比
- fix(format): 兼容一些 fmp4 的 moov 里面存着一段样本的 mp4
- perf(avutil): 优化 splitNaluByStartCode 函数在 SafeUint8Array 数据类型下的性能
- fix(avformat): 修复 fmp4 seek 无法准确到指定时间
- perf(avformat): 优化 seekInBytes 的 seek 准确度
- fix(avformat): mkv ass Format 行优化
- fix(avformat): mkv 读取类型 EbmlType.STRING 时去掉 C 风格终止符
- fix(avformat): mp4 处理 h26x 没有 ctts 时设置 AV_CODECPAR_FLAG_NO_PTS 标志
- fix: 修复 worker 模式下播放 dash 时 stats 不正确的问题
- fix(avrender): 修复当没有音频帧时 audio source 无法退出
- fix(avcodec): 更新 extradata 时使用准确的编码分辨率
- fix(avplayer): ManagedMediaSource 模式需要设置 disableRemotePlayback 属性,否则无法播放
- fix(avnetwork): FetchIOLoader 修复设置 range.to 无法工作的问题
- fix(avnetwork): seek 判断 pos 是否超过 eofIndex, 超过不合法
v0.9.0
feat:
- refactor(avplayer): 支持无缝循环播放,优化循环播放时闪现黑屏
- chore: 更新 assjs 到 0.1.4 版本
- feat: mp4 drm 文件支持解析和播放
- feat(avplayer): 播放器添加 ended 状态
- feat(avformat): ts 的各个 bsf 兼容一帧跨多个 pes 包的情况
- feat(avformat): mp4 封装支持码流混入新的 sps,支持忽略 encryption,用以支持 mse 切换分辨率和部分 moof 使用 drm
- feat(avformat): aac、mp3、webvtt 支持来自 m3u8 的流式 io
- feat(avprotocol): 播放 m3u8 流的兼容性增强
- feat(avformat): 播放 dash 流的兼容性增强
- feat: ioReader 支持 abort 操作,format 层处理 abort 错误
- feat(avcodec): 新增加一些解码器,用以支持 avi、rm、rmvb、asf、wma、wmv 等封装格式文件的播放
- feat(avnetwork): ioLoader open 方法 range 参数更改为可选,设置读取全部数据的默认值
- feat(avformat): ts 解封装音频包处理 pos 信息
bugfix:
- chore: 修复编译脚本输出 umd 格式有问题
- fix(avformat): fmp4 兼容一个 moof 中多个 trun 的情况
- fix(avplayer): 断网重播时一些异常处理
- fix(avformat): 判断最大分析时长时加上包数量判断,防止 pts 错误导致发分析时长过短的问题
- fix(avformat): ogg opus 将 idPage 写入 extradata
- fix(avplayer): resume 处理 audioContext 的 interrupted 状态
- fix(avcodec): hevc webcodecs 编码器处理 hevc 配置
- fix(avcodecs): FFmpeg 中的 aac profile 为 libmedia 的值减一,需要修正
- fix(avformat): 修复调用 estimateDurationFromPts 之后出现一些重复包的问题
- fix(avplayer): 检查 mse 时处理 avcc 格式和 annexb 格式
- fix(avplayer): onMSESeek 中检查 buffered 状态,没有准备好延时 seek(某些大文件在非多线程 worker 模式下走到 onMSESeek 处 buffered 没有)
- fix(avrender): 优化 render 中 checkFrame 下对 linesize 的判断
v0.8.1
feat:
- feat(avrender): WritableStreamRender 支持旋转和翻转
- feat(avplayer): 支持 WebSocketOptions 传递 WebSocket 参数
- feat(avformat): flv 实现 enhanced-rtmp v2 规范,支持音频编码格式: ac3、eac3、opus、flac;视频编码格式: hevc、vp8、vp9、av1;支持高精度时间戳;支持多轨道;支持 HDR 元数据和声道元数据。规范文档地址: https://veovera.org/docs/enhanced/enhanced-rtmp-v2
- feat(avplayer): 支持不同音频编码格式的音频轨道间进行无感知切换
bugfix:
- fix(avrender): 修复一些 gpu 内存资源的释放问题
- fix(avplayer): mse 模式下没有音频设置 muted 状态防止出现需要交互的错误
- fix(avplayer): 修复自定义 loader 在非多线程 worker 模式下出现一段 0 的脏数据
- fix(avplayer): 修复 mse 模式下只播放视频时,切换到后台视频会积压
- fix(avformat): flv 的 syncTag 方法添加判断 streamId 是否合法来加快分析,防止频繁的来回 seek
- fix(avplayer): mse 模式下音频轨道切换的一些兼容处理
v0.7.0
version 0.7.0:
feat:
- refactor: pointer 到 pointer 使用类型强转
- feat(avcodec): 音频编码器支持使用输入的 AVFrame 的 pts
- feat(dump): 新增 dump AVChannelLayout name
- feat(avplayer): AVPlayer 支持播放视频之后将音视频输出到 MediaStream
- feat(avrender): CanvasImageRender 支持 hdr 渲染
- refactor(avrender, avutil): 重写 image render 支持更多像素格式;重写 AVPixelFormatDescriptor 定义方式并支持更多格式
bugfix:
- fix(avcodec): VideoDecoder safari 17.4 以上不需要手动排序输出帧
- fix(avformat): matroska blockGroup 非关键帧写入 BLOCK_REFERENCE
- fix(avpipeline): 发送 updateCanvas 事件判断 renderRedyed 状态防止多次触发
- fix: 使用 atomics.store 初始化 refCount 内存保证数据一致
- fix(avformat): 处理 mp4 的 mdat box size 超过 32 位的情况
- fix(avcodec): videoFrame.copyTo 是异步的, videoFrame2AVFrame 需要变成异步方法
- fix(avcodec): VideoEncoder 判断 frame.timeBase 是否合法再使用原 pts
- fix(avformat): 修复 mp4 edts box 的 delay 计算 timeBase 错误
- fix(avutil): 处理 AVFrame 和 AudioData 之间转换 pts 不合法的情况
- fix(avplayer): playChannels 超过 maxChannelCount 会无法播放出超出声道的声音,设置 playChannels 最大为 maxChannelCount 让 resampler 做 mix
- fix(avformat): mp4 seek 之后的第一个包应使用 ioReader.seek 来同步位置,防止等待过多的数据缓冲
- fix(avpipeline): 先找 webgpu render,找不到接着找 webgl render
- fix(avnetwork): 再次 readInterval 使用 SafeUint8Array, 防止中途扩堆导致 buffer 不可用
v0.6.0
feat:
- AVStream 的 metadata key 使用枚举,方便外层调用
- 重构 Decoder 和 Encoder 的 open 错误处理方式,将抛出错误改为返回错误码,与 decode 和 encode 方法保持一致
- AVPlayerLoadOptions 新增 isLive 配置可以覆盖 AVPlayerOptions 中的配置
- 添加对 AVFrame SideData 的处理
- 播放器自动检查音视频空帧并跳过
- 优化 mse 播放
bugfix:
- mpegts 修复一些错误码返回不正确
- flv 的 extradata 时间戳使用当前 packet 的时间戳而不是 0
- mse 的一些边界条件判断修正