近期做了一个视频培训项目,使用了文件服务器存放视频文件。但是播放效果不理想,部分手机端用户(主要是移动的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

网站视频播放慢的解决方案相关推荐

  1. 网站被K的解决方案有哪些?

    在网站的优化过程中,相信很多优化人员都遇到过网站有时会降权,一旦被降权不快速恢复的话就很容易被K,导致网站更不能正常运行.可见当网站被降权和被K时又该如何通过优化手段进行解决呢?下面一起来了解一下. ...

  2. 某网站视频播放花屏解密

    某网站视频播放花屏解密 样例网址:aHR0cHM6Ly90di5jY3R2LmNvbS8yMDIyLzA5LzMwL1ZJREVnZ0ZRYmZ6NmlMeXZjN0F4d0NlZjIyMDkzMC5 ...

  3. SSM框架视频点播网站-视频播放网站-电影在线观看网站-电视剧在线欣赏网站 (idea开发javaweb-php-asp.netC#-j2ee-springboot)

    0.效果展示 1.概述 该系统分为后台管理员登录.前台用户,具体功能描述如下所示: 管理员(后台用户) 系统管理:该模块实现的功能有公告管理.发布公告.友情链接.网站留言管理.管理员设置.后台登录日志 ...

  4. iis占用服务器内存,W3wp.exe 进程占用内存高消耗CPU近100%导致网站反应速度缓慢的解决方案...

    如何降低W3WP.EXE占用的内存和CPU?结合网上的诸多建议,主要的解决办法是: a.在IIS中对每个网站进行单独的应用程序池配置: b.合理的配置你的应用程序池: c.找出具体网站站点的程序问题. ...

  5. WordPress网站迁移数据最佳解决方案

    介绍: WordPress网站需要转移数据,比如之前主机无法继续满足业务需求,比如主机售后技术支持不给力,比如需要备案迁移主机,原因各种各样,遇到的问题总结来说,最大的就是WordPress网站附件的 ...

  6. 网站密码明文传输解决方案js+java

    解决密码明文传输的方案,基本有两种解决方案 1,将项目网站全站升级为https协议(如果要更谨慎,还需要加密). 2,将密码进行加密后,在后台解密. 因项目升级https时间周期太长.将暂时替代方案改 ...

  7. JAVA网站视频播放不了_java视频播放网站小结

    java视频播放网站小结 一.流媒体播放器安装. 二.前台播放器flash插件. 三.视频转码,加水印. 一首先流媒体播放器安装. 这里使用的是nginx作为流媒体服务器. 配置nginx\conf\ ...

  8. 谷歌浏览器提示:您要访问的网站包含恶意软件(解决方案)

    谷歌 Chrome 浏览器拦截提示:您要访问的网站包含恶意软件(2021年最新解决方案) 谷歌Chrome浏览器越来越重视安全问题,经常会遇到谷歌浏览器上使用时出现安全警告的问题,提示"您要 ...

  9. Wordpress企业网站建设SEO完整解决方案是什么?

    基于Wordpress的企业网站建设为SEO提供完整的解决方案,SEO优化包括: (1)内容级别:网站首页的SEO和文章内容级别的SEO. (2)导入点:包括文章标签(Tags)导航.面包屑导航.文章 ...

最新文章

  1. [20160910]低级错误.txt
  2. Linux 被***后的检查
  3. 冗余的阿里云实例开启和停止API
  4. adb(Android debug bridge)命令
  5. Spark SQL整合Hive
  6. Bing Maps进阶系列八:在Bing Maps中集成OpenStreetMap地图
  7. dnf服务器延迟怎么看,dnf如何判断自己网络还是服务器出问题_dnf判断自己网络还是服务器出问题详细介绍_游戏堡...
  8. php禁止上传,PHP禁止某些类型的上传文件_PHP教程
  9. 二维数组遍历_布尔值数组的状态压缩
  10. 华硕服务器主板型号命名规则,【华硕A85X评测】华硕2012年主板命名规则详解-中关村在线...
  11. html 苹果微信录音js,基于JS开发微信网页录音功能的实例代码
  12. TBODY标签的作用介绍
  13. 心灵捕手影评,觉得很好。看一部好电影就像读一本好书。
  14. FusionCharts参数中文说明
  15. 5G发展的五大动力和四大挑战
  16. E. AC Challenge ACM-ICPC 2018 南京赛区网络预赛 状压dp + 枚举状态
  17. Jenkins插件离线下载及导入
  18. 3D打印定制照片方法步骤
  19. i59400f和i510400f打游戏差距大不大
  20. Java面试题以及答案--- MongoDb

热门文章

  1. 解决:当Excel插入图表,鼠标指向时,图一直闪烁,图标元素无法添加
  2. 木瓜移动SaaS平台:木瓜大橙白皮书 Part3 - 智能投放功能介绍
  3. sql server 2008 (3)
  4. 斗罗大陆 作品相关 光之子外篇暗夜精灵(上)
  5. python之place布局管理器
  6. 2022 淘宝买家秀API接口源码
  7. word2017文档背景色_如何确保Word打印文档背景
  8. muduo学习笔记:base部分之高性能日志库
  9. ISACA系列-CISA CISM CRISC CDPSE CGEIT维持政策分享
  10. 超酷带纹理网页滚动条效果