ffmpeg 模仿腾讯视频实现高并发情况下播放视频的处理思路

前言

平时开发过程中,如果客户端需要播放视频,我们经常的做法是给一个文件地址。比如是html端,使用video标签,直接把视频地址放上去就可以播放了。这样的做法在高并发高访问量的情况下,是会出现问题的。文件在硬盘上的读写连接数,网络传输的带宽,都是这种做法的瓶颈。

我们打开腾讯视频,随便打开一个电视,f12打开网络请求界面,我们可以看到,视频缓冲是分段加载的,每次缓冲都有个ts结尾的文件

 

 

 

然后在网上查询视频处理ts文件发现插件ffmpeg,ffmpeg 可以做很多操作,对视频的转码,对视频的截取,对音频的截取都可做。下面就开始正题了,ffmpeg 的安装配置

首先去官网根据自己的操作系统下载安装包:https://ffmpeg.org/download.html 

我自己使用的安装包:windows:

链接:https://pan.baidu.com/s/1bHS-_laqtKdrBBY6u-r3Vw
提取码:e9yv

centos :

链接:https://pan.baidu.com/s/1pkOkNlV88kaSmh1dIpsAtA
提取码:u4l1

链接:https://pan.baidu.com/s/1GaawsgnBr-S0S2My2_Xuzw
提取码:xnsu

windows 安装

下载zip后,解压到自己的目录,并配置环境变量。

cmd执行 ffmpeg -version 有以下输出即为安装成功

 

centos7 部署

 

上传安装包至 /usr/local/ 下。
解压文件: tar xvJf ffmpeg-4.1.tar.xz
重命名文件: mv ffmpeg-4.1 /user/local/ffmpeg
安装yasm:回到主目录:cd //
新建文件夹:mkdir yasm
解压文件:tar zxvf yasm-1.3.0.tar.gz
进入文件夹:cd yasm-1.3.0
执行配置:./configure
编译安装:make && make install
回到FFmpeg目录:cd /userl/local/ ffmpeg
执行配置命令:./configure --enable-shared --prefix=/usr/local/ffmpeg
执行make(执行时间较久): make
执行安装:make install
修改文件/etc/ld.so.conf:vim /etc/ld.so.conf
文件末尾添加:/usr/local/ffmpeg/lib/
输入ldconfig使修改生效
验证是否安装成功:/usr/local/ffmpeg/ffmpeg/ffmpeg -version

 

 

利用ffmpeg视频转换

命令:ffmpeg -i xxx.mp4 -f segment -segment_time 60 -segment_format mpegts -segment_list /home/higherlevel/video-folder/video_name.m3u8 -c copy -bsf:v h264_mp4toannexb -map 0 /home/higherlevel/video-folder/course-%04d.ts

这条命令可以使用java 执行脚本命令来执行。

这个是把xxx.mp4视频切成功每60秒一个小的ts视频的m3u8  文件   

关于m3u8文件,其实就是多个ts文件的播放清单,某些浏览器或者播放器,可以直接解析这种文件,并把多个ts文件组合起来播放。

做到这一步,基本上核心功能都有了。剩下的就根据自己业务来设计系统架构。可以对ts文件做主从,负载均衡,这样把一个大的视频文件。分成多个小的ts文件。减少带宽的性能消耗。避免出现性能问题。

 

posted @ 2020-04-29 11:18  Rolay  阅读(1727)  评论(0编辑  收藏  举报