文章目录

  • 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集成相关推荐

  1. 视频会议及流媒体十大开源项目

    在视频会议领域,有许多可以值得参考的开源项目,这些开源项目有的是协议栈.有的是编码器或者是传输协议,由于视频会议系统是一个综合性的应用系统,里面包含功能较多,如能把这些开源项目选择性的加入我们的视频会 ...

  2. 开源流媒体解决方案,流媒体服务器,推拉流,直播平台,SRS,WebRTC,移动端流媒体,网络会议,优秀博客资源等分享

    开源流媒体解决方案,流媒体服务器,推拉流,直播平台,SRS,WebRTC,移动端流媒体,网络会议,优秀博客资源等分享 一.优秀的流媒体博客资源 1.1 EasyNVR:专注于安防视频互联网化的技术 1 ...

  3. java调用ffmpeg把rtsp视频流保存为MP4文件

    前言:最近需要把rtsp的视频流保存为MP4文件(就是录制直播流).刚开始用的javacv的FFmpegFrameGrabber和FFmpegFrameRecorder,但是声音流和视频流无法调整,声 ...

  4. java调用FFmpeg实现视屏压缩

    前言 最近做人脸识别,对于过大的视屏(10M)以上,识别失败的几率比较大.找了下相关的视屏压缩资料.首先使用的是jave进行视屏压缩,但是踩坑失败,jave中有转码的过程,虽然压缩成功,各种压缩参数也 ...

  5. JAVA调用FFmpeg实现音视频转码加水印功能

    目录 目录 写在前面 MAVEN引用 获取音视频基本信息 音频转码成Mp3格式 视频转码成Mp4格式 视频转码成Mp4并添加文字水印 视频转码成Mp4并添加图片水印 测试代码 写在前面 如今各大云厂商 ...

  6. Java调用FFmpeg实现视频录制

    FFmpeg是一个很好用的开源的视频处理工具,网上也有一些java调用FFmpeg的方法,然而这些文章大部分都有一个共同的特点,就是用java去调用FFmpeg去做视频处理,几乎没有去做录制视频和音频 ...

  7. java命令截图,GitHub - xuege-cn/fmj: FMJ (FFMpeg for Java)。通过Java调用FFMpeg命令的方式来对音视频进行处理(获取信息、截图等等)。...

    项目介绍 FMJ (FFMpeg for Java) 通过Java调用FFMpeg命令的方式来对音视频进行处理(获取信息.截图等等). FFMpeg安装 建议使用 ffmpeg-2.6.1 版本 Li ...

  8. mysql+视频文件转成流_详解java调用ffmpeg转换视频格式为flv

    详解java调用ffmpeg转换视频格式为flv 注意:下面的程序是在Linux下运行的,如果在windows下rmvb转换成avi会出现问题,想成功需要下载下个drv43260.dll东西放到C:W ...

  9. Java调用ffmpeg进行视频.H264抽帧,并保存为图片

    Java调用ffmpeg进行视频.H264抽帧,并保存为图片 1. 需求 2. 解决 3. 源码 参考 1. 需求 对视频 D:\data\01-test.H264进行抽帧并保存为图片,图片命名为1. ...

最新文章

  1. 服务压测发现怪异现象,一顿排查,揪出“TIME_WAIT”这个内鬼
  2. 讨厌别人不写注释,但自己也不爱写?那么试试这个IDEA的注释插件吧!
  3. 四年级下册英语计算机房和教师办公室的图片,PEP英语四年级下册-Unit-1思维导图及知识点梳理.pptx...
  4. LINUX正则表达式-- grep
  5. 聚焦“裂变”,又拍云推出直播云等多场景解决方案
  6. 入行Python需要看的4本书推荐
  7. 图形驱动程序和显卡驱动什么区别_什么是核心显卡,核心显卡和集成显卡的区别...
  8. python列表索引负数_python – 如何检查列表索引是否存在?
  9. springboot整合redis修改分区
  10. python operator __gt___Python operator.gt方法代码示例
  11. 信息学奥赛一本通 1315:【例4.5】集合的划分
  12. mybatis编写一个查询数据库表的程序
  13. 2018年个人的一些简单预测
  14. C#基础 面试中常出现的问题
  15. Android中实现全屏、无标题栏的两种办法(另附Android系统自带样式的解释)
  16. Translation 谷歌翻译失效问题
  17. python实现DBSCAN(密度聚类)算法
  18. pdf用什么软件打开
  19. iphone长截图哪个软件好_这可能是 iPhone 上最好用的长截图软件,你用过吗?
  20. 中南大学计算机学院王瑞,中南大学优秀毕业生.xls

热门文章

  1. ABLIC推出S-191ExxxxS系列车载高耐压窗口模式电池监测IC
  2. 酷乐天气开发总结记录7
  3. 游戏是怎么赚钱的 - 聊聊黑产
  4. 26个免费矢量图片免费下载
  5. 兰亭集势8555万美元收购东南亚跨境电商平台Ezbuy
  6. 免费点亮手机腾讯网图标_不用手机照样点亮
  7. 2.2.3 VLAN 间路由配置命令
  8. 浅谈同轴分流器之电阻功率系数
  9. LoadRunner测试某网站ppmm的图片
  10. 网格布局(grid layout)基础