网站视频播放慢的解决方案
近期做了一个视频培训项目,使用了文件服务器存放视频文件。但是播放效果不理想,部分手机端用户(主要是移动的4G网络下)播放非常不流畅,
经过一轮探讨和咨询,解决方案如下:
1. 咨询服务器租赁房,得知服务器默认申请的电信的IP网段,因此又申请了移动的ip网段,这样可根据用户的运营商给其分配对应的访问ip。(如果有域名可使用DNS判断匹配,否则只能通过ip手动匹配)
2. 视频做了流化处理。原视频是mp4文件,使用的是开源的ffmpeg
安装
步骤1: 安装ffmpeg工具
不管时windows还是linux安装都很简单。但是在linux安装需要注意的是需要一个插件。需要指定libx264
这里贴出我重新安装的步骤:(参考)
#yum安装必要包
yum install autoconf automake cmake freetype-devel gcc gcc-c++ git libtool make mercurial nasm pkgconfig zlib-devel
ffmpeg没有libx264库,需要在configure的时候链接x264库的头文件路径和库文件路径
#下载并安装x264
yum install yasm yasm-devel
git clone https://code.videolan.org/videolan/x264.git
安装x264 cd x264 ./configure --enable-static --enable-shared --disable-asm make make install
x264头文件和动态库生成在build目录下
配置PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/home/zyl/x264-snapshot-20190911-2245-stable/build/lib/pkgconfig:$PKG_CONFIG_PATH
# ffmpeg安装
wget http://ffmpeg.org/releases/ffmpeg-4.2.2.tar.bz2
/configure
make
make install
# 检查ffmpeg是否安装成功
ffmpeg -version
# 安装时默认时加入环境变量,所以在任何地方执行就可以。提示如下,重点是有libx264字样
[java@iZt4n36uo36nxgg8z2hb2kZ ffmpeg]$ ffmpeg -version
ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-28)
configuration: --enable-gpl --enable-nonfree --enable-libfreetype --enable-libx264
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
问题一:实际安装时忘记安装x264,安装后记得要把x264的lib刷到缓存里,否则会找不到
1、首先打开/etc/ld.so.conf文件
2、加入动态库文件所在的目录:执行vi /etc/ld.so.conf,在"include ld.so.conf.d/*.conf"下方增加"/usr/local/lib"。
3、保存后,在命令行终端执行:/sbin/ldconfig -v;其作用是将文件/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用,因此当安装完一些库文件,或者修改/etc/ld.so.conf增加了库的新搜索路径,需要运行一下ldconfig,使所有的库文件都被缓存到文件/etc/ld.so.cache中,如果没做,可能会找不到刚安装的库。
经过以上三个步骤,"error while loading shared libraries"的问题通常情况下就可以解决了。
问题二:ffmpeg无法执行,错误如下
ffmpeg: error while loading shared libraries: libavdevice.so.58: cannot open shared object file: No such file or directory
看下需要哪些依赖:
ldd ffmpeg
可以看到缺失的依赖
我们找下这些文件在哪里
find /usr -name 'libavdevice.so.58'
应该都在这个目录
/usr/local/lib/
我们export出来:
export LD_LIBRARY_PATH=/usr/local/lib/
然后再尝试执行
/usr/local/bin/ffmpeg
问题解决
转换
步骤2: 测试,安装成功后,执行转换命令:
令:
ffmpeg -i video2.mp4 -c:v libx264 -hls_time 60 -hls_list_size 0 -c:a aac -strict -2 -f hls t/video2.m3u8
步骤3.以下就是正在转换
...略...
com.skyjilygao.util.VideoThread : frame= 3 fps=0.0 q=0.0 size=N/A time=00:00:01.08 bitrate=N/A speed=2.09x
com.skyjilygao.util.VideoThread : frame= 20 fps= 19 q=0.0 size=N/A time=00:00:01.36 bitrate=N/A speed=1.32x
com.skyjilygao.util.VideoThread : frame= 29 fps= 17 q=0.0 size=N/A time=00:00:01.49 bitrate=N/A speed=0.85x
com.skyjilygao.util.VideoThread : frame= 38 fps= 15 q=0.0 size=N/A time=00:00:01.64 bitrate=N/A speed=0.667x
com.skyjilygao.util.VideoThread : frame= 40 fps= 13 q=0.0 size=N/A time=00:00:01.70 bitrate=N/A speed=0.54x
com.skyjilygao.util.VideoThread : frame= 48 fps= 13 q=0.0 size=N/A time=00:00:01.83 bitrate=N/A speed=0.485x
...略...
步骤4 内嵌到代码里(java)
/**
* 拼接ffmpeg命令:ffmpeg -i test.mp4 -c:v libx264 -hls_time 60 -hls_list_size 0 -c:a aac -strict -2 -f hls output.m3u8
* @param source
* @return
*/
private boolean processM3U8(String source, String target) {
File targetFile = new File(target);
File parentDir = targetFile.getParentFile();
if (!parentDir.exists()) {
parentDir.mkdirs();
}
List<String> commend = new ArrayList<String>();
commend.add(ffmpeg);
commend.add("-i");
commend.add(source);
commend.add("-c:v");
commend.add("libx264");
commend.add("-hls_time");
commend.add("60");
commend.add("-hls_list_size");
commend.add("0");
commend.add("-c:a");
commend.add("aac");
commend.add("-strict");
commend.add("-2");
commend.add("-f");
commend.add("hls");
commend.add(target);
this.cmdList = commend;
// 通过ProcessBuilder创建
// processBuilder(commend);
// 通过runtime创建
runtimeBuilder(getCommand());
return true;
}
注意:命令通过list传入,所以遇到空格,下一个参数就是一个list的元素。不能写成 commend.add("-hls_time 60");这样执行会变成ffmpeg -i test.mp4 -c:v libx264 "-hls_time 60" -hls_list_size 0 -c:a aac -strict -2 -f hls output.m3u8导致执行失败
这里是关键代码。
命令简单解释下:
-hls_time 60: 设置每片的长度,我这里是60秒,为一个片段。
-hls_list_size 0:设置播放列表保存的最多条目,我这里设置为0会保存有所片信息,默认值为5
更多命令可以百度或Google
ffmpeg参考:https://www.ffmpeg.org/ffmpeg-all.html
网站视频播放慢的解决方案相关推荐
- 网站被K的解决方案有哪些?
在网站的优化过程中,相信很多优化人员都遇到过网站有时会降权,一旦被降权不快速恢复的话就很容易被K,导致网站更不能正常运行.可见当网站被降权和被K时又该如何通过优化手段进行解决呢?下面一起来了解一下. ...
- 某网站视频播放花屏解密
某网站视频播放花屏解密 样例网址:aHR0cHM6Ly90di5jY3R2LmNvbS8yMDIyLzA5LzMwL1ZJREVnZ0ZRYmZ6NmlMeXZjN0F4d0NlZjIyMDkzMC5 ...
- SSM框架视频点播网站-视频播放网站-电影在线观看网站-电视剧在线欣赏网站 (idea开发javaweb-php-asp.netC#-j2ee-springboot)
0.效果展示 1.概述 该系统分为后台管理员登录.前台用户,具体功能描述如下所示: 管理员(后台用户) 系统管理:该模块实现的功能有公告管理.发布公告.友情链接.网站留言管理.管理员设置.后台登录日志 ...
- iis占用服务器内存,W3wp.exe 进程占用内存高消耗CPU近100%导致网站反应速度缓慢的解决方案...
如何降低W3WP.EXE占用的内存和CPU?结合网上的诸多建议,主要的解决办法是: a.在IIS中对每个网站进行单独的应用程序池配置: b.合理的配置你的应用程序池: c.找出具体网站站点的程序问题. ...
- WordPress网站迁移数据最佳解决方案
介绍: WordPress网站需要转移数据,比如之前主机无法继续满足业务需求,比如主机售后技术支持不给力,比如需要备案迁移主机,原因各种各样,遇到的问题总结来说,最大的就是WordPress网站附件的 ...
- 网站密码明文传输解决方案js+java
解决密码明文传输的方案,基本有两种解决方案 1,将项目网站全站升级为https协议(如果要更谨慎,还需要加密). 2,将密码进行加密后,在后台解密. 因项目升级https时间周期太长.将暂时替代方案改 ...
- JAVA网站视频播放不了_java视频播放网站小结
java视频播放网站小结 一.流媒体播放器安装. 二.前台播放器flash插件. 三.视频转码,加水印. 一首先流媒体播放器安装. 这里使用的是nginx作为流媒体服务器. 配置nginx\conf\ ...
- 谷歌浏览器提示:您要访问的网站包含恶意软件(解决方案)
谷歌 Chrome 浏览器拦截提示:您要访问的网站包含恶意软件(2021年最新解决方案) 谷歌Chrome浏览器越来越重视安全问题,经常会遇到谷歌浏览器上使用时出现安全警告的问题,提示"您要 ...
- Wordpress企业网站建设SEO完整解决方案是什么?
基于Wordpress的企业网站建设为SEO提供完整的解决方案,SEO优化包括: (1)内容级别:网站首页的SEO和文章内容级别的SEO. (2)导入点:包括文章标签(Tags)导航.面包屑导航.文章 ...
最新文章
- [20160910]低级错误.txt
- Linux 被***后的检查
- 冗余的阿里云实例开启和停止API
- adb(Android debug bridge)命令
- Spark SQL整合Hive
- Bing Maps进阶系列八:在Bing Maps中集成OpenStreetMap地图
- dnf服务器延迟怎么看,dnf如何判断自己网络还是服务器出问题_dnf判断自己网络还是服务器出问题详细介绍_游戏堡...
- php禁止上传,PHP禁止某些类型的上传文件_PHP教程
- 二维数组遍历_布尔值数组的状态压缩
- 华硕服务器主板型号命名规则,【华硕A85X评测】华硕2012年主板命名规则详解-中关村在线...
- html 苹果微信录音js,基于JS开发微信网页录音功能的实例代码
- TBODY标签的作用介绍
- 心灵捕手影评,觉得很好。看一部好电影就像读一本好书。
- FusionCharts参数中文说明
- 5G发展的五大动力和四大挑战
- E. AC Challenge ACM-ICPC 2018 南京赛区网络预赛 状压dp + 枚举状态
- Jenkins插件离线下载及导入
- 3D打印定制照片方法步骤
- i59400f和i510400f打游戏差距大不大
- Java面试题以及答案--- MongoDb