让我说我有这个视频网址:http://www.quirksmode.org/html5/videos/big_buck_bunny.mp4 我需要从这个视频中下载一个小的可播放片段(例如00:24 - 00:30)。
我应该如何在java中执行此操作?而且我不想下载整个视频然后剪切它。
我已经查看了chrome的网络选项卡,并阅读了请求和响应标题但是对它没有多大意义,除了:
但我不能只选择任何范围,因为它会使视频无法正常播放?
那么,如果我点击00:24,浏览器如何知道应该获得哪个范围?
答案 0 :(得分:1)
假设您正在使用.mp4容器,
mp4文件格式包含'框的分层结构。 (又名"原子')。快速寻找的魔力在于moov
原子,这就是为什么在为网络编码视频时,最好优化文件结构并将其重新定位到前端,以便浏览器可以访问元数据是它下载的第一件事。
moov
电影框是所有元数据的容器
每个moov都有一个mvhd(电影标题框)
它可以包含N trak
个框。每个trak
框都包含媒体特定的元数据信息通常,它将包含2个曲目(视频和音频)
更重要的是,它包含样本信息,如stsd,stts,stsz stsc,stco等......
stts
- 采样时间(stts)框。
此框包含每个帧的时间(以紧凑的方式)。从这里你可以找到' chunk'包含使用Sample-to-Chunk(stsc)原子的帧。最后,Chunk offset atom(stco)为您提供文件中的字节偏移量。
像Here或MP4Parser这样的项目可以帮助您自己开始处理MP4容器(在阅读基础MP4结构时有样本),但这不是一项微不足道的工作 - 遗憾的是那里似乎不是一个全面的Java MP4 API工具包