无线视频传输方案 基于FMS的跨平台视频传输方案的研究与实现

摘要:随着现代网络技术的发展,基于网络的音视频应用需求越来越高,从传统的视频网站,扩展到视频会议、多媒体教学、在线医疗等诸多领域。而随着手机、平板电脑的普及,客户端设备也呈现多元化特征,所以需要一种高效高质的跨平台视频传输技术。本文讨论了在FMS服务端的基础上,实现不同终端的视频推流和播放技术。与其他技术作比较,这是一个着重介绍在移动端设备通过移植ffmpeg推流,和利用HLS协议播放的方案,而PC端建议采用flex技术,最终形成一个完整、高效的跨平台视频传输技术方案。

  关键词:FMS 跨平台 RTMP ffmpeg HLS
  中图分类号:TN919.8 文献标识码:A 文章编号:1007-9416(2016)11-0106-02
  1 系统整体方案
  FMS(Flash Media Service)是Adobe公司出品的流媒体服务器,同时也是极具弹性的开发环境,它提供了强大的多用户、高质量音视频功能,自适应不同的带宽环境,可用于创建多样的交互多媒体网络应用。FMS除了大量应用于各类视频网站,对视频会议、视频监控、多媒体教学等领域,也都能提供方便优质的流媒体服务。目前国内一些厂商的多媒体服务平台也是基于FMS开发的。
  然而,随着Android和IOS系统停止对flash的原生支持,实现一个跨平台的统一视频服务变得困难,往往需要从底层开始自主研发,成本高且通用性差。从FMS4.5版本之后开始支持的Http Dynamic Streaming技术针对苹果的HLS方案提出了基于HTTP的流媒体传输方案,增加了对HLS协议的支持,解决了移动端播放视频格式的问题,这为FMS服务于不同的终端提供了便捷的技术支持。
  具体的PC客户端仍可采用Flex技术,方便地实现视频流的上传和播放,其中视频的上传利用rtmp协议,播放采用flash技术;针对移动端视频传输,向服务器推流也必须符合rtmp协议。在android和IOS系统要实现rtmp推流有多种技术方案可选,综合考虑开发成本和视频格式的统一性,本文主要介绍利用ffmpeg原生代码,并移植到android和IOS系统的解决方案。移动端的播放则借助HLS协议,最终实现跨平台的视频传输。
  2 PC端采用flex技术实现视频传输
  flex同为Adobe公司的产品,结合FMS进行开发尤为简便,但需要flash技术支持。这在台式电脑操作系统中不成问题,但运用在移动端需借助Adobe AIR技术较困难,考虑到兼容性等诸多因素,使用并不广泛,所以当前在移动端不建议采用。
  PC端运用Flex结合FMS实现视频点播、直播的关键代码如下:
  2.1 点播服务器上的视频文件
  nc.connect("rtmp:// FMS服务器IP地址:端口号/PlayStreams路径");//连接FMS
  ns=new NetStream(nc);
  ns.play("视频文件名",0);
  2.2 向服务器推流,用于直播
  nc.connect("rtmp://FMS服务器IP地址:端口号/LiveStreams路径");//连接FMS
  ns=new NetStream(nc);
  ns.attachCamera(cam);//调用摄像头
  ns.attachAudio(mic);//调用麦克风
  ns.publish(“视频流名称”,"live");
  2.3 播放直播流
  nc.connect("rtmp://FMS服务器IP地址:端口号/LiveStreams路径");//连接FMS
  ns=new NetStream(nc);
  ns.play("视频流名称");//对应于视频流发布端的publish("视频流名称","live").
  其中nc为NetConnection类型对象,用于连接FMS;ns为NetStream类型对象,代表视频流。
  3 移动端实现视频发布
  利用FMS作为视频服务器,要求视频推流符合RTMP协议。在移动端有多种开发库可以实现,例如商业上应用比较多的vitamio、ijkplayer、ffplayer等,本质上它们都是基于ffmpeg的开源项目。直接使用这些开发库,开发周期短难度低,但技术上总受到诸多限制。所以本文介绍直接使用FFMPEG实现视频处理,而后移植到移动端操作系统中的开发方法,更加灵活可控。
无线视频传输方案 基于FMS的跨平台视频传输方案的研究与实现
  3.1 ffmpeg推流
  ffmpeg实现视频推流首先需指定协议,然后向服务器写入视频数据。核心函数如下:
  avformat_alloc_output_context2(&outfmt_ctx, NULL, "flv", out_filename); //初始化outfmt_ctx
  avformat_write_header(outfmt_ctx, NULL); //写文件头
  av_interleaved_write_frame(outfmt_ctx, &pkt); //写帧,需循环执行
  av_write_trailer(outfmt_ctx); //写文件尾
  其中outfmt_ctx为AVFormatContext类型指针,pkt为AVPacket类型结构体, out_filename为FMS服务器地址,型如 rtmp://0.0.0.0/…/livestream。
  若要从设备的摄像头和麦克风采集音视频数据,则程序需要包含libavdevice/avdevice.h文件,并利用其提供的函数实现功能。   3.2 ffmepg在android上的移植
  ffmpeg用C语言编写,在android平台中使用,需先编译成.so文件,然后通过JNI(Java Native Interface)调用,JNI技术允许Java代码和其他语言写的代码(C&C++)进行交互。
  编译ffmpeg可采用android NDK(Native Development Kit)编译,或在Linux操作系统中(ubuntu)直接做交叉编译。编译成功将得到libffmpeg.so、libavfilter.so、libavcodec.so、 libavfomat.so、libavdevice.so、libavuntil.so、libpostproc.so等文件。
  将上述.so文件和头文件导入自己的工程中,并编写自己的C文件调用相关功能,然后配置安卓makefile文件Android.mk。在java程序中使用native?functionname(…);格式调用C文件中自己编写的函数。
  3.3 ffmepg在苹果系统上的移植
  3.3.1 在mac os下使用ffmpeg
  在mac os下使用ffmpeg比较简单,可以直接安装。若系统已经安装好brew,只需在终端输入命令:brew install ffmpeg,等待安装结束即可。安装成功后,可使用命令行来操作,或在程序中调用。
  3.3.2 编译在iOS下使用的ffmpeg library库 .m文件中调用
  编译在iOS下使用的ffmpeg需使用build-ffmpeg.sh脚本文件,网上也有很多一键编译的脚本提供下载使用。但如果需要根据自己的需求对ffmpeg做相应剪裁和指定编译环境,则需要自己定制configure文件。
  编译成功后,将生成我们需要的libavfilter.a、libavcodec.a、libavfomat.a、libavdevice.a、libavuntil.a 等.a静态库。如果没有指定编译环境,一般都支持armv7、armv7s、i386、x86_64、arm64等多个架构。
  将编译好的静态库拖到xcode工程中,并在自己的.m文件中添加头文件引用:#include "avformat.h",就可以使用library库了。
  4 移动端视频播放
  在FMS4.5之前未支持HLS,实现移动端的视频播放需要rtmp协议支持,仍可采用移植ffmpeg的方法,也可利用上文提到的Vitamio等开发库。而当FMS高版本支持先进的HLS协议之后我们有了更好的选择,由于HLS数据通过HTTP协议传输,所以不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率以适应不同带宽条件下的播放。
  事实上,上文提到的视频开发库都同时支持rtmp协议和HLS技术。另一方面,因为现在版本的android和IOS及其浏览器都已经支持HTML5标准,在HTML5中播放HLS视频也可以非常简单的使用其video标签,所以对于客户端使用浏览器的场合,HLS视频格式显然是首选方案。而对于使用APP的客户端,不管是android还是IOS,如果想利用HTML5编写应用,除了使用开发库,还可以采用高效的混合开发方式。使用方法如下:
  从播放效果看,苹果的safari运行良好,android系统还不是完全稳定,适配率不高,这和操作系统版本及使用的浏览器有关。
  5 结语
  经过十几年的快速发展,流媒体技术方案己经非常多样且不断发展。本文针对视频传输的跨平台需求,主要介绍了基于FMS服务器和ffmpeg移植的技术方案,实现了一个从技术难度到开发成本都相对合适的视频传输、播放系统,且能在不同带宽条件下实现视频传输质量最优。本系统可在PC、android和ios之间实现视频交互,运行效果良好,为各类应用需求提供了优质的解决方案。
  参考文献
  [1]何圆圆,何凯.基于FFmpeg的H.264视频解码器的研究与实现[J].电脑知识与技术,2012.
  [2]刘仕坤.手机平台JavaScript语言解释器设计与实现[D].中南大学,2009.
  [3]周永健.基于FLEX+FMS远程交互视频教学系统与实现[D].四川师范大学,2010.
  [4]张玉晴,黄瑾娉.基于HTML5的跨平台移动应用关键技术的研究与实现[J].工业控制计算机,2013,(3).
  [5]胡登涛,等.编著.FLASH ACTIONSCRIPT3.0从入门到精通 [M]清华大学出版.2014-06.
百度搜索“爱华网”,专业资料、生活学习,尽在爱华网!  

爱华网本文地址 » http://www.aihuau.com/a/381151/51991141620.html

更多阅读

远程无线视频监控知识集锦(上) 无线wifi远程监控原理

1、什么是网络无线视频监控?网络无线视频系统通常指的是安全监视和远程监控领域内用于特定应用的IP监视系统,该系统使用户能够通过IP网络(LAN/WAN/Internet/3G)实现无线视频监控及视频图像的录像、以及相关的报警管理。与模拟视频系统

无线监控解决方案有几种 家用无线监控解决方案

当前市面上无线监控大概分为四大种: 2G无线监控,3G无线监控;微波无线监控, WIFI无线监控。下面我来与大家交流一下几者的根本区别,以便大家更加清楚那个方式更适合我们现在的项目从而以供朋友们有一个好的选择。 1、2G无线监控传输方式

原创教程 用WinMenc制作V100视频及挂字幕的方法 winmenc 字幕

原创教程:用WinMenc制作V100视频及挂字幕的方法。严重浪漫2007-04-26今天讲讲我一直在用的视频制作工具:WinMenc0.61 beta 。Mencoder是非常优秀的一款视频转换软件,得到了普遍好评,最大特点是速度快、效果好、DVD可直接压制。但是该软

新媒体时代的新闻传播 大视频时代下的跨屏传播

     大视频时代  三网融合的背景下,电视和网络视频行业开始了一次全新的变革。就终端而言,电脑屏向电视屏和手机屏融合,使得电视和手机成为新的网络视频终端。在内容上,三屏共享视频资源,使得电视网的内容与互联网的内容共享于更

声明:《无线视频传输方案 基于FMS的跨平台视频传输方案的研究与实现》为网友子要分享!如侵犯到您的合法权益请联系我们删除