流媒体框架

您所在的位置:网站首页 流媒体服务器框架图 流媒体框架

流媒体框架

2024-07-12 13:18| 来源: 网络整理| 查看: 265

这里所说的框架,是指在底层实现流的加载,缓冲,编码解码,拼接等等细节的整体方案。这种级别的功能,100%使用c实现,在android和Linux等系统进行make后build后,表现为各种so等文件。

对于应用层的开发工程师来说,算是android的Library层,属于算法和C++的范畴。

目前,世面上,我所知道的开源不要钱的,就两个VLC和ffmpeg,这两个(其实应该还有好的解决方案,欢迎知道的reader留言告诉我,把咱们的这个总结文档,说的更具体)。当然,还有android系统内置的OpenCore。不过,如果内置的足够强劲好用,哪里还有必要在生产中选用三方框架。

先说一下,这里的开源项目,在github都是可以找到的。同志们可以自行去下载玩玩,了解用用。

VLC框架: VLC 是一个开源项目,基于 ffmpeg 框架的自定义播放器。其中LibVLC是VLC的核心部分,就相当于MediaPlayer类. VLC 一个最主要的部分,它可以播放各种类型的媒体文件和流媒体文件,并且可以 创造媒体流 并保存成各种格式的媒体文件. VLC 是一种跨平台的媒体播放器和流媒体服务器,最初为videolan的客户端,它是一种非常简便的多媒体播放器, 它可以用来播放各种各样的音视频的格式文件(MPEG-1、MPEG-2、MPEG- 4、DivX、WMV、mp3、OGG、Vorbis、AC3、AAC等等)流媒体协议 最具特色的功能是可以边下载边观看Divx媒体文件,并可以播放不完全的AVI文件。并且支持界面的更改。 缺点:有 C/C++代码,还有Java代码,代码太庞大. YY 用的VLC. VideoLAN, 既是一个项目组,也是一家 非盈利组织. VLC media player VLC 是一款自由、开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,以及 DVD、音频 CD、VCD 及各类流媒体协议。 Vlc for android是一款开源安卓播放器,具备播放多媒体文件、光盘、设备以及网络流媒体协议等功能, 支持ARMv7 CPU或一个x86 CPU的设备,所有播放控制特性都已经开发完整。 它融合了 FFmpeg 计划的解码器与 libdvdcss 程序库使其有播放多媒体文件及加密DVD影碟的功能。 ffmpeg 框架: 优点:轻量级框架,易于维护.非常强大的音视频编解码开源库,目前市场上流行的播放器,大部分都是基于此开发的,包括暴风,腾讯,等等以及 上面提到的vitamio,vlc,ijkplayer. FFmpeg 是一个集录制、转换、音/视频编码解码功能为一体的完整的开源解决方案. FFMPEG 几乎为你把所有的繁重工作都做了,比如解码、编码、复用和解复用。 这使得多媒体应用程序变得容易编写。它是一个简单的,用C编写的,快速的并且能够解码 几乎所有你能用到的格式,当然也包括编码多种格式。 FFmpeg 的开发是基于Linux操作系统,但是可以在大多数操作系统中编译和使用。 FFmpeg 支持 MPEG、DivX、MPEG4、AC3、DV、FLV 等40多种编码,AVI、MPEG、OGG、Matroska、ASF 等90多种解码. TCPMP, VLC, MPlayer 等开源播放器都用到了FFmpeg。 FFmpeg 主目录下主要有 libavcodec、libavformat 和 libavutil 等子目录。其中 libavcodec用 于存放各个encode/decode模块,libavformat用于存放muxer/demuxer模块,libavutil用于存放内存操作等辅助性模块。 以flash movie的flv文件格式为例: muxer/demuxer的flvenc.c和flvdec.c文件在 libavformat目录下,encode/decode的mpegvideo.c和h263de.c在libavcodec目录下。 vitamio 框架: vitamio 也是基于 ffmpeg 开源框架.功能很强大,但是企业收费版的 VPlayer 是 vitamio 的一个产品, vitamio 和 VPlayer 是同一个团队开发的, VPlayer 能播放的 vitamio 也能播放. vitamio 的成功案例: 国内:VPlayer、熊猫影音、321影音等 国外:Tvltaliane、Dizi TV等 vitamio 支持的网络协议: m3u8,MMS,RTSP (RTP, SDP),HTTP 流式传输(progressive streaming),HTTP Live Streaming (M3U8), Android 2.1+ vitamio 的组成: vitamio.jar,ARMv-7-NEON.apk 四个解码器: ARMv-7-NEON.apk,VFP.apk ARMv6.apk,ARMv5.apk 注: vitamio 根据手机CPU型号安装对应的解码器,只安装一个解码器。 vitamio 不是万能的,因为手机上的Android系统都被手机厂商改过,所以vitamio不支持所有的手机,但是支持大部分的手机。 解码: 硬解码:用系统接口实现的播放器。 软解码:不用系统接口实现的播放器。 注:系统播放器是硬解码。硬解码视频质量比软解码质量好,系统播放器的播放质量肯定比第三方播放器的播放质量好。 ****WebRtc

只适合小范围(8人以内)音视频会议,不适合做直播.

ijkplayer : ijkplayer是bilibili基于ffmpeg,开源的音视频编解码库,对android,ios进行和很好的抽取封装,易于编译使用.vlc尝试过,稍微复杂些. 网易云音乐,斗鱼用的 ijkplayer. dependencies { # required, enough for most devices. compile 'tv.danmaku.ijk.media:ijkplayer-java:0.4.5.1' compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.4.5.1' # Other ABIs: optional compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.4.5.1' compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.4.5.1' compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.4.5.1' # ExoPlayer as IMediaPlayer: optional, experimental compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.4.5.1' } 硬解码: ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 1); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "http-detect-range-support", 0); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", IjkMediaPlayer.SDL_FCC_RV32); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "analyzeduration", "2000000"); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "probsize", "4096"); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, "skip_loop_filter", 0); 好了,秋哥开始画重点了:

我所了解的媒体解编码方案,其实核心都是ffmpeg(android内置的OpenCore先不提太low),其他来说,无论是应用层,还是中间层,都是简历在ffmpeg之上的多次封装。VLC的方案提供的比较全的lib,LibVlc只是ffmpegbuild出来的,vitamo是比较简单使用的应用层lib,好像内部解编码的格式支持使用的是libvlc,然后ijkplayer,是国人包装的,个人感觉包装的不一定有libvlc漂亮,但是国人习惯懂得,好用,直播,各种格式等考虑得方便易用。

这个时候,你可能要呵呵了,国人写不出来的东西,为什么还要求的那么多,这个有点像金山当年创建者,埋头苦练上百万行代码,让中国有了自己的office。这种级别的东西,没有足够的知识和定力等等很多能力,是造不出这样产品的。

这样的东西,只会build肯定是不能够的,虽然现在基础的lib实现的功能已经很够了,保不齐,还需要个性化的修改。这个时候,对ffmpeg库的理解就要很高了。比如,可不可以不prepare就开始seek等这样的问题。

这里温柔的提醒一下,源代码的编译,需要在mac或者Linux机器上。

再次温柔地说一下,我相信,阅读这样的源码是值的的,其实阅读每个协议的实现代码,都是非常值得的。就想是有一些人,用了很长时间,阅读了整个framework层的代码,还有一些大神阅读了真个Linux核心的源码。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3