@爱特,因为浏览器确实不支持MKV封装啊
视频链接
@胡椒舰长,h.265是视频数据的格式,视频数据要和音频数据交织在一起,保存在一个文件里,才能拿来发给别人。单独的视频和音频裸数据流确实也可以逐字节保存成文件,但是视频和音频就只能分开保存了,用起来不方便。所以网上流传的一般都是封装好的视频文件。
mp4(实际名称是“ISO Base Media File Format”,ISO基础媒体文件格式,ISO 14496-12)就是这样一种可以封装视频和音频流的文件格式。
mkv(Matroska)是另一种封装文件格式。
两者都可以封装h.265,并且可以是完全相同的h.265流。用ffmpeg命令的-codec copy指令就能实现转封装:
-codec copy
ffmpeg -i my.mp4 -codec copy my.mkv ffmpeg -i my.mkv -codec copy my2.mp4
但是,如果某个程序不支持某种封装格式,就没办法把视频和音频流从封装中提取出来,就算里面封装的是它支持的H.264,它也无法播放。
Mozilla 维护了一个详尽的音视频编解码器和容器文件格式文档: https://developer.mozilla.org/zh-CN/docs/Web/Media/Formats/Video_codecs
所以,浏览器要实现mkv播放,就必须加载一个解封装用的js(浏览器必须支持媒体源扩展,否则也没用)。flv有这样的js(B站开发的flv.js),所以现在可以在虎绿林播放。
@爱特,@胡椒舰长,这里说webm格式是MKV格式的子集,所有有可能可以通过把MIME类型设为video/webm来实现播放。我试试。
https://github.com/videojs/video.js/issues/5910
@爱特,因为webm格式是MKV格式的子集,所以你下载下来的格式应该是webm,当然从逻辑上来说它也是mkv,但是两者的MIME类型不同,浏览器只识别video/webm。
video/webm
@爱特,把你的视频扩展名修改为.webm重新上传,确实可以播放。我会修改上传代码,把webm视为视频流,并且给mkv自动添加扩展名.webm。 @胡椒舰长
@爱特,你看看Youtube的HTTP请求,视频文件的Content-Type应该是video/webm。
Content-Type
同一个视频文件 content-type: video/x-matroska,不能播放 content-type: video/webm,可以播放
有什么区别? webm一定是mkv,mkv不一定是webm,使用了没有包含进webm标准里的功能和视频音频编码,就不是webm。
所以,浏览器应该能够播放使用H.264/VP8/VP9/AV1视频编码、WAV/MP3/AAC/Ogg Vorbis音频编码的MKV,只要假装它是webm即可。 但是,这种假装必须在服务器端完成,因为要设置MIME类型为video/webm。 鉴于阿里云OSS根据文件扩展名自动选择MIME类型,所以最简单的兼容方案是上传时在原始文件名后面附加扩展名.webm。
@爱特,@胡椒舰长,图文快贴和附件上传已经支持webm和mkv在线播放,mkv会被伪装成webm。
@胡椒舰长,虎绿林没有重载播放器控件,所以播放器控件是你的浏览器自己提供的。
@爱特,因为浏览器确实不支持MKV封装啊
视频链接
@胡椒舰长,h.265是视频数据的格式,视频数据要和音频数据交织在一起,保存在一个文件里,才能拿来发给别人。单独的视频和音频裸数据流确实也可以逐字节保存成文件,但是视频和音频就只能分开保存了,用起来不方便。所以网上流传的一般都是封装好的视频文件。
mp4(实际名称是“ISO Base Media File Format”,ISO基础媒体文件格式,ISO 14496-12)就是这样一种可以封装视频和音频流的文件格式。
mkv(Matroska)是另一种封装文件格式。
两者都可以封装h.265,并且可以是完全相同的h.265流。用ffmpeg命令的
-codec copy
指令就能实现转封装:但是,如果某个程序不支持某种封装格式,就没办法把视频和音频流从封装中提取出来,就算里面封装的是它支持的H.264,它也无法播放。
Mozilla 维护了一个详尽的音视频编解码器和容器文件格式文档:
https://developer.mozilla.org/zh-CN/docs/Web/Media/Formats/Video_codecs
所以,浏览器要实现mkv播放,就必须加载一个解封装用的js(浏览器必须支持媒体源扩展,否则也没用)。flv有这样的js(B站开发的flv.js),所以现在可以在虎绿林播放。
@爱特,@胡椒舰长,这里说webm格式是MKV格式的子集,所有有可能可以通过把MIME类型设为video/webm来实现播放。我试试。
https://github.com/videojs/video.js/issues/5910
@爱特,因为webm格式是MKV格式的子集,所以你下载下来的格式应该是webm,当然从逻辑上来说它也是mkv,但是两者的MIME类型不同,浏览器只识别
video/webm
。视频链接
我是晨曦,我喂自己袋盐!
@爱特,把你的视频扩展名修改为.webm重新上传,确实可以播放。我会修改上传代码,把webm视为视频流,并且给mkv自动添加扩展名.webm。
@胡椒舰长
@爱特,你看看Youtube的HTTP请求,视频文件的
Content-Type
应该是video/webm
。同一个视频文件
content-type: video/x-matroska,不能播放
content-type: video/webm,可以播放
有什么区别?
webm一定是mkv,mkv不一定是webm,使用了没有包含进webm标准里的功能和视频音频编码,就不是webm。
所以,浏览器应该能够播放使用H.264/VP8/VP9/AV1视频编码、WAV/MP3/AAC/Ogg Vorbis音频编码的MKV,只要假装它是webm即可。
但是,这种假装必须在服务器端完成,因为要设置MIME类型为
video/webm
。鉴于阿里云OSS根据文件扩展名自动选择MIME类型,所以最简单的兼容方案是上传时在原始文件名后面附加扩展名.webm。
@爱特,@胡椒舰长,图文快贴和附件上传已经支持webm和mkv在线播放,mkv会被伪装成webm。
视频链接
视频链接
正在检查更新
版本 100.0.4896.127(正式版本) (arm64)
@胡椒舰长,虎绿林没有重载播放器控件,所以播放器控件是你的浏览器自己提供的。