flv、MP4 视频播放问题

转载 2015年11月20日 23:58:15
       我们平常笼统说的「视频格式」其实包含三个部分:视频编码、音频编码、容器格式。其中「编码」这个概念其实又包含两个方面:编码和解码。「视频编码」作为动词指的是将动态的图像信息转化为二进制数据的过程;其逆过程称为「视频解码」。「视频编码」作为名词则通常指的是某种特定的编码方式。同样的概念也适用于「音频编码」,只不过它转化的是声音信息。大多数「视频文件」都同时包含视频和音频,因此编码后至少都有两组二进制数据,并且两组数据必须按照特定的方式同步起来,否则我们看到的画面和听到的声音将不吻合。为了解决编码后多组不同类型的的数据的存储、传输问题,需要将他们按照一定的规律组织起来,这种组织方式即是「容器格式」。
      我们常见的视频文件扩展名包括 .avi, .rmvb, .mp4, .mkv 等。其实扩展名都是指的某种容器格式。这些容器里面存放的数据可能采用了多种不同的编码方式。例如,常见的 avi 文件里面存放的通常是 xvid 或 divx 编码的视频和 mp3 编码的音频。rmvb 文件里面存放的通常是 RV40 编码的视频和 cook 编码的音频。mp4 文件里面通常存放的是 H.264 编码的视频和 AAC 编码的音频。mkv 文件里面存放的则可能包含前面各种。
       目前业界主流的封装是MP4.因为MP4有着良好的特性,并对HTML5友好。mp4新规范实际已经支持无缝拼接,真正流媒体封装器。封装格式一般都对应的有很多编码格式,目前主流的H264编码器是 开源的x264,完美的平衡了各种因素。
       其实flv也是流式文件,比其它格式更简单,但是apple同样不支持。android ice cream也已经原生支持 hls.而且 使用ts切片方式 可以很容易实现流加密处理。不过HLS它有一个缺点,那就是Chrome(PC)迄今为止内建不支持HLS(m3u8),但是Android/iOS的浏览器支持m3u8.
rtmp和rtsp都要求特殊的服务器,例如rtmp要求FMS/red5, rtsp要求darwin等,hls只要普通的server。
       视频监控和视频通话。这类流媒体采用HLS明显是不合适的,一般采用HTTP progressive streaming,Android在4.0开始支持这种流媒体格式。能够支持HPS的容器必须是流式的,如FLV, MKV, Android将支持WEM(即MKV)容器,携带VP8视频格式。因此选择流媒体传输方式还有一个就是 HPS .
       国内的很多视频网站都支持自动切换的,例如在普通PC浏览器上使用传统的flv播放,在Android/iOS上使用m3u8,在Chrome(PC/Android)上使用mp4,方法就是video里提供多个source.
HTTP Live Streaming技术,Adobe 的 Flash 流媒体服务器的新版本也要支持这个技术。有一个巨大优势:自适应码率流播(adaptive streaming)。效果就是客户端会根据网络状况自动选择不同码率的视频流,条件允许的情况下使用高码率,网络繁忙的时候使用低码率,并且自动在二者间随意切换。这对移动设备网络状况不稳定的情况下保障流畅播放非常有帮助。实现方法是服务器端提供多码率视频流,并且在列表文件中注明,播放器根据播放进度和下载速度自动调整。
特点是将流媒体切分为若干 TS 片段(比如每10秒一段),然后通过一个扩展的 m3u 列表文件将这些 TS 片段集中起来供客户端播放器接收。一旦切分完成,之后的分发过程完全不需要额外使用任何专门软件,普通的网络服务器即可,大大降低了 CDN 边缘服务器的配置要求,可以使用任何现成的 CDN。分发使用的协议是最常见 HTTP,代理服务器对这个协议的缓存优化相当成熟,而很少有代理服务器对 RTSP 的进行缓存优化。这对播放(软)实时视频有相当大的优势,因为这样分发后,对源服务器的负载压力小得多。同样的好处也是存在的:如果你要在一段长达一小时的视频中跳转,如果使用单个 MP4 格式的视频文件,并且也是用 HTTP 协议,那么需要代理服务器支持 HTTP range request 以获取大文件中的一部分。不是所有的代理服务器都对此有良好的支持。而 HTTP Live Streaming 则只需要根据列表文件中的时间轴找出对应的 TS 片段下载即可,不需要 range request,对代理服务器的要求小很多。所有代理服务器都支持小文件的高效缓存。

解决方案:
统一使用主流的H264编码器。
1、上传的视频,用ffmepg检测编码,例如:MP4 编码转成H264. web端播放转码后的 flv\mp4.通过nginx代理,安装flv\mp4 扩展。nginx中的Flv Stream模块能实现flv流媒体的功能,而且支持flv视频进度条拖拽,可以安装yadmi,yadmi的作用是为flv文件添加关键帧,实现拖动播放。另外nignx还可以作为方向代理服务器代理后端基于Flash Media Server或者Red5的RTMP/RTMP流媒体服务器
2、转码后的flv\mp4, 生成TS 片段,扩展的 m3u 列表文件, 支持android客户端和IOS客户端。
3、Android/iOS的浏览器支持m3u8,同时也支持标准的mp4.

参考资料:
nginx搭建mp4、flv流媒体服务器
http://lcf19890121.iteye.com/blog/2035650

利用nginx搭建http和rtmp协议的流媒体服务器
http://5iqiong.blog.51cto.com/2999926/1132639

CentOS6下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具)
http://hdu104.com/294

解决Apache 服务器不支持FLV视频播放的办法

<mime-mapping><extension>flv</extension><mime-type>video/x-flv</mime-type...
  • w_yunlong
  • w_yunlong
  • 2015年12月30日 09:33
  • 3601

NGINX 添加MP4、FLV视频支持模块

由于公司网站需要放置视频,但是默认的服务器环境是没有编译这个支持的模块,视频文件只能缓冲完了在播放,非常麻烦。   之前呢也安装了一个nginx_mod_h264_streaming来支持...
  • TCH8502
  • TCH8502
  • 2014年03月04日 18:52
  • 2792

jwplayer视频播放(FLV,mp4)实现和已封装好的php接口

PHP调用方法 php class flv{ var $flv_root = '/resources/jwplayer/'; public static function get_he...
  • cuoban
  • cuoban
  • 2015年04月02日 15:01
  • 1964

ffmpeg转换mp4到flv的使用笔记

假定ffmpeg.exe位于C:\ffmpeg目录下面。 Run->cmd cd c:\ffmpeg ffmpeg -i E:\a.mp3 -ab 56 -ar 22050 -b 500 -r ...
  • Flood_Dragon
  • Flood_Dragon
  • 2014年03月13日 16:44
  • 2194

用ffmpeg转换flv至mpeg

原贴:http://linuxdesktop.cn/2007/07/25/ffmpeg-convert-flv-to-mpeg 用ffmpeg转换flv至mpeg 2007-07-25 13:50 |...
  • chinalinuxzend
  • chinalinuxzend
  • 2007年10月17日 00:51
  • 7637

ffmpeg转换mp4到flv的命令

ffmpeg -i source.mp4 -c:v libx264 -ar 22050 -crf 28 destinationfile.flv  -crf XX is the quality...
  • machh
  • machh
  • 2017年11月27日 17:58
  • 323

使用ffmpeg进行视频文件转换成FLV整理

本系列文章导航Windows下FFmpeg快速入门ffmpeg参数解释mencoder和ffmpeg参数详解(Java处理视频)Java 生成视频缩略图(ffmpeg)使用ffmpeg进行视频文件转换...
  • hemingwang0902
  • hemingwang0902
  • 2009年07月26日 22:23
  • 10852

FLV, TS, MP4封装格式大小比较

对于相同的音视频内容,使用三种不同的封装格式,则文件体积从大到小依次为 TS -> MP4 -> FLV  FLV和MP4封装格式的文件大小基本相等。 例如:对于同一个文件,采用...
  • u011244446
  • u011244446
  • 2017年03月02日 16:54
  • 993

几种视频格式(RMVB,FLV,MP4,AVI等等)区别比较

●RM,RMVB是现在网络上资源最多的视频格式之一。有着压缩后容量小,画质较好的特点。从很早起,支持RM无转换直播功能成为了MP4播放器的卖点之一。AVI的格式的视频画质很好,但是相比RM格式占的空间...
  • fhzm2010
  • fhzm2010
  • 2014年04月09日 14:02
  • 7226

用nginx搭建http/rtmp/hls协议的MP4/FLV流媒体服务器

前前后后搭建了两三个星期,终于可以告一段落,nginx实在是有点强大。写一篇笔记来记录一下这个过程中的思路和解决方案。 一.搭建nginx平台: 基本是基于http://blog.csdn.net/x...
  • u014623602
  • u014623602
  • 2016年01月06日 11:56
  • 5381
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:flv、MP4 视频播放问题
举报原因:
原因补充:

(最多只允许输入30个字)