我们经常需要在网站上嵌入视频,在 Ktor 的框架内,要支持视频也是非常容易的事情了,主要的麻烦在于浏览器的兼容。我们从最简单的代码开始:
<!DOCTYPE HTML>
<html><body>
<video src="upload/sample.mp4" width="80%" controls="controls"></video>
</body></html>
初看这代码没有任何问题,但是放到 Safari 下是不工作的,会出现以下的画面:
播放异常但是用 Chrome 播放却是好的,那问题出在哪里呢?这一篇很好的解答了(点击查看)。
所以,说到底就是一个服务端支持断点续传的问题,你或许可以找到其他的解决方案,比如说这种:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.mp4</url-pattern>
</servlet-mapping>
这个方法在 Servlet 上的确是简单粗暴且有效的,但是在 Ktor 上,改了 web.xml
框架会直教你做人,所以不能这么改(感兴趣的可以自己改改体会一下效果)。
那么 Ktor 下要如何实现呢?这会归功于它非常强大的插件系统,总之记得一句话,你需要的功能 99% 在插件里,插上就完事。于是代码就来了:
fun Application.installVideo() {
install(PartialContent) { }
install(Compression) {
default()
excludeContentType(ContentType.Video.Any)
}
}
同时支持分段传输以及压缩传输,此时再运行服务器并请求视频,就可以正常播放了,无论是 Safari 还是其他浏览器,都行。
网友评论