使用nginx或JW Player外部挂载的方式实现视频流服务
如果在Django项目中直接添加链接指向视频文件是不能够播放的,原因是播放视频文件需要视频流
以下介绍两种方法来实现视频流
1.通过nginx播放本地视频
修改/etc/nginx/nginx.conf
,添加以下内容
http {
#***** 视频流配置内容 *****
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
output_buffers 1 32k;
postpone_output 1460;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
open_file_cache max=64 inactive=30d;
open_file_cache_min_uses 1;
open_file_cache_valid 3m;
#***** 视频流配置内容 *****
server {
listen 12345;
server _;
...
# 添加mp4文件的路由
location ~ /.mp4$ {
root /usr/share/nginx/html; # 这里使用了CentOS中nginx默认的根地址
}
...
}
}
此时将视频文件(mp4,其他格式的话修改上面location的内容)放入/usr/share/nginx/html
中,在浏览器输入地址http://ip:12345/your.mp4
就可以观看视频
不过nginx的播放器性能一般,下面介绍一种更优化的方式
2.使用JWPlayer嵌入视频
JW Player提供视频托管服务。可以通过在前端页面引用JW Player的配置来实现视频流;或将视频上传到JW Player的服务器,它会生成视频链接,直接嵌入到页面中就能够实现视频流,目前JW Player提供免费版
以Django页面为例,介绍两种通过JW Player嵌入视频的方式
1.播放本地视频
注册JW Player账号后,会拥有一个自己的Cloud Player Library Url
,可以在这里看到
将这个Url添加到html文件的head中,像这样:
<script type="text/javascript" src="https://cdn.jwplayer.com/libraries/xxxxxx.js"></script>
再根据官方示例,将下面的代码添加到body中
<div id="myElement"></div>
<script type="text/JavaScript">
jwplayer("myElement").setup({
"playlist": [{
"file": "/static/your.mp4" // 指定视频文件位置
}]
});
</script>
像上面的方法是将视频文件当作静态文件来加载,这样可以实现播放功能,但每次都会将视频完整地加载出来,非常不优雅
另一种方法是将本地视频也指定一个Url,比如第一节中在nginx里面配置的的http://ip:12345/your.mp4
<div id="myElement"></div>
<script type="text/JavaScript">
jwplayer("myElement").setup({
"playlist": [{
"file": "http://ip:12345/your.mp4" // 指定视频的url
}]
});
</script>
这样就可以实现流式加载
2.将视频上传到JW Player
在JW Player的Dashboard中可以将视频上传。完成后点击EMBED
就会生成类似下面的嵌入html的代码,将其复制到自己的页面中就可以播放视频(注意这种方法不需要在head中引用jwplayer的js)
<div itemscope itemtype="https://schema.org/VideoObject">
<meta itemprop="uploadDate" content="Thu Oct 15 2020 11:21:56 GMT+0800 (China Standard Time)"/>
<meta itemprop="name" content="video"/>
<meta itemprop="duration" content="PT3M1.697S" />
<meta itemprop="thumbnailUrl" content="https://content.jwplatform.com/thumbs/your_own.jpg"/>
<meta itemprop="contentUrl" content="https://content.jwplatform.com/videos/your_own.mp4"/>
<script src="https://cdn.jwplayer.com/players/your_own.js"></script>
</div>