Ste*_*ota 5 javascript video angular
我的问题是 JavaScript 报告了一个特定mp4文件的错误宽度和高度。
这是我用来找出视频宽度和高度(简化)的代码:
// loadedmetadata event of video element
onLoadedMetadata(event) {
videoWidth = event.srcElement.videoWidth;
videoHeight = event.srcElement.videoHeight;
}
Run Code Online (Sandbox Code Playgroud)
我不确定文件的元数据是否有问题,但它变得更有趣:
这是我创建的快速演示(此代码可以正确识别我尝试过的所有视频的宽度和高度,除了这个):
https://stackblitz.com/edit/angular-7ooyic
在这里,您可以下载导致问题的视频文件:
https://share.getcloudapp.com/Jru70Lgl
在此先感谢您对解决这个谜团的任何帮助!
UNIX 系统正确识别宽度和高度 (607x1080)
Windows 错误识别宽度和高度 (1080x1080)
你准备好了吗?两者都是正确的,一种是错误的,取决于你对礼与错的定义。
运行这个命令:
MP4Box -diso -std ezpz-Retargeting-Stories-Tiny-Cup_Spoon.mp4 2>&1 | less
你会看见:
<TrackHeaderBox CreationTime="3662746977" ModificationTime="3662746977" TrackID="1" Duration="20020" Width="607.50" Height="1080.00">
和
<AVCSampleEntryBox DataReferenceIndex="1" Width="1080" Height="1080" XDPI="4718592" YDPI="4718592" BitDepth="24">
你看,有编解码器和容器。把它想象成一封信和一个信封。信封内可包含多封信件。信封外面可能有一个地址,但当你打开它时,信件有一个不同的地址。
MP4 是一个可以包含多个字母的信封。例如,它可能有音轨、视频轨、文本轨、数据轨等。它们是独立的东西,但它们组合成同一个文件(信封)。
在本例中,容器 (mp4/envelope) 表示分辨率为607.5x1080( TrackHeaderBox)。但是(编解码器)里面的字母说分辨率是1080x1080(AVCSampleEntryBox)。那么哪个是正确的呢?
Windows(正确)将宽度和高度识别为 1080x1080(根据编解码器),UNIX(正确)将宽度和高度识别为 607x1080(根据容器)。区别在于,当您遇到相互矛盾的信息时,您希望相信什么是事实来源。
在这种具体情况下,我个人认为 Windows 比 Unix 更正确,因为解码器是比渲染阶段更好的事实来源。
太长了。文件坏了。修复文件,使编解码器和容器匹配。欢迎观看互联网视频!
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |