视频方案,雷霄骅的专栏- http://blog.youkuaiyun.com/leixiaohua1020
> LAV Filter
LAV Filter 是一款开源的DirectShow视频分离和解码软件,他的分离器LAVSplitter封装了FFMPEG中的libavformat,解码器LAVAudio和LAVVideo则封装了FFMPEG中的libavcodec。它支持十分广泛的视音频格式。
LAV Filter- https://github.com/Nevcairiel/LAVFilters http://code.google.com/p/lavfilters/
LAV Filter支持状况:
封装格式:MKV/WebM, AVI, MP4/MOV, MPEG-TS/PS (including basic EVO support), FLV, OGG, 以及其他ffmpeg支持的格式!
视频编码:H264, VC-1, MPEG-2, MPEG4-ASP (Divx/Xvid), VP8, MJPEG 等。
音频编码:AAC, AC3, DTS(-HD), TrueHD, MP3/MP2, Vorbis, LPCM 等。
字幕编码:VOB, DVB Subs, PGS, SRT, SSA/ASS, Text
流媒体数据传输中的时延和抖动是可以通过缓存的办法减少影响,所以流媒体业务可以允许在一定范围内的时延和抖动。但丢包会对流媒体数,据播放质量造成极其重大的影响。丢包率会造成视频和音频质量严重恶化,小的丢包率会造成图像的失真和语音的间歇中断,过高的丢包率甚至可以导致业务的中断。网络设计的目标是丢包率为零,但显然不存在这样的理想网络。所以丢包的大小将直接决定流媒体业务质量的好坏。
LAV Filter 是一款视频分离和解码软件,他的分离器封装了FFMPEG中的libavformat,解码器则封装了FFMPEG中的libavcodec。它支持十分广泛的视音频格式。LAV Filter 中最著名的就是 LAV Splitter,支持Matroska /WebM,MPEG-TS/PS,MP4/MOV,FLV,OGM / OGG,AVI等其他格式,广泛存在于各种视频播放器(暴风影音这类的)之中。
源代码位于GitHub或Google Code:https://github.com/Nevcairiel/LAVFilters http://code.google.com/p/lavfilters/
LAV Filter整个解决方案由8个工程组成,以下为一部分:
baseclasses:DirectShow基类,在DirectShow的SDK中也有,是微软为了简化DirectShow开发而提供的。
Demuxers:解封装的基类,LAVSplitter需要调用其中的方法完成解封装操作。
LAVAudio:音频解码Filter。封装了libavcodec。
LAVSplitter:解封装Filter。封装了libavformat。
LAVVideo:视频解码Filter。封装了libavcodec。
libbluray:蓝光的支持。
LAV Video 是使用很广泛的DirectShow Filter。它封装了FFMPEG中的libavcodec,支持十分广泛的视频格式的解码。
Media Player Classic - Home Cinema
Dolphin播放器(Dolphin Player)是一款开源的音频和视频播放器,它支持大多数的音频和视频文件模式,也支持大部分的字幕文件格式。它是基于ffmpeg的。http://code.google.com/p/dolphin-player/。live555是使用十分广泛的开源流媒体服务器。
> DirectShow Filter
DirectShow Filter,字幕叠加(FilterTitleOverlay)。DirectShow的视频播放器。DirectShow是一个庞大的框架,可以在Windows下实现多种多样的视频处理需求。
> ffdshow
ffdshow封装了多个视音频解码器,比如libmpeg2,libavcodec,xvid等等。其中最重要的是libavcodec,这个是ffmpeg提供的解码器,在ffdshow中起到了“挑大梁”的作用。
fdshow支持很多种滤镜,可以支持多种视频和音频的后期效果。例如OSD滤镜支持在视频的左上角显示视频相关的信息。而可视化滤镜则支持显示视频每一帧的运动矢量以及量化参数。位图覆盖(Bitmap)滤镜(Filter)。
> SDL播放视频的技术
实际上SDL本身并不提供视音频播放的功能,它只是封装了视音频播放的底层API。在Windows平台下,SDL封装了Direct3D这类的API用于播放视频;封装了DirectSound这类的API用于播放音频。因为SDL的编写目的就是简化视音频播放的开发难度,所以使用SDL播放视频(YUV/RGB)和音频(PCM)数据非常的容易。
SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。纯音频,不包含视频的那种。SDL播放音频,一般情况下不会有问题。
FFMPEG+SDL的简单播放器,FFMPEG用于编解码,SDL用于视频渲染。Github:https://github.com/leixiaohua1020/simplest_ffmpeg_player
常用编码软件简单使用记录 2 : 非自主编码器- https://blog.youkuaiyun.com/leixiaohua1020/article/details/39510759
> 最简单的视频编码器:编译(libx264,libx265,libvpx),
x264,x265,vpx这三个开源的视频编码器可以说是当今“最火”的视频编码器。x264现在占据着H.264视频编码器的半壁江山;x265则是目前实现H.265标准最好的开源视频编码器,并且在未来可能接替x264;而vpx则是Google推出的开源视频编码器,它提出的VP9编码标准的性能也不错。
1.最简单的视频编码器:基于libx264(编码YUV为H.264)
“轻量级”的编码器。因为它不再包含FFmpeg的代码,直接调用libx264完成编码。因此项目的体积非常小巧。该编码器可以将输入的YUV数据编码为H.264码流文件。
2.最简单的视频编码器:基于libx265(编码YUV为H.265),H.265(HEVC)
“轻量级”的编码器。因为它不再包含FFmpeg的代码,直接调用libx265完成编码。因此项目的体积非常小巧。该编码器可以将输入的YUV数据编码为H.265码流文件。
3.最简单的视频编码器:基于libvpx(编码YUV为VP8),基于libvpx的VP8视频编码器
与H.264不同,VP8的裸流(即不包含封装格式的纯视频数据流)是不能播放的。换言之,VP8的裸流必须存放在容器中才可以播放。官方示例代码中存储VP8视频流的封装格式是IVF。
Dan Grois等人在论文《Performance Comparison of H.265/MPEG-HEVC, VP9, andH.264/MPEG-AVC Encoders》中,比较了下一代编码标准HEVC,VP9的以及当前主流编码标准H.264之间的性能。
选用的编码器如下:HEVC:HM;VP9:libvpx;H.264:x264。
Google VP8/Vorbis/WebM (统称为 WebM)。基于HEVC(H.265)的的应用级别的编码器发展的速度很快。所说的应用级别,就是指速度比较快的,有实际应用价值的编码器。目前可以直接使用的有两个:x265,DivX265。DivX265是DivX发布的HEVC编码器,不开源,但是免费,是基于控制台的。
> libVLC的视频播放器
最简单的基于libVLC的视频播放器。VLC Media Player是一款优秀的播放器,但是由于它的源代码编译的难度比较大,一直没有深入研究过它的开发方面的技术。最简单的基于libVLC的视频播放器(图形界面版)。最简单的基于libVLC的推流器。
> YUV/RGB播放器,既支持YUV又支持RGB的播放器
与RGB每个像素点的每个分量取值范围为0-255不同(每个分量占8bit),YUV取值范围有两种:
(1)以Rec.601为代表(还包括BT.709 / BT.2020)的广播电视标准中,Y的取值范围是16-235,U、V的取值范围是16-240。FFmpeg中称之为“mpeg”范围。
(2)以JPEG为代表的标准中,Y、U、V的取值范围都是0-255。FFmpeg中称之为“jpeg” 范围。
原版项目地址:https://sourceforge.net/projects/raw-yuvplayer/
修改版源码地址:https://github.com/leixiaohua1020/YUVplayer
> RTMP播放器
基于Flash的RTMP播放器/推流器才能算得上是RTMP技术中的“正规军”。RTMP本身设计出来就是用于Flash平台之间通信的,而且RTMP最大的优势——“无插件直播”,也是得益于广泛安装在客户端的Flash Player。
基于Flash的网页播放器相比于其他网页播放器来说最大的优势就是“免插件安装”了,这一点可以很大的提高用户的体验质量。早些时候网络视频(尤其是直播)一般都使用ActiveX控件作为视频播放器,而这些控件并不普及,所以终端用户必须下载相关的插件才能收看节目,因而对很多不熟悉电脑的用户造成了很大的障碍。直到Flash网页播放器的出现,这一障碍才得到了解决。
-- RTMP Sample Player VideoJS,Video.js官网:http://www.videojs.com/
注:Video.js是一个基于JavaScript的HTML5视频播放器,本身是开源的。
RTMP Sample Player VideoJS是基于Video.js的RTMP播放器。其中包含两个播放器:
1.Sample Player VideoJS:HTTP点播网页播放器
2.RTMP Sample Player VideoJS:RTMP网页播放器
-- RTMP Sample Player Flowplayer,FlowPlayer官网:http://flash.flowplayer.org/
注:FlowPlayer有两个版本:HTML5版本和Flash版本,本文中使用的是Flash版本。
RTMP Sample Player Flowplayer是基于FlowPlayer的网页播放器。其中包含两个播放器:
Sample Player Flowplayer:HTTP点播网页播放器
RTMP Sample Player Flowplayer:RTMP网页播放器
-- RTMP Sample Player JWPlayer,JW Player官网:http://www.jwplayer.com
注:最新版的JW Player似乎不能免费使用RTMP播放功能了,这里使用的是旧版的JW Player
RTMP Sample Player JWPlayer是基于JW Player的RTMP播放器。其中包含两个播放器:
Sample Player JWPlayer:HTTP点播网页播放器
RTMP Sample Player JWPlayer:RTMP网页播放器