nginx播放ts格式视频
开头解决方案
Nginx可以作为高效的流媒体服务器,用于播放TS(MPEG-TS)格式的视频。最简单的方法是通过Nginx的http模块直接提供TS文件下载/播放支持。更专业的方案是使用Nginx结合第三方模块实现HLS(HTTP Live Streaming)协议支持,为TS视频提供更好的播放体验。
1. 直接发布TS文件
这是最简单的方案,只需要配置Nginx基本的静态文件服务功能:
nginx
server {
listen 80;
server_name video.example.com;</p>
<pre><code>location /video/ {
alias /path/to/ts/files/;
# 允许跨域请求
add_header 'Access-Control-Allow-Origin' '*';
# 设置缓存策略
expires max;
# 防盗链设置
valid_referers none blocked *.example.com;
if ($invalid_referer) {
return 403;
}
}
}
优点:
- 配置简单
- 资源消耗少
- 适合小文件分发
缺点:
- 缺乏流媒体特性
- 不支持断点续播
- 播放体验一般
2. 使用HLS协议播放
对于需要更好播放体验的场景,建议使用HLS协议。这需要安装额外的nginx-module-hls模块。
nginx
http {
...
hls on;
hls<em>path /tmp/hls;
hls</em>fragment 5s;
}</p>
<p>server {
listen 80;
server_name hls.example.com;</p>
<pre><code>location /hls/ {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp;
add_header Cache-Control no-cache;
add_header Access-Control-Allow-Origin *;
}
}
优点:
- 支持断点续播
- 自适应码率
- 多设备兼容
- 流畅度高
缺点:
- 需要额外处理m3u8索引文件
- 占用更多存储空间
3. 结合FFmpeg实时转码
如果需要动态生成TS流,可以配合FFmpeg使用:
bash
ffmpeg -re -i input.mp4
-c:v libx264 -profile:v baseline -b:v 500k
-c:a aac -b:a 128k
-f hls -hls_time 10 -hls_list_size 3
http://localhost/hls/stream.m3u8
这种方案特别适合直播场景或需要对视频进行实时处理的情况。
根据实际需求选择合适的方案。如果是简单的点播服务,直接发布TS文件即可;如果是直播或需要更好播放体验,则推荐使用HLS协议;而对于需要实时处理的场景,则可以考虑FFmpeg+HLS的组合方案。