说明

仅简要说明我的做法。
实际中可能有多种方法,殊途同归。
以下链接均为国外网站地址,建议翻墙。
如有链接暂时失效,建议使用 http://archive.org/web/ 。

测试环境准备

并没有直接采用公司的测试机,而是使用了Docker,轻量级虚拟,适合测试命令行命令,和宿主机系统无关。
测试镜像见docker hub:lgh06/base6-dash,参见博客,或者问我。
镜像内含centos6、ffmpeg的静态可执行文件、gpac(MP4Box)所有源代码及编译所需环境。
以下流程在公司局域网测试机上也测试正常。

FFmpeg

按照官网,依次找到https://ffmpeg.org/download.html 及 https://www.johnvansickle.com/ffmpeg/ ,
选择x86_64 build版本。
然后在/usr/local/bin下 ln -s,创建软连接,以便直接在命令行执行ffmpeg/ffprobe等命令。
ffmpeg的帮助参见官网文档,以及

ffmpeg -h
ffmpeg -h long
man ffmpeg  

这三个命令。

gpac(MP4Box)

gpac中包含多种软件包,没有必要都编译,复杂繁琐。
只需要MP4Box。
按照官网一篇博文, 准备好依赖的环境和源代码之后,执行:

./configure --static-mp4box --use-zlib=no
make -j4
sudo make install

就能正常执行MP4Box命令了,有可能还需要以下三个命令:

make  distclean  
make clean  
yum install glibc-static

执行MP4Box -h查看帮助,或者去官网。

转码及生成mpd文件

ffmpeg转码的重点是视频编码用h264,音频用aac。
另外需要指定关键帧参数,如:
ffmpeg -i frag_bunny.mp4 -x264opts keyint=48:min-keyint=48:no-scenecut new.mp4
由于ffmpeg用法复杂,可能有相似的命令完成同样的结果。
实际测试现有手机端的MP4均已经有了关键帧参数,可以跳过这一步。
但是手机端MP4码率/清晰度不高,电脑端可能仍需转码高清MP4.

生成mpd文件,用如下命令:

MP4Box -dash 1000 new.mp4  

这样会新生成一个mpd文件和一个新的mp4文件。

文件切片、码率自适应等,执行MP4Box -h dash查看帮助,另外参见:

https://gpac.wp.mines-telecom.fr/mp4box/
https://gpac.wp.mines-telecom.fr/mp4box/mp4box-documentation/
https://gpac.wp.mines-telecom.fr/mp4box/dash/
https://gpac.wp.mines-telecom.fr/2011/02/02/mp4box-fragmentation-segmentation-splitting-and-interleaving/
https://gpac.wp.mines-telecom.fr/2012/02/01/dash-support/

(MP4Box的官网文档混乱,文章里面可能有很重要的链接,一定要通读全文,链接也要点进去看)

shaka-player播放(客户端,不用在服务器上)

下载源码, 按照欢迎页的说明, 准备好可用的shaka-player的js文件。
按照基础用法的说明,
新建html、js,拷贝上一步生成的mpd及mp4文件, 启动nginx或者http-server, 即可正常播放。

其他问题

Nginx跨域: 参见:

https://gist.github.com/lgh06/bf699ee216f7e38b67b0e571b41bd473
https://github.com/Bilibili/flv.js/blob/master/docs/cors.md