流媒体方案,技术开源项目,包含Java调用FFMpeg(FFCH4J),推拉流服务器,nginx-http-flv-module,ckplayer,Flv.js,EasyPlayer.js集成
文章目录
- streaming_media
- 介绍
- ckplayer拉流播放
- 软件介绍
- 功能介绍
- 软件架构
- 安装教程
- 使用说明
- EasyPlayer.js拉流播放
- 简介
- 功能说明
- 集成使用示例
- 普通集成
- 实例化参数
- 录像播放相关属性
- 注意:currentTime属性只在播放录像m3u8 有结束标记(#EXT-X-ENDLIST)的的流时生效。
- 事件
- rtsp-web-converter----->flv.js拉流播放
- 转码RTSP,RTMP或其他格式的流用于h5播放
- SpringBoot---Javacv
- 转码接口
- 示列
- 性能消耗
- nginx-http-flv-module (推拉流转换)
- rtmp直播限流,鉴权,播放人数统计等功能
- nginx.conf配置文件示例
- FFCH4J(原用名:FFmpegCommandHandler4java)--Java调用FFMpeg命令
- 说明
- 特性
项目地址:Gitee:https://gitee.com/AiShiYuShiJiePingXing/streaming_media
streaming_media
流媒体系列博文及资料:
博客:爱是与世界平行:流媒体栏目
- 整理关于流媒体服务,直播平台,流媒体直播,RTSP,RTMP,Nginx-http-flv-module,FFMpeg等思维导图
- 个人学习过程中,收集总结全网的流媒体资源-----持续更新!!!!
- Flv.js全面解析
- 流媒体相关介绍
介绍
流媒体项目,实现在浏览器无插件形式播放视频,实现方式包含多种案例,将使用过的案例整合在一个项目之中,提供流媒体播放的方案参考!
ckplayer拉流播放
软件介绍
本软件为开源软件,遵守开源协议:MIT
功能介绍
用于在网页端播放视频,支持mp4,flv,m3u8及rtmp协议的直播,支持移动端,PC端
软件架构
软件分为两部分,1:javascript构建支持HTML5环境的播放器,2:actionscript3.0构建支持ie9以前支持flashplayer环境的播放器
安装教程
ckplayer不存在安装过程,将下载包里的ckplayer文件夹(该文件夹包含ckplayer.js,ckplayer.swf,ckplayer.json等文件)上传到网站环境中即可使用,在需要播放视频的页面上插入下面代码即可,注意引入ckplayer.js文件的路径
<script type="text/javascript" src="ckplayer/ckplayer.js" charset="utf-8" data-name="ckplayer"></script>
<div class="video" style="width: 600px;height: 400px;">播放器容器</div>
<script type="text/javascript">//定义一个变量:videoObject,用来做为视频初始化配置var videoObject = {container: '.video', //“#”代表容器的ID,“.”或“”代表容器的classvariable: 'player', //播放函数名称,该属性必需设置,值等于下面的new ckplayer()的对象video: 'http://ckplayer-video.oss-cn-shanghai.aliyuncs.com/sample-mp4/05cacb4e02f9d9e.mp4'//视频地址};var player = new ckplayer(videoObject);//初始化播放器
</script>
使用说明
使用过程中碰到问题,请至官网查看手册:http://www.ckplayer.com/manual/
EasyPlayer.js拉流播放
简介
EasyPlayer.js H5播放器,是一款能够同时支持HTTP、RTMP、HTTP-FLV、HLS(m3u8)视频直播与视频点播等多种协议,支持H.264、H.265、AAC等多种音视频编码格式,支持mse、wasm等多种解码方式,支持Windows、Linux、Android、iOS全平台终端的H5播放器。
功能说明
- 支持 HTTP-MP4 播放
- 支持 m3u8/HLS 播放;
- 支持 HTTP-FLV/WS-FLV 播放;
- 支持 H265 播放;
- 支持直播和点播播放;
- 支持全屏显示;
- 支持重连播放;
集成使用示例
普通集成
1.引入
copy EasyWasmPlayer.js 到项目中
copy libDecoder.wasm到项目或者www的根目录(一定要根目录)
2.在 html 中引用 EasyWasmPlayer.js
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>EasyWasmPlayer-Demo</title><script src="./EasyWasmPlayer.js"></script><style>.box {width:600px;height:400px;}</style>
</head>
<body><div class="box"><div id="Player"></div></div><script>// 实例化播放器var Player = new WasmPlayer(null,'Player',callbackFun,{cbUserPtr:this, decodeType:"auto", openAudio:1, BigPlay:false, Height:true});// 调用播放Player.play('url', 1)</script>
</body></html>
实例化参数
var player = new wasmPlayer(url,ID,callbackFun,{cbUserPtr:this, decodeType"auto" or “soft”, openAudio"1" or “0”, BigPlay"true" or “false”, Height:" true" or "false});
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
url | 视频地址 | String | null |
ID | 播放器实例的divID (必传) | String | - |
callbackFun | 事件回调 | function | - |
cbUserPtr | 自定义指针 (this的指向) | this | |
decodeType | 解码类型(auto:默认,soft:强制H265解码) | String | auto |
openAudio | 是否打开音频 | Boolean | false |
BigPlay | 是否开启大的播放按钮 | Boolean | false |
Height | 播放器尺寸是否继承父盒子的 | Boolean | false |
录像播放相关属性
注意:currentTime属性只在播放录像m3u8 有结束标记(#EXT-X-ENDLIST)的的流时生效。
play(url,autoplay,currentTime)
属性 | 说明 | 类型 | 默认值 |
---|---|---|---|
url | 播放流地址 | String | - |
autoplay | 是否自动播放 | Boolean | 默认0 |
currentTime | 视频开始时间(换算成秒) | Number | 默认this |
事件
方法名 | 说明 | 参数 |
---|---|---|
play | 播放事件 | url:‘流地址’,autoplay: ‘自动播放’,currentTime:‘开始时间’ |
pause | 播放暂停 | - |
destroy | 停止播放 | - |
openAudio | 打开声音 | - |
closeAudio | 关闭声音 | - |
startLoding | 开始加载动画 | - |
endLoding | 结束加载动画 | - |
fullScreen | 开启或退出全屏 | - |
rtsp-web-converter----->flv.js拉流播放
转码RTSP,RTMP或其他格式的流用于h5播放
SpringBoot—Javacv
测试页面:http://127.0.0.1:7081/flv.html
前端使用flvjs播放
转码接口
http://127.0.0.1:7081/live/{url}/live.flv url=base64(视频流地址)
(该接口直接响应flv格式视频流)
示列
var flvPlayer = flvjs.createPlayer({type: ‘flv’,url:‘http://127.0.0.1:7081/live/{base64加密后的流地址}/live.flv’,isLive: true});
flvPlayer.attachMediaElement(document.getElementById(id));
flvPlayer.load();
flvPlayer.play();
性能消耗
对于转包装方式一路流在i5 7500配置下cpu占用在1%左右
2020-07-17
更新了转码的方法,现在对输入的流没有任何要求了,对于符合H264,AAC的流会使用低性能消耗的转包装方式进行,其他格式会先进行转码操作
nginx-http-flv-module (推拉流转换)
rtmp直播限流,鉴权,播放人数统计等功能
nginx.conf配置文件示例
worker_processes 1; #运行在Windows上时,设置为1,因为Windows不支持Unix domain socket
#worker_processes auto; #1.3.8和1.2.5以及之后的版本#worker_cpu_affinity 0001 0010 0100 1000; #只能用于FreeBSD和Linux
#worker_cpu_affinity auto; #1.9.10以及之后的版本error_log logs/error.log error;#如果此模块被编译为动态模块并且要使用与RTMP相关的功
#能时,必须指定下面的配置项并且它必须位于events配置
#项之前,否则NGINX启动时不会加载此模块或者加载失败#load_module modules/ngx_http_flv_live_module.so;events {worker_connections 4096;
}http {include mime.types;default_type application/octet-stream;keepalive_timeout 65;server {listen 80;location / {root /var/www;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}location /live {flv_live on; #打开HTTP播放FLV直播流功能chunked_transfer_encoding on; #支持'Transfer-Encoding: chunked'方式回复add_header 'Access-Control-Allow-Origin' '*'; #添加额外的HTTP头add_header 'Access-Control-Allow-Credentials' 'true'; #添加额外的HTTP头}location /hls {types {application/vnd.apple.mpegurl m3u8;video/mp2t ts;}root /tmp;add_header 'Cache-Control' 'no-cache';}location /dash {root /tmp;add_header 'Cache-Control' 'no-cache';}location /stat {#推流播放和录制统计数据的配置rtmp_stat all;rtmp_stat_stylesheet stat.xsl;}location /stat.xsl {root /var/www/rtmp; #指定stat.xsl的位置}#如果需要JSON风格的stat, 不用指定stat.xsl#但是需要指定一个新的配置项rtmp_stat_format#location /stat {# rtmp_stat all;# rtmp_stat_format json;#}location /control {rtmp_control all; #rtmp控制模块的配置}}
}rtmp_auto_push on;
rtmp_auto_push_reconnect 1s;
rtmp_socket_dir /tmp;rtmp {out_queue 4096;out_cork 8;max_streams 128;timeout 15s;drop_idle_publisher 15s;log_interval 5s; #log模块在access.log中记录日志的间隔时间,对调试非常有用log_size 1m; #log模块用来记录日志的缓冲区大小server {listen 1935;server_name www.test.*; #用于虚拟主机名后缀通配application myapp {live on;gop_cache on; #打开GOP缓存,减少首屏等待时间}application hls {live on;hls on;hls_path /tmp/hls;}application dash {live on;dash on;dash_path /tmp/dash;}}server {listen 1935;server_name *.test.com; #用于虚拟主机名前缀通配application myapp {live on;gop_cache on; #打开GOP缓存,减少首屏等待时间}}server {listen 1935;server_name www.test.com; #用于虚拟主机名完全匹配application myapp {live on;gop_cache on; #打开GOP缓存,减少首屏等待时间}}
}
FFCH4J(原用名:FFmpegCommandHandler4java)–Java调用FFMpeg命令
FFCH4J项目全称:FFmpeg命令处理器,鉴于很多小伙伴们反馈原名太长,改为‘FFCH4J’
说明
Java封装的提供ffmpeg命令执行、停止、查询功能的简单管理器 。
FFCH4j不仅仅只支持ffmpeg命令,还支持执行多平台的命令行指令,不管是执行linux命令还是windows的命令行都是手到擒来(注意:本项目并未屏蔽某些敏感操作,比如rm -rf,当然这会产生一些风险,还请注意规避)。
除了保证命令行运行,还拥有独立的轻量级的保活线程来重启因为异常故障导致中断的任务。
特性
零依赖(不依赖任何第三方jar包,只需要java运行环境即可运行),完全接口化(所有内部组件都实现了完全接口化,开发人员可以方便的修改和扩展程序,比如自行实现持久层接口来替换默认的持久层)。
流媒体方案,技术开源项目,包含Java调用FFMpeg(FFCH4J),推拉流服务器,nginx-http-flv-module,ckplayer,Flv.js,EasyPlayer.js集成相关推荐
- 视频会议及流媒体十大开源项目
在视频会议领域,有许多可以值得参考的开源项目,这些开源项目有的是协议栈.有的是编码器或者是传输协议,由于视频会议系统是一个综合性的应用系统,里面包含功能较多,如能把这些开源项目选择性的加入我们的视频会 ...
- 开源流媒体解决方案,流媒体服务器,推拉流,直播平台,SRS,WebRTC,移动端流媒体,网络会议,优秀博客资源等分享
开源流媒体解决方案,流媒体服务器,推拉流,直播平台,SRS,WebRTC,移动端流媒体,网络会议,优秀博客资源等分享 一.优秀的流媒体博客资源 1.1 EasyNVR:专注于安防视频互联网化的技术 1 ...
- java调用ffmpeg把rtsp视频流保存为MP4文件
前言:最近需要把rtsp的视频流保存为MP4文件(就是录制直播流).刚开始用的javacv的FFmpegFrameGrabber和FFmpegFrameRecorder,但是声音流和视频流无法调整,声 ...
- java调用FFmpeg实现视屏压缩
前言 最近做人脸识别,对于过大的视屏(10M)以上,识别失败的几率比较大.找了下相关的视屏压缩资料.首先使用的是jave进行视屏压缩,但是踩坑失败,jave中有转码的过程,虽然压缩成功,各种压缩参数也 ...
- JAVA调用FFmpeg实现音视频转码加水印功能
目录 目录 写在前面 MAVEN引用 获取音视频基本信息 音频转码成Mp3格式 视频转码成Mp4格式 视频转码成Mp4并添加文字水印 视频转码成Mp4并添加图片水印 测试代码 写在前面 如今各大云厂商 ...
- Java调用FFmpeg实现视频录制
FFmpeg是一个很好用的开源的视频处理工具,网上也有一些java调用FFmpeg的方法,然而这些文章大部分都有一个共同的特点,就是用java去调用FFmpeg去做视频处理,几乎没有去做录制视频和音频 ...
- java命令截图,GitHub - xuege-cn/fmj: FMJ (FFMpeg for Java)。通过Java调用FFMpeg命令的方式来对音视频进行处理(获取信息、截图等等)。...
项目介绍 FMJ (FFMpeg for Java) 通过Java调用FFMpeg命令的方式来对音视频进行处理(获取信息.截图等等). FFMpeg安装 建议使用 ffmpeg-2.6.1 版本 Li ...
- mysql+视频文件转成流_详解java调用ffmpeg转换视频格式为flv
详解java调用ffmpeg转换视频格式为flv 注意:下面的程序是在Linux下运行的,如果在windows下rmvb转换成avi会出现问题,想成功需要下载下个drv43260.dll东西放到C:W ...
- Java调用ffmpeg进行视频.H264抽帧,并保存为图片
Java调用ffmpeg进行视频.H264抽帧,并保存为图片 1. 需求 2. 解决 3. 源码 参考 1. 需求 对视频 D:\data\01-test.H264进行抽帧并保存为图片,图片命名为1. ...
最新文章
- 服务压测发现怪异现象,一顿排查,揪出“TIME_WAIT”这个内鬼
- 讨厌别人不写注释,但自己也不爱写?那么试试这个IDEA的注释插件吧!
- 四年级下册英语计算机房和教师办公室的图片,PEP英语四年级下册-Unit-1思维导图及知识点梳理.pptx...
- LINUX正则表达式-- grep
- 聚焦“裂变”,又拍云推出直播云等多场景解决方案
- 入行Python需要看的4本书推荐
- 图形驱动程序和显卡驱动什么区别_什么是核心显卡,核心显卡和集成显卡的区别...
- python列表索引负数_python – 如何检查列表索引是否存在?
- springboot整合redis修改分区
- python operator __gt___Python operator.gt方法代码示例
- 信息学奥赛一本通 1315:【例4.5】集合的划分
- mybatis编写一个查询数据库表的程序
- 2018年个人的一些简单预测
- C#基础 面试中常出现的问题
- Android中实现全屏、无标题栏的两种办法(另附Android系统自带样式的解释)
- Translation 谷歌翻译失效问题
- python实现DBSCAN(密度聚类)算法
- pdf用什么软件打开
- iphone长截图哪个软件好_这可能是 iPhone 上最好用的长截图软件,你用过吗?
- 中南大学计算机学院王瑞,中南大学优秀毕业生.xls