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

2023-05-16

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

群号:371249677 (点击这里进群)

一、本地推送端

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

javaCV系列文章:

javacv开发详解之1:调用本机摄像头视频

javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG、javaCV-openCV)

javaCV开发详解之3:收流器实现,录制流媒体服务器的rtsp/rtmp视频文件(基于javaCV-FFMPEG)

javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)

javaCV开发详解之5:录制音频(录制麦克风)到本地文件/流媒体服务器(基于javax.sound、javaCV-FFMPEG)

javaCV开发详解之6:本地音频(话筒设备)和视频(摄像头)抓取、混合并推送(录制)到服务器(本地)

javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)

补充篇:

音视频编解码问题:javaCV如何快速进行音频预处理和解复用编解码(基于javaCV-FFMPEG)

音视频编解码问题:16/24/32位位音频byte[]转换为小端序short[],int[],以byte[]转short[]为例

实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)

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

二、转流端

直播:通过ffmpeg(推荐),live555将接收rtsp或者字节码流并转为flv格式发布到rtmp流媒体服务器(流媒体服务器必须先建好)
hls原理同上
注意:rtmp只支持flv格式封装的视频流
ffmpeg服务实现方式实例请参考:
http://blog.csdn.net/eguid_1/article/details/51777716
http://blog.csdn.net/eguid_1/article/details/51787646
也可以参考javaCV的转流器实现: javaCV开发详解之4:转流器实现,实现rtsp/rtmp/本地文件转发到rtmp服务器   
java封装FFmpeg命令,支持原生ffmpeg全部命令,实现FFmpeg多进程处理与多线程输出控制(开启、关闭、查询),rtsp/rtmp推流、拉流

三、流媒体服务器

目前主流的流媒体服务器有: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。
补充:nginx-rtmp流媒体服务器搭建实例: http://blog.csdn.net/eguid_1/article/details/51749830

nginx-rtmp配置指令详细含义和用法:http://blog.csdn.net/eguid_1/article/details/51821297

四、播放端(收流端)

直播:通过flex(flash)播放器或者第三方播放器(videoJS,ckplayer,VideoLAN 等...)调用流媒体服务器的流媒体源解码并播放,如果不需要兼容低版本IE,可以采用HTML5的webSocket播放器,videoJS是flash/html5双核播放器。
视频:通过html自带播放器、flex(flash)播放器或者第三方播放器(videoJS,ckplayer,VideoLAN 等...)进行播放
videoJS/ckplayer播放器二次开发支持rtmp直播、hls直播及普通视频播放:http://blog.csdn.net/eguid_1/article/details/51898912
一般使用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满负荷运行进行资源回收,会严重占用系统资源,导致系统运行迟滞,影响系统运行性能和实时性等等。

转载于:https://www.cnblogs.com/eguid/p/6821614.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实时监控、直播流、流媒体、视频网站开发方案设计简要 的相关文章

随机推荐

  • 问题请教:关于同一个POD中多容器的广播信息问题

    广大博友好 xff0c 最近在K8S集群中遇到一个问题 xff0c 贴出来同大家分享一下 同一个POD中多个容器 如何处理广播信息 xff1f 经测试 同一个POD中当先启动的容器占用广播端口后 xff0c 其他的容器启动就会报bind e
  • JAVA在线观看视频教程完整版

    今天给大家介绍一下JAVA在线观看视频教程完整版 xff0c 我们知道Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言 xff0c 是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台
  • Dockerfile镜像的制作

    Dockerfile镜像的制作 如果学习Docker xff0c 那么制作镜像这一步肯定不能少的 xff0c 别人给你的是环境 xff0c 而你自己做的才是你最终需要的东西 xff0c 接下来就记录一下如何制作一个满足自己的镜像 xff0c
  • OpenWRT 编译教程

    1 安装Ubuntu 到 http www ubuntu org cn desktop get ubuntu download 下载 xff0c 版本随便 xff0c 我选的是10 10 32位版 安装过程就不说了 xff0c 图形化安装
  • 树莓派VNC搭建相关教程+Ubuntu16.04连接vncserver灰屏问题!

    树莓派VNC搭建相关教程 xff1a 为了节省money xff0c 于是我决定用VNC界面来代替显示器 xff0c 为后面做C 43 43 Qt以及Python Qt开发打下基础 xff0c 我别无选择 xff01 下面开始进入正题 xf
  • linux中wait系统调用

    系统中的僵尸进程都要由wait系统调用来回收 xff0c 下面就通过实战看一看wait的具体用法 xff1a wait的函数原型是 xff1a include lt sys types h gt 提供类型pid t的定义 include l
  • go 使用channel交叉打印奇偶数

    方法1 使用两个协程一个管道 xff0c 一个协程输入 xff0c 另一个协程接收 xff0c 保证i在两个协程中的值一样 package main import 34 fmt 34 34 sync 34 var wg sync WaitG
  • 事件冒泡机制和事件委派 以及回调的匿名函数参数

    1 事件冒泡机制 xff1a 事件冒泡机制也就是当一个事件绑定到一个元素上时 xff0c 如果这个元素不存在或者回调函数返回ture 那么这个事件就会向上冒泡 xff0c 继续绑定这个元素的父级元素直至document xff08 如果事件
  • Linux 内核硬件抽象

    我们结束 PCI 的讨论 通过快速看一下系统如何处理在市场上的多种 PCI 控制器 这只 是一个信息性的小节 打算来展示给好奇的读者 内核的面向对象分布如何向下扩展到最 低层 用来实现硬件抽象的机制是通常的包含方法的结构 它是一个很强功能的
  • 客户端服务器信息交互,select实现客户端和服务器端的信息交互(TCP socket)

    实现功能 xff1a 客户端 xff1a lt 1 gt 从标准输入 键盘 读入信息 xff0c 然后通过socket发送到服务器端 lt 2 gt 接收来自服务器端的信息 xff0c 并显示到终端里 服务器端 xff1a lt 1 gt
  • 软件测试人员在工作中如何运用Linux

    从事过软件测试的小伙们就会明白会使用Linux是多么重要的一件事 xff0c 工作时需要用到 xff0c 面试时会被问到 xff0c 简历中需要写到 对于软件测试人员来说 xff0c 不需要你多么熟练使用Linux所有命令 xff0c 也不
  • Ubuntu虚拟机可以上网,可以ping网络,但是无法update和install,报连接不上服务器的错误解决方案:...

    http askubuntu com questions 711889 err apt get update on ubuntu 14 04 br br br 即使给Ubuntu配置了代理 xff0c terminal能ping通网络 xf
  • JT∕T 905 -2014 出租汽车服务管理信息系统的相关协议研究

    出租汽车服务管理信息系统 xff08 JT T 905 2014 xff09 国家的相关技术要求2014年7月正式出台 xff0c 总体有四部分 xff0c 第 1 部分 xff1a 总体技术要求 xff1b 第 2 部分 xff1a 运营
  • 常用的DC插头公头的尺寸

    2 0 0 6mm xff1a 这种应该是用在诺基亚黑白屏那种手机上的充电插头 2 5 0 7mm xff1a 这种不知用在哪里 3 5 1 35mm xff1a 应该是以前那种小型的磁带机放音机上用的 4 0 1 7mm xff1a 已知
  • 链式队列总结

    基本数据结构之 链式队列 链式队列就是一个操作受到限制的单链表 xff0c 学会了单链表再来写这个就是轻松加愉快 xff0c 但是貌似我去用了两个小时搞定 xff0c 主要是基础差 xff01 队列的基本操作就是入栈和出栈 xff0c 还可
  • float c语言存储格式,float a=1.0f 这里的1.0f中的“f”代表什么 ?float的储存格式?...

    float a 61 1 0f 这里的1 0f中的 f 代表什么 xff0c 有什么意思 xff0c 在C语言里面 xff0c 解答详细点啊 xff01 xff01 xff01 f 代表这个数据是float类型的常量 xff0c 如果你直接
  • 简单实现一个go协程池

    协程池简单来说就是一个管道进 xff0c 一个管道出 xff0c 多个协程工作 实现一 xff1a 无顺序协程工作 package main import 34 fmt 34 var workerNum 61 3 func worker i
  • package.xml

    package xml 也是一个 catkin 的 package 必备文件 xff0c 它是这个软件包的描述文件 xff0c 在较早的 ROS 版本 rosbuild 编译系统 中 xff0c 这个文件叫做 manifest xml xf
  • docker-更新镜像

    更新镜像 更新镜像之前 xff0c 我们需要使用镜像来创建一个容器 w3cschool 64 w3cschool docker run t i ubuntu 15 10 bin bash root 64 e218edb10161 在运行的容
  • 实时监控、直播流、流媒体、视频网站开发方案设计简要

    欢迎大家积极开心的加入讨论群 群号 371249677 xff08 点击这里进群 xff09 一 本地推送端 1 本地 xff1a 采用javaCV xff08 安卓和java平台推荐javaCV xff09 ffmpeg openCV或者