Maarten Asked: 2022-11-18 02:30:08 +0800 CST2022-11-18 02:30:08 +0800 CST 2022-11-18 02:30:08 +0800 CST 是什么让 MP4 可以流式传输? 772 我正在深入研究 Telegram bot API,它显示了以下选项sendVideo: supports_streaming 布尔值 可选 如果上传的视频适合流式传输,则通过 True 这表明有些 MPEG-4 视频文件适合流式传输,有些则不适合。有什么区别?如何确保我的视频文件“适合流式传输”? streaming 1 个回答 Voted Best Answer user1686 2022-11-18T02:55:46+08:002022-11-18T02:55:46+08:00 据我所知,MP4 容器文件的元数据(音频/视频轨道、编解码器信息)可能位于实际数据之前的文件开头或末尾。如果元数据放在末尾,则播放器在下载整个内容之前无法解码视频流(除非它可以搜索文件,例如使用 HTTP 范围请求是可能的)。 例如,这个文件有mdatbefore moov,所以它不能按原样流式传输: $ atomicparsley foo.mp4 -T Atom ftyp @ 0 of size: 32, ends @ 32 Atom free @ 32 of size: 8, ends @ 40 Atom mdat @ 40 of size: 3280091, ends @ 3280131 Atom moov @ 3280131 of size: 139261, ends @ 3419392 Atom mvhd @ 3280139 of size: 108, ends @ 3280247 Atom trak @ 3280247 of size: 57400, ends @ 3337647 Atom tkhd @ 3280255 of size: 92, ends @ 3280347 ... Atom trak @ 3337647 of size: 81158, ends @ 3418805 Atom tkhd @ 3337655 of size: 92, ends @ 3337747 ... 参见例如FFMPEG“faststart”文章。 此外(正如我刚刚发现的那样),音轨数据可以与视频数据交错,也可以不交错。如果由于某种原因没有交错,播放器在开始接收视频数据之前再次需要等待整个音频流被下载(同样除非它可以向后/向前搜索)。 另请参见分段、分割、分裂和交织。
据我所知,MP4 容器文件的元数据(音频/视频轨道、编解码器信息)可能位于实际数据之前的文件开头或末尾。如果元数据放在末尾,则播放器在下载整个内容之前无法解码视频流(除非它可以搜索文件,例如使用 HTTP 范围请求是可能的)。
例如,这个文件有
mdat
beforemoov
,所以它不能按原样流式传输:参见例如FFMPEG“faststart”文章。
此外(正如我刚刚发现的那样),音轨数据可以与视频数据交错,也可以不交错。如果由于某种原因没有交错,播放器在开始接收视频数据之前再次需要等待整个音频流被下载(同样除非它可以向后/向前搜索)。
另请参见分段、分割、分裂和交织。