在线视频流播放方法利弊;ffmpeg mp4 faststart;mp4 moov作用
1 四个在线视频播放方案
第一个是RTSP(Real Time Streaming Protocol)实时流传输协议,是基于文本的多媒体播放控制协议,属于应用层。这里可能还会提到RTMP,这个其实就是Adobe私有的协议,一般走flv或者f4v格式流。它与RTSP是一路的,只不过RTSP是公开的,而且RTMP很老旧了,受支持也越来越少。RTSP传输的一般是TS或者MP4流,需要有支持该协议的客户端,当然也需要搭建一个RTSP协议服务器来提供播放服务。其缺省端口是554,简单的测试URL如:
rtsp://192.168.1.67:554/test
该方式播放流媒体视频我没有试过,需要单独搞一个RTSP协议的服务器也觉得麻烦,更主要的是其使用不够广泛。
第二个是HLS(HTTP Live Streaming)协议,由苹果公司开发的流媒体传输协议。这个以前研究过一些,知道流程。其原理是将一个大文件分成多个小文件,得到的m3u8配置文件就是各个小文件的信息表,客户端基于HTTP协议下载这些小文件。这个协议是支持动态码率的,客户端可以选择不同码率的同一段资源进行下载。这个以前用的时候并没有试过动态码率,只是用ffmpeg简单转换mp4文件得到一堆ts文件和一个m3u8播放列表。HLS协议规定视频封装格式是TS,编码格式是H264或者H265。相比与RTSP实时性不够,而且产生较多文件碎片,切片多个进行小文件分发也不够友好。另外HLS标准(或者苹果自有的HDS与微软的Smooth Streaming)已经是走下坡路了,如这篇文章介绍:
https://www.dacast.com/blog/mpeg-dash-vs-hls-what-you-should-know/
第三个是HTTP,也就是我正在用的。利用http服务器,直接输入一个mp4文件地址,即可在浏览器中进行播放。MP4是支持最为广泛的,http协议与http服务器应用是最广泛的,无需搭建别的服务器即可在线播放视频流。这里说的HTTP方式也就是HTTP Progressive Streaming,能够支持视频在线播放,拖拽进度等。
第四个是MPEG-DASH(Dynamic Adaptive Streaming over HTTP),新出的流视频播放控制协议,从名字也能看出是基于HTTP协议的。同HLS一样,它支持动态码率,用Youtube的应该知道它用的DASH,可以支持不同网络情况下播放不同清晰度的视频。相比较于HLS,DASH能以更低的码率传输更好的画面。不过该标准目前是大公司如Netflix和Youtube等在推广,支持程度还不是特别广泛。
以上几种方式基本就是当前视频流在线播放的主要方案,利弊也都分析了,下面是AVPro文档中的截图:
可以看出HTTP方式还是非常适合的,当前国内视频平台基本也用HTTP方式提供点播服务。
2 mp4 faststart和moov
下面就是第二部分了,mp4文件在线流播放时如何工作的呢?可以参考这篇文章:
https://rigor.com/blog/2016/01/optimizing-mp4-video-for-fast-streaming
这篇文章提到,mp4容器格式封装的h264编码的视频成为了在线html5视频的标准,所以优化在线视频流播放就基本说的时mp4文件的优化。首先就是基本概念,mp4文件是由许多数据块组成,存储了章节和音视频信息等。其中有一个moov块是最主要的,记录了该mp4文件的基础信息如每秒多少帧等,该部分的作用类似目录。当播放视频的适合,首先就是要找到moov块,但是不幸的是这些块顺序却可以不一致,比如用mp4info这个小工具看看:
这里说的moov就在第二处,比mdat靠前。如果moov靠后,浏览器播放在线视频的时候一开始请求不到这一块,就会往后面看下一个块,多请求几次。浏览器用HTTP Range Request先请求个几百K字节,这是第一次请求。得到206 Partical Content HTTP代码,可能没有找到moov。接着浏览器找后面几百K字节,找到moov块,从而准备好播放视频元信息。如这个博客截图:
实际上就会浪费几百K字节和几百毫秒,因此也就有了优化的方法,就是将moov提前:
ffmpeg -i input.mp4 -movflags faststart -acodec copy -vcodec copy output.mp4
如下:
根据我实际测试,faststart确实有没有差不多,一两百毫秒变化基本感觉不到,所以说一个一般的mp4文件就可以在线流播放,不用单独处理了。
3 国内视频网站采用方案对比
另外补充一下国内几大视频网站使用的在线视频播放方式,作为以后我的有关视频播放工作的参考对比。
先说优酷,这个也是老牌的视频网站了,参考:
http://www.cnblogs.com/zhaojunjie/p/4009192.html
细节不说,结论是优酷用的时m3u8方式,也是基于HTTP的,片段如下:
#EXTM3U
#EXT-X-TARGETDURATION:12
#EXT-X-VERSION:3
#EXTINF:6.006,
http://59.108.137.14/65666E0ED34581E6B96293A18/0300010F005430BCBA49631468DEFEC61C5678-3A78-37BA-1971-21A0D4EEA0E7.flv?ts_start=0&ts_end=5.906&ts_seg_no=0&ts_keyframe=1
#EXTINF:5.464,
http://59.108.137.14/65666E0ED34581E6B96293A18/0300010F005430BCBA49631468DEFEC61C5678-3A78-37BA-1971-21A0D4EEA0E7.flv?ts_start=5.906&ts_end=11.37&ts_seg_no=1&ts_keyframe=1
视频封装为flv格式,分割为多个片段,组合为m3u8列表,提供在线视频播放功能。实际上我可能对HTTP Progressive Streaming和HLS的区分还不很清晰,HLS中的H就是HTTP,实际上m3u8也是基于HTTP提供视频播放的,不需要单独搭建协议服务器提供后台服务。那么与HTTP Progressive Streaming的区别到底在哪,只是一个切片,一个不切片来通过HTTP播放视频吗?这里再找一些资料加以理解:
先说一下HTTP Progressive Streaming,这个类似于progressive download,不同之处则是Progressive Streaming时把视频缓存再内存中的,而不是永久存储设备中。那还是和HLS很像啊,这就要对比下HTTP Progressive Streaming和HLS了。HTTP Progressive Streaming能够不用完整下载视频就播放,相比于HLS不足之处是质量不能改变也就是就一个片源,而且安全性较差,可以看下这一段英文解释:
实际上就和前面说的差不多,也就是二者很相似,都是基于HTTP进行缓存播放,HLS可以提供多个源切换清晰度,比如优酷就用HLS方式,切片且提供不同质量的多个视频源。
接着是腾讯,这个比优酷来说感觉更新一些,可能也更清晰一些,参考:
https://blog.csdn.net/szu_it_man/article/details/80449751
这个博客给出了腾讯视频的方案,和优酷不同是,腾讯用的就是mp4,也就是直接HTTP Progressive Streaming一个mp4文件。当然腾讯能切换不同清晰度,因为其提供了多个不同质量的mp4文件。分析结果片段如下:
下面是爱奇艺的了,参考:
https://blog.csdn.net/qq405935987/article/details/83789697
爱奇艺用的是f4v格式的视频,基于https,而且也出现了m3u8的有关内容,如果划分到上面四种,是属于HLS的。分析片段如下:
所以国内这三个大型的视频网站没有用RTSP来提供在线视频播放服务,其中主要是用m3u8分片提供不同清晰度视频,而腾讯则跳出了m3u8,用起了mp4。
所以说,用mp4来提供在线视频播放没有问题,而且对于没有清晰度切换需求的业务,比m3u8也要更加轻便。
f4v既然遇到了,也记录下,百度百科有一些介绍:
F4V是Adobe公司为了迎接高清时代而推出继FLV格式后的支持H.264的F4V流媒体格式。它和FLV主要的区别在于,FLV格式采用的是H263编码,而F4V则支持H.264编码的高清晰视频,码率最高可达50Mbps。
现在主流的视频网站(如奇艺、土豆、酷6、优酷)等其他网站都开始用H264编码的F4V文件,H264编码的F4V文件,相同文件大小情况下,清晰度明显比On2 VP6和H263编码的FLV要好。土豆和56发布的视频大多数已为F4V,但下载后缀为FLV,这也是F4V特点之一。需要注意的是,F4V 和MP4 是兼容的格式,都属于ISMAMP4 容器,但是 F4V 只用来封装H.264视频编码和音频AAC。FLV 是Adobe 私有格式,但是也可以用来封装 H.264视频编码、AAC音频编码或H.263视频编码、MP3音频编码。所以不能看到扩展名为 flv 就认为不是H.264 编码的F4V,网络上很多后缀FLV的视频,其实质是更高清晰度的F4V。
在线视频流播放方法利弊;ffmpeg mp4 faststart;mp4 moov作用相关推荐
- 在线视频流播放控制(优酷、土豆、酷六、音乐台)
最近在制作相关系统的原型,需要用到视频,就把视频的播放问题做一个总结 视频是制作博客.空间日志的好素材,它制作简单,内容广泛,主要包括有视频音乐.小品.朗诵.电影.电视.游戏等等,不仅可以在插入视频中 ...
- 笔记:RTSP在线视频流资源地址
1 在线视频流地址:rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov 2 播放软件 vlc,下载地址 Downloads ...
- linux安装编译安装 ffmpeg,解决linux下ffmpeg压缩的mp4无法在网页播放问题
ffmpeg官网下载页面:http://www.ffmpeg.org/download.html github下载页面 https://github.com/FFmpeg/FFmpeg/releas ...
- 使用ffmpeg錄影mp4, 檔案不能播放
使用ffmpeg2.8.15錄影mp4的檔案, Video Codec使用H264 (openh264-1.5.0), Audio Codec使用aac(fdk-aac-0.1.4), 每五分鐘錄影一 ...
- ffmpeg系列之mp4与ts格式转换
ffmpeg系列之mp4与ts格式转换 1. M3U 协议解析 1.1.Tag说明 2.HLS 与 M3U8 3.通过ffmpeg进行转换 3.1. mp4格式转换为ts格式 3.2. ts格式拼接命 ...
- 使用H5Stream实现rtsp视频流播放,在Vue项目中 (无插件、可多视频源播放、亲测可用)
本文主要介绍用H5Stream 在Web页面播放摄像头的RTSP视频流,从0到1的过程.包括WebSocket代理.h5ss.bat文件 运行一会就自己卡死了.H5ss服务死掉自动定时重启的脚本 等可 ...
- mp4文件缺少moov box无法播放情况的修复【非完美】
一.mp4文件缺少moov box可能出现的场景有:使用录屏工具录到一半crash或断电,手机摄像机录到一般突然没电等. 二.修复的前提条件:需要有一个同样工具录制的参考视频,需要相同的mp4头部参数 ...
- ffmpeg error:mp4 stream error: no moov before mdat and the stream is not seekable
VLC播放器报错 mp4 stream error: no moov before mdat and the stream is not seekable 解决方法 ffmpeg生成moov是在mda ...
- [Rtsp]RTSP对实时摄像头视频流进行转换(FFmpeg+FFserver)
FROM:http://www.cuplayer.com/player/PlayerCode/RTSP/2014/0706/1414.html 1.一.问题描述 输入数据为来自摄像头的RTSP视频流, ...
最新文章
- 全景照片不怕歪!Facebook 用神经网络矫正扭曲的地平线
- 17、计算机图形学——辐射度量学
- C#DateTime为“ YYYYMMDDHHMMSS”格式
- linux.调整收发队列,linux消息队列通信
- oracle存储过程模板
- Activiti入门文档
- 疫情影响海外净利润?海尔智家的回答出人意料
- web业务系统权限控制
- C/C++ | Qt 实现爬虫功能,爬取CSDN博客文章
- SQLAlchemy ORM教程之一:Create
- SQL 游标使用实例
- 从事 Android 开发六年,我学到的那些事!
- JLOI2015 城池攻占
- LINUX下载编译g729
- 冒险者传说pc6java_我的世界之冒险者传说整合包游戏
- 微信小程序开发批量推送服务通知
- java生成pdf旋转_如何使用Java旋转PDF文档中的图像?
- 360如何清理注册表
- 如何避免扫码枪重复扫码
- 文字识别ORC与公式识别
热门文章
- 本构二次开发 c语言,基于外部材料接口的循环塑性本构模型二次开发
- Servlet相关练习题
- 一个简单的中国亲戚关系计算器 实现思路整理
- 《百年孤独》--[哥伦比亚]加夫列尔·加西亚·马尔克斯
- Altium Designer20(AD20)+VESC6.4实战PCB教程 全26集(北冥有鱼)
- iOS:UIScrollView、UITableView、UICollectionView顶部空白问题
- 从这份报告,我读出了数据从业者的局限与未来
- 用python实现liang-Barsky二维裁剪算法
- 软件定义无线电的实时频谱分析仪相关原理介绍(一)——信号与频谱
- 程序员不得不珍藏的那些励志片段