为了账号安全,请及时绑定邮箱和手机立即绑定

如何开发视频上传和播放功能时,既省钱又体验好?

标签:
PHP ffmpeg

前言

现如今,大部分带内容的网站或应用都有视频区了,不说是大厂平台,就连个人开发者也相继在自己网站或小程序上迭代出视频板块。那既然有了视频模块,除个性化推荐,智能审核等这种费钱又耗时的功能外(个人开发者暂缓)。最基本的视频上传,视频播放自然必不可少吧。

既然要强调省钱,我当前不会对接点播服务了。毕竟为了有一定的审核和推荐功能,我打算做人工审核。那剩下的关于播放有一定的体验度,还得要用一下OSS了(还是要花一点嘛)。因为上传有现成的分片上传,播放有HLS流,以下着重讲关于视频播放的优化,上传部分就说一下思路哦。

https://img1.sycdn.imooc.com//647d55e900011e8c05610361.jpg

视频上传

因为网站关于上传只有一些图片,所以只用了OSS的常规文件上传。但是视频,不说长视频,现在一些稍微几十秒的短视频动则几十兆上百兆,更别说高清的。而且早期的上传是放在服务端完成,所以当客户端提交大型文件时,不光nginx(413 Request Entity Too Large)和fpm会报错,到了OSS客户端调用也会报错(Allowed memory size of 268435456 bytes exhausted (tried to allocate 67108896 bytes))。

开始是尝试在服务端改成分片上传,但是测试时发现,每次提交文件过来时都要先将视频本地化,存在服务器上后再分片提交到OSS,回调成功删除服务器文件,并且要调整nginx等的提交的最大值限制。最后就决定把上传部分放到了前端,服务器只提供OSS的临时访问凭证和接收上传成功回调。

https://img1.sycdn.imooc.com//647d55e9000159f706680311.jpg

视频播放

关于视频播放,网站早期的做法是将OSS的视频地址直接丢到前端的video标签中,当在手机播放时会出现卡顿或播放缓慢等问题。最后决定使用OSS的HLS的构建,就是在后台将视频推流一份在OSS的LiveChannel中,前端通过读取m3u8播放视频。

思路:

1. 前端上传视频,后台审核成功调用OSS的LiveChannel创建。

2. 根据通道创建返回的推流地址和播放地址,存入数据库。

3. 在服务端起一个进程用FFMPEG进行视频推流。

4. 前端播放视频时选择m3u8的方式。

https://img1.sycdn.imooc.com//647d55ea0001565007630540.jpg

示例代码:

1. 前端

https://img1.sycdn.imooc.com//647d55ea0001aee610600808.jpg

2. 后端API层

https://img1.sycdn.imooc.com//647d55ea0001e60909550903.jpg

3. OSS操作层

https://img1.sycdn.imooc.com//647d55eb0001314115010907.jpg

4. 推流指令

https://img1.sycdn.imooc.com//647d55eb0001de4715710607.jpg

FFmpeg参数说明

frame= 9753 fps= 30 q=-1.0 Lsize= 129340kB time=00:05:25.09 bitrate=3259.2kbits/s speed= 1x

https://img1.sycdn.imooc.com//647d55eb0001d15c04780308.jpg

video:116301kB audio:12596kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.344442%

https://img1.sycdn.imooc.com//647d55eb0001b71704460170.jpg


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消