树莓派motionEye录制视频嵌入HTML无法播放,求解决方法
我来帮你搞定这个视频播放的坑!结合你提到的Chrome灰屏、Firefox提示MIME兼容的情况,再加上motionEye的编码信息,主要问题大概率出在路径配置错误、服务器MIME类型未正确设置或者视频编码兼容性这几个方面,咱们一步步排查解决:
1. 先排查最容易踩的坑:HTML里的视频路径错了
你说网页和视频在树莓派的同一目录?不对哦——网页里的src路径是相对于web服务器的根目录,不是你系统里的文件目录!
比如你用Python的http.server启动时,如果你在/home/pi/Desktop/目录下启动,那服务器根目录就是/home/pi/Desktop/,这时候HTML里的视频路径应该写成:
<video style="width: 23%; height: 23%; margin-right: 5%; margin-left: 5%; margin-bottom: 5%;" controls> <source src="video/2018-05-26/14-27-06.mp4" type="video/mp4"> </video>
而不是你原来写的绝对路径/home/pi/Desktop/video/...——浏览器会把这个当成域名根目录下的路径,自然找不到文件,导致灰屏或报错。
2. 修复服务器的MIME类型配置
Firefox提示MIME兼容性,说明你的web服务器没有给MP4文件返回正确的video/mp4类型标识,浏览器识别不了视频格式。
如果用Python简易HTTP服务器:
- 在服务器根目录创建一个
mime.types文件,内容写:video/mp4 mp4 - 然后用这个文件启动服务器:
python3 -m http.server --mime-types mime.types
如果用Nginx:
打开nginx.conf,在http块里添加MIME映射:
types { video/mp4 mp4; }
重启Nginx生效:sudo systemctl restart nginx
如果用Apache:
在网站根目录的.htaccess文件里添加:
AddType video/mp4 .mp4
或者在Apache主配置文件里添加同样的内容,重启Apache:sudo systemctl restart apache2
3. 编码兼容性修复(如果前两步都不行)
从你提供的编码信息看,motionEye用的是H.264(avc1)+AAC编码,理论上浏览器支持,但树莓派硬件编码可能输出了高Profile的参数,部分浏览器不兼容。这时候用ffmpeg重新编码成通用兼容的格式:
先安装ffmpeg:
sudo apt update && sudo apt install ffmpeg -y
然后执行编码命令:
ffmpeg -i /home/pi/Desktop/video/2018-05-26/14-27-06.mp4 \ -c:v libx264 -profile:v baseline -level 3.0 \ -c:a aac -b:a 128k \ /home/pi/Desktop/video/compatible_video.mp4
这个命令会把视频转成Baseline Profile的H.264(所有浏览器都支持),搭配标准AAC音频,转完后替换HTML里的视频路径再测试。
按这个顺序排查,应该能解决问题!
内容的提问来源于stack exchange,提问作者michael mattanza

