java流媒体直播_实时监控、直播流、流媒体、视频网站开发方案设计简要

本文介绍了Java实现流媒体直播的方案,包括本地推送端使用javaCV、ffmpeg、openCV或jmf获取摄像头流,转流端通过ffmpeg进行格式转换,流媒体服务器如fms、nginx-rtmp等的运用,以及播放端的直播和视频播放选择。重点讨论了rtmp和hls协议的实时性差异,并提出了基于tcp和udp的流媒体协议选择建议。
摘要由CSDN通过智能技术生成

欢迎大家积极开心的加入讨论群

一、本地推送端

1、本地:采用javaCV(安卓和java平台推荐javaCV)、ffmpeg、openCV或者jmf可以很方便的获取到本地摄像头流媒体

javaCV系列文章:

补充篇:

javacpp-ffmpeg系列:

2、监控(第三方摄像头):通过设备sdk或者rtsp直播流获取流媒体源

二、转流端

直播:通过ffmpeg(推荐),live555将接收rtsp或者字节码流并转为flv格式发布到rtmp流媒体服务器(流媒体服务器必须先建好)

hls原理同上

注意:rtmp只支持flv格式封装的视频流

ffmpeg服务实现方式实例请参考:

三、流媒体服务器

目前主流的流媒体服务器有:fms,nginx-rtmp,red5(java),flazr

本地视频:直接通过流媒体服务器解码并推送视频流

直播流:通过开启udp/rtp/rtsp/rtmp/hls等等流媒体服务,从ffmpeg/live555获取推送过来的实时视频流并发布到rtmp/hls直播流并推送(可以边直播边保存)

rtmp和hls这两种是web领域主流的流媒体协议。使用rtp或rtsp协议的一般都是监控。

流媒体协议选择:rtmp基于tcp协议,rtmp能够保持3秒左右延迟。hls是基于http协议,所以实时性特别差,想要用hls保持实时性的就别想了,hls延迟基本超过10秒。

实时性要求特高的,建议使用基于udp协议的一些流媒体协议。

基于tcp和udp两种流媒体协议区别就是tcp会强制同步,udp是数据发出去就不管了。

所以最终的方案就是:强同步但是实时性要求不高用基于tcp协议的,强实时性弱同步就udp。

四、播放端(收流端)

直播:通过flex(flash)播放器或者第三方播放器(videoJS,ckplayer,VideoLAN 等...)调用流媒体服务器的流媒体源解码并播放,如果不需要兼容低版本IE,可以采用HTML5的webSocket播放器,videoJS是flash/html5双核播放器。

视频:通过html自带播放器、flex(flash)播放器或者第三方播放器(videoJS,ckplayer,VideoLAN 等...)进行播放

一般使用videoLAN播放器作为测试工具,用于测试音视频流发布状况

补充:

1、如果是采用nginx服务器,它提供的rtmp模块可以发布rtmp直播、录播及hls,nginx可以把ffmpeg整合进去方流媒体后期处理(加水印等)。

2、java是可以调用ffmpeg的,通过jni的方式有两种方法:

2.1、javaCV1.2支持通过javacpp调用ffmpeg,javaCV目前整合了8种流媒体处理框架,是安卓和javaEE平台不可或缺的强大流媒体处理利器

2.2、javaAV(目前最新0.7,release最新0.5)提供了对java调用ffmpeg的支持,当前已停止更新

补充:为什么没有基于原生java(或者说自带GC的语言)的流媒体框架,原因来自GC,也就是java引以为豪的自动垃圾回收机制(真的是成也萧何,败也萧何)

为什么呢?

大家知道,直播(顾名思义,实时视频转发),这种实时性项目会产生大量的对象,这样会导致两种情况:

1、产生大量对象后占据的内存资源得不到及时释放,于是虚拟机内存溢出。

2、产生大量对象导致GC满负荷运行进行资源回收,会严重占用系统资源,导致系统运行迟滞,影响系统运行性能和实时性等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值