Nginx 搭建DASH服务器


(图1.players.akamai)

好久没有写博客了,新年这几天也一直荒废,最近开始准备毕业设计,需要用到DASH来做动态码率传输。至于什么是DASH,这里不再赘述,可以参考Dash相关领域知识总结,再给一个DASH播放器akamai,方便大家直观地感受下DASH。本文要分享的内容为搭建一个自己的DASH服务器,内容比较简单,主要涉及一些工具的使用。


使用FFMpeg获得不同分辨率视频

首先是ffmpeg的安装,可以参考我之前的博客,Linux 下ffmpeg的安装 。推荐使用安装包的形式,自己源码编译可能耗时较久,而且会遇上各种依赖问题。

安装好ffmpeg后,我们便可以使用该工具对原始视频进行处理,以得到不同分辨率和码率的视频。这也是DASH的最intuitional最精华的思想所在,针对不同的网络状况,选择最合适的视频,达到较好的播放效果,至于如何选择,这个是自适应算法的话题了,这里暂且不表。

ffmpeg -i panda.mp4 -s 320x180 -c:v libx264 -b:v 500k -g 90 -an panda_video_320x180_500k.mp4

使用上面这条命令对原始视频进行处理,其中涉及好几个参数,解释一下:

参数 含义
-i 表示输入的文件
-s 使用的帧大小
-c:v 使用的codec(不知道怎么翻译,大概是编码器的意思)
-b:v 使用的码率
-g 图像组大小(GOP length)
-an 记成audio no吧,不要编码audio

以上命令参考了Making Your Own Simple MPEG-DASH Server 得到第一个视频后,“依葫芦画瓢”,改变参数,得到剩下的几个视频。

这是供参考的参数设置:

ffmpeg -i panda.mp4 -s 320x180 -c:v libx264 -b:v 500k -g 90 -an panda_video_320x180_500k.mp4
ffmpeg -i panda.mp4 -s 640x360 -c:v libx264 -b:v 750k -g 90 -an panda_video_640x360_750k.mp4
ffmpeg -i panda.mp4 -s 640x360 -c:v libx264 -b:v 1000k -g 90 -an panda_video_640x360_1000k.mp4
ffmpeg -i panda.mp4 -s 1280x720 -c:v libx264 -b:v 1500k -g 90 -an panda_video_1280x720_1500k.mp4

注意到我们只编码了视频,而没有编码音频,这是因为在DASH中我们需要将音视频分开进行处理。所以下一步就是音频处理,仍然是用ffmpeg

ffmpeg -i panda.mp4 -c:a aac -b:a 128k -vn panda_audio_128k.mp4
解释下各个参数

参数 含义
-i 表示输入的文件
-c:a 使用的codec
-b:a 使用的码率
-vn 记成video no吧,不要编码video

敲了这么多命令,终于完成了第一步(其实完全可以写个shell脚本来完成),接着进行下一步。


使用mp4dash生成dash切片及mpd文件

这里我最先参考了Making Your Own Simple MPEG-DASH Server 中的做法,用mp4box来作切片,这个工具自己之前用过,不陌生。把mp4box处理得到的文件传到服务器后,满怀期待打开播放器,放不出来,控制台看看错误,

“Failed to load http://**/manifest.mpd: No ‘Access-Control-Allow-Origin’ header is present on the requested “.

然后各种搜索,按照提示在Nginx配置中添加了CORS支持还是不行,无奈换用另外一个工具bento4的mp4dash.

先在官网 下载bento4,Linux有编译好的供下载,当然也可以下载源码自己编译。这里我们选择编译好的版本。

下载好后我们需要用到的两个小工具都在

/your_bento4_dir/bin

中,一个是mp4fragment,另外一个就是mp4dash了。使用的方法是先用mp4fragment来将视频fragment(怎么知道自己的视频是否已经fragment处理?运行mp4dash来处理视频,如果没有的话,会提示),然后用mp4dash来进行下一步处理,直接放官网的说明吧

Once you have fragmented MP4 files to work with as input, you can generate a DASH presentation, including an MPD and media files or media segments. For single-bitrate streaming, a single MP4 file is required. For multi-bitrate streaming, you will need a set of MP4 files that have been encoded with closed GOPs (Group Of Pictures) with equal durations. Also, the audio tracks in all the files should be encoded with the same parameters. Once you have your input files, you can use the mp4dash tool to automatically generate the DASH MPD and optionally split the MP4 file into individual file segments.

最后一句话最关键,大概意思就是把之前那些文件全部交给mp4dash,它自动帮你把剩下的活儿全干了,超贴心。

mp4dash命令大概是这样的:

mp4dash panda_1280x720_1500k_f.mp4 panda_640x360_750k_f.mp4 panda_640x360_1000k_f.mp4 panda_320x180_500k_f.mp4 panda_audio_128k_f.mp4

使用默认参数就可以了。

然后在output文件夹中,生成了

audio
stream.mpd
video

下一步要做的工作就是把这些东西全部上传到服务器中。


上传文件至服务器

在完成了上面的工作后,使用ftp工具将生成的文件上传到web服务器的根目录中(就是放index.html的那个地方),打开播放器,填好mpd文件的位置,点击“load”,

(图2:播放测试)

视频正常播放,图片2下方的曲线显示视频buffer大小随着视频码率变化的情况。


“紫薇,等等”

就在我点击保存,准备发布这篇博客的时候,我发现我漏掉了重要的一点,那就是我其实是修改过nginx的配置的,如果不修改配置的话,会怎么样呢?

于是

mv /usr/local/nginx/conf/nginx.conf nginx_backup2.conf #把现在用的配置备份
mv /usr/local/nginx/conf/nginx_backup.conf nginx.conf #把原来的备份还原

然后

nginx -t #检查配置
nginx -s reload #重载配置

再次尝试播放,

“Failed to load http://**/video/video/avc1/1/init.mp4: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://players.akamai.com’ is therefore not allowed access.”

无法正常播放,所以是需要这个配置的,具体是在你的nginx配置文件中添加

location /
{
add_header Access-Control-Allow-Methods “GET,OPTIONS,POST,HEAD,P UT,DELETE”;
add_header Accept-Ranges “bytes”;
add_header Access-Control-Allow-Origin “*”;
add_header Access-Control-Expose-Headers “Content-Lengrh,Content -Range,Date,Server,Transfer-Encoding,origin,range,x-goog-meta-foo1”;
}

其他web服务器的设置可能会差异,具体可以参考HTTP访问控制(CORS)

具体是怎么回事大家可以看看参考链接中的解释,才疏学浅,我就不展开了(捂脸,我不是个好博主)。

reference

1.Dash相关领域知识总结
2.Linux 下ffmpeg的安装
3.Making Your Own Simple MPEG-DASH Server
4.mp4dash
5.HTTP访问控制(CORS)
5 6.panda 视频:密码: cp92

Nginx 搭建DASH服务器相关推荐

  1. 使用 Nginx 搭建图片服务器

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者 | ITDragon龙 链接 | cnblogs.com/i ...

  2. Nginx 搭建图片服务器

    本章内容通过Nginx 和 FTP 搭建图片服务器.在学习本章内容前,请确保您的Linux 系统已经安装了Nginx和Vsftpd. Nginx 安装 http://www.cnblogs.com/i ...

  3. Nginx搭建RTMP服务器+FFmpeg实现海康威视摄像头预览

    场景 Windows上搭建Nginx RTMP服务器并使用FFmpeg实现本地视频推流: Windows上搭建Nginx RTMP服务器并使用FFmpeg实现本地视频推流_BADAO_LIUMANG_ ...

  4. 使用Nginx搭建直播服务器(nginx-rtmp-module)

    使用Nginx搭建直播服务器 1 简介 2 RTMP Module 3 gcc 4 OpenSSL 5 g++ 6 pcre 7 zlib 8 安装nginx 9 配置文件 10 systemctl ...

  5. nginx视频在线播服务器,Windows环境上用jwplayer+Nginx搭建视频点播服务器

    Windows环境下用jwplayer+Nginx搭建视频点播服务器 flv 视频可以采用两种方式发布: 一.普通的 HTTP 下载方式 二.基于 Flash Media Server 或 Red5  ...

  6. nginx搭建rtmp服务器

    目录 前言 一.nginx是什么? 二.环境准备 1.系统版本 2.nginx版本 三.搭建过程 1.安装编译 nginx 所需要的库 2.下载 nginx-1.21.6.tar.gz 3.下载 ng ...

  7. 在Ubuntu系统使用Nginx搭建RTMP服务器

    在Ubuntu系统使用Nginx搭建RTMP服务器 参考链接:nginx搭建rtmp服务器 简介 本文简单记录了在Ubuntu18.04系统上使用nginx搭建RTMP服务器的方法. 安装 下载ngi ...

  8. Linux - nginx 搭建 Web服务器

    前言 在之前,已经对 nginx 有过基本的介绍. 现在尝试利用 nginx 来 搭建一个 web服务器. 正文 1.什么是 Web 服务器? Web服务器也称为WWW (WORLD WIDE WEB ...

  9. Ubuntu Nginx 搭建文件下载服务器

    Ubuntu Nginx 搭建文件下载服务器 root@tencent:~# cat /etc/issue Ubuntu 20.04 LTS \n \l # apt -y install nginx ...

最新文章

  1. 逻辑回归,朴素贝叶斯,KMeans,决策树的不足和优势
  2. preact源码学习(2)
  3. 双缝干涉试验为什么恐怖?
  4. python logging模块的作用_【python】【logging】python日志模块logging常用功能
  5. java字节码反编译_javap 反编译 java 字节码文件
  6. 2017.3.5 yveh测试
  7. 在eclipse中配置server和database
  8. Alter table alter |change |modify 区别
  9. python链家爬虫
  10. 《代码整洁之道》--读书笔记
  11. 杂凑算法md5c语言代码,MD5杂凑算法
  12. android颜色透明度换算详解
  13. 关于英语猜词义的方法
  14. vue二级路由不显示页面bug
  15. 使用requests爬虫制作自己的天气预报“Api”
  16. 4k电视接电脑鼠标延迟解决
  17. ajax获取的数据中包含html代码,执行ajax返回数据中包含的script脚本代码
  18. 自己写的wow菜鸟指南
  19. Compass用法指南
  20. Linux Weblogic 10.3.6安装和漏洞补丁过程

热门文章

  1. free(): invalid next size (fast):错误及解决方案
  2. 上海居住证积分办理攻略,太容易了,快来收藏!!!
  3. 浅谈java的反射机制
  4. Maven projects need to be imported!
  5. CSS层级小技巧!如何在滚动时自动添加头部阴影?
  6. 数字驱动,智能发展 | 的卢深视三维全栈技术亮相宁波智博会
  7. 未来的计算机漫画,漫画电脑
  8. 关于数据库的操作语句
  9. 大数据告诉你:2018年该学习什么技术
  10. mysql中phpmyadmin安装教程_怎么安装phpMyAdmin?