mp4解码介绍

MP4 2进制解码,历史有很多大能都已经给出了最优的方案了。

转载: mp4文件格式解析(一)_可下人间_新浪博客

mp4文件格式解析(二)_可下人间_新浪博客

mp4文件格式解析(三)_可下人间_新浪博客

mp4文件格式解析(四)_可下人间_新浪博客

查看mp4内部盒子的解码器

mp4Explorer       MP4Reader

或者线上解码  

Online MPEG4 Parser

辅助 ascii 编码

ASCII编码转换,ASCII码在线查询工具

进制转换

在线进制转换

初始的盒子解码。

aipaiVideoDataMain.js

加载本地Mp4

我这里使用的是fetch  使用Chrome 里面机制里面的每节的buffer 返回。(辣鸡火狐没有这个机制)

每次返回的buffer 的数据都在 ChunkData 里面。

解析每个chunkBuffer 数据都存起来。

开始时候每个mp4都必须先解析视频头文件数据,才能进行解码。

正常的mp4盒子 是有 moov 总盒子和mdat 数据盒子。

Ftyp: 正常是存在的,free 可能有可能没有。

Ftyp: 盒子是一定是32字节。然后这个没有什么用。

Free: 没有用

Moov :属于记录  视频的全部信息。

           Mvhd : 属于视频的总时长获取数据。Timescale  是每秒单位数量  Duration 是总时 长。video 的盒子一般会和视频长度相等,声音会略短

            Trak  分别是  video 和 audio 的区分。一般是 video 在前面。

                    Tkhd 是这个trak 的总时长,如果是video 的会有视频的宽高信息。

                    Mdia 是里面的盒子的详细信息。、

                               Mdhd timeScale   在里面是一秒有30单位 Duration

                                Hdlr    是用来区分这个trak盒子是哪种类型的。视频盒子为vide 声音盒子 为 soun。

                                Minf

                                        Stbl 主要用到这个盒子。其他盒子需要单独去看那个盒子的特俗功能一般 用不了其他盒子。

                                         Stsd 这个是记录视频的视频的 code 一般在video 盒子里面。

                                         Stts  这个是一个总的sample 数量 和每个单位时间占的sample 数  量级别

                                         Stss  这个是关键帧数据  计算时间为

                 当前point /( mdhd盒子的timeScale /stts的Smaple delta)

                                         Stsc  sample在同一个时间戳下会连续有几个smaple。

                                         Stsz  每个sample的大小

                                         Stco 属于每个时间戳下的sample的开始偏移量

                                         Ctts 属于每个时间戳下的cts 偏移量,如果发现视频声音不同步都属 于偏移量的问题。

按照上面博客里面介绍的box 盒子的分布。除了个别特殊的盒子。其他盒子都是 盒子长度+盒子名字+盒子数据。

所以单独弄成了解析

在刚开始获取数据时候会不停的检测盒子是否进入 mdat 情况。

里面会解析盒子的数据。

在trakBox.js里面。

在ffmprg 里面 数据是一截截的。所以我把 数据按照 一个关键帧来分开。

在card.mp4里面

120 个 sample 为一个视频数据。

大部分声音的trak box 里面是没有stss 关键帧的盒子。所以 声音数据切割时候也要按照视频关键帧来分布声音。不然在mse 的机制里面会报错。

在这里我是用每个sample 占领的时间戳来计算关键帧的数量,然后分布的置入数据。

在keyOffsetData() 方法里面了解。

其中 sps 的 和B站那里搬过来用的。具体可以去独立解码 这里会很复杂。视频的很多基础信息都在里面。 而我需要的只有里面的 video code 和 audio code .

当到达mdat 盒子时候。就开始初始化 mediaSource。

如果你是ts 直接分开的就不需要创建2个mediaSourceBuffer.

然后开始遍历之前的保存 buffer数据。

然后开始appendSegments ();

按照关键帧顺序置入到mediaSourceBuffer里面。Video 和 audio 要分开置入。 video 和 audio 的mediaSourceBuffer 置入。在控制台那里就会有缓存显示。

对应深度学习 做出rtsp 转码在chrome 播放  跳转链接如下

rtsp无插件网页播放_lazy_余的博客-CSDN博客日新月异的中国,随着经济发展,视频服务越来越多。flash的没落,和各种浏览器CHROME、360浏览器,QQ浏览器等,国产浏览器需要选择“极速模式”,反正最新的就好了。代替品的上线使用。经过测试显示,内网的链接速度比VLC还要快,查看测试图片,画面质量没有多大区别,没有花屏的现象。经测试 I5 8代笔记本 一路1920*1080摄像机占用CPU大约2%左右。可支持同路摄像机多打开情况。打开同路摄像机不新增cpu消耗。可支持ONVIF 控制摄像机,测试机大华,华为,海康摄像机,测试使https://blog.csdn.net/yu305306/article/details/123333681?spm=1001.2014.3001.5502

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值