前言

由于近期项目需求,需实现在浏览器上实时预览接收UDP视频流信息。此功能若在VLC上可轻松播放,奈何由于Chrome、Firefox版本的升级,渐渐浏览器不支持外部插件,因而使用VLC web插件也成为泡影。在前辈指导下,采用FFmpeg + SRS + ckplayer的方式实现了该功能。

这种方式实现原理,主要是通过以下3个步骤完成:

1、FFmpeg将UDP视频流转换成rtmp流并推送至SRS服务器;

2、SRS作为rtmp服务器向其他客户端分发该视频流资源;

3、ckplayer作为客户端接收rtmp资源并播放视频。

环境准备

实验步骤

一、开启SRS rtmp服务器

见:RTMP部署实例

二、VLC模拟发送UDP视频流

1)选择一个视频作为UDP视频源

2)NEXT

3)选择以UDP协议的形式传输视频流

4)填入相应的IP地址及端口,这里IP为239.1.1.1组播地址,端口为2222

5)选择第一种形式进行转码 H.264+MP3(MP4) , 实测只有这种编码方式,ckplayer才能正常播放

6)点击Stream,开始传输视频流

三、ckplayer部署

  • 代码结构目录(web服务器目录下):
├── ckplayer
│   ├── ckplayer.js
│   ├── ckplayer.min.js
│   ├── ckplayer.swf
│   ├── ckplayer.xml
│   ├── language.xml
│   └── style.xml
├── ckplayer.zip
├── crossdomain.xml
├── definition.html
├── exec
│   ├── excel.php
│   └── stopFFmpeg.php
├── flashplayer.html
├── iframe.html
├── index.html
├── js
│   ├── bootstrap.min.js
│   ├── bootstrap-table.js
│   ├── intputGroup.js
│   ├── jquery-3.1.1.min.js
│   ├── jtopo-0.4.6-min.js
│   └── xx.html
├── material
│   ├── logo.png
│   ├── mydream_en1800_1010_01.png
│   ├── mydream_en1800_1010_02.png
│   ├── poster.jpg
│   └── srt.srt
├── README.md
└── test.html
  • flashplayer.html(用于播放rtmp流)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ckplayer</title>
<script type="text/javascript" src="ckplayer/ckplayer.js"></script>
<style type="text/css">body{margin:0;padding:0px;font-family:"Microsoft YaHei",YaHei,"微软雅黑",SimHei,"黑体";font-size:14px}</style>
<script src="js/jquery-3.1.1.min.js"></script>
</head> <body>
<div id="video" style="width: 1000px; height: 800px;"></div>
<script type="text/javascript">
var videoObject = {
container: '#video', //容器的ID或className
variable: 'player',//播放函数名称
flashplayer:true,
poster:'material/poster.jpg',//封面图片
loaded: 'loadedHandler',
video: 'rtmp://localhost/live/livestream'
}
var player = new ckplayer(videoObject);
</script>
</body>
</html>

四、FFmpeg接收UDP视频流,并转码成rtmp流发送至SRS服务器

  • 打开一个终端,输入以下命令,利用FFmpeg进行转码
ffmpeg -i udp://239.1.1.1:2222 -vcodec copy -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 rtmp://192.168.204.132/live/livestream

其中上述代码中 udp://239.1.1.1:2222 代表源视频流,rtmp://192.168.204.132/live/livestream 代表SRS rmtp服务器地址

  • 运行结果

五、用ckplay查看最终结果

ubuntu 14.04 下实现浏览器接收UDP视频流的更多相关文章

  1. 解决ubuntu 14.04 下eclipse 3.7.2 不能启动,报Could not detect registered XULRunner to use 或 org.eclipse.swt.SWTError: XPCOM 等问题的处理

    对于eclipse 3.7.2在ubuntu 14.04下不能启动,需要在 eclipse/configuration 目录下的config.ini文件内增加一行org.eclipse.swt.bro ...

  2. Ubuntu 14.04下java开发环境的搭建--3--Tomcat及MySQL的安装

    前面两篇文章,已经说明了JDK和Eclipse 的安装方法,下面简单说一下,Tomcat及MySQL的安装方法. Tomcat的安装. 在合适的地方解压apache-tomcat-6.0.39.tar ...

  3. Ubuntu 14.04 下搭建SVN服务器 svn://

    Ubuntu 14.04 下搭建SVN服务器 svn:// 安装软件包: sudo apt-get install subversion 之后选择SVN服务文件及配置文件的放置位置.我放在了/srv下 ...

  4. Ubuntu 14.04下安装功能强大的屏幕截图软件 Shutter

    [注释]试用了一下,果然很强大,牛逼 一款功能强大的屏幕截图软件——Shutter,Shutter最基本的就是截图功能了,在设计上可以自由选定区域,同时选定之 后依然可以通过上下左右四个地方来改变选区 ...

  5. Ubuntu 14.04安装Chromium浏览器并添加Flash插件Pepper Flas

    转自Ubuntu 14.04安装Chromium浏览器并添加Flash插件Pepper Flash Player Chromium谷歌的开源浏览器将不再支持Netscape浏览器插件API,Adobe ...

  6. Ubuntu 14.04 下手动安装Firefox的Flash插件

    有时候我们不得不採用手动安装一些软件. Ubuntu 14.04 下手动安装Firefox的Flash插件有下面几步 1. 下载Flash插件 下载地址为http://get.adobe.com/cn ...

  7. 分布式进阶(二)Ubuntu 14.04下安装Dockr图文教程(一)

    当前,完全硬件虚拟化技术(KVM.Xen.Hyper-V 等)能在一个物理主机上很好地运行多个互相独立的操作系统,但这也带来一些问题:性能不佳,资源浪费,系统反应迟缓等.有时候对用户来说,完全的硬件虚 ...

  8. Ubuntu 14.04 下安装 OpenCV

    参考: Installation in Linux Error compiling OpenCV, fatal error: stdlib.h: No such file or directory 图 ...

  9. Ubuntu 14.04 下搭建SVN服务器 (转载自 http://www.linuxidc.com/Linux/2015-01/111956.htm)-------------我所用到是红色字体

    http://www.linuxidc.com/Linux/2015-01/111956.htm Ubuntu 14.04 下搭建SVN服务器 svn:// 安装软件包: sudo apt-get i ...

随机推荐

  1. centos 7 双网卡建网桥脚本实现

    #!/bin/bash interface1=`ls /sys/class/net|grep en|awk 'NR==1{print}'` interface2=`ls /sys/class/net| ...

  2. 洛谷 P2762 太空飞行计划问题 P3410 拍照【最大权闭合子图】题解+代码

    洛谷 P2762 太空飞行计划问题 P3410 拍照[最大权闭合子图]题解+代码 最大权闭合子图 定义: 如果对于一个点集合,其中任何一个点都不能到达此集合以外的点,这就叫做闭合子图.每个点都有一个权 ...

  3. 微信小程序AES加密解密

    微信小程序  其实在调用一些第三方 js的时候 其实没有大家想的那么复杂,无非就是把原生js调用方式   改为微信小程序 js调用方式 废话不多说直接贴代码 其实就是将原生function 或者 对象 ...

  4. MYSQL 基础总结

    学习笔记 [mysql 是不区分大小写的,要区分可以用相应的函数:所有标点符号全是英文状态下的] 一.基础部分 //创建数据库 Create  database  database_name; //使 ...

  5. qt pro 设置编译参数,支持 xp

    #兼容 XP VS2015 5.01 版本 win32 { QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.01 QMAKE_LFLAGS_CONSOLE = ...

  6. UVA - 11995 I Can Guess the Data Structure!(模拟)

    思路:分别定义栈,队列,优先队列(数值大的优先级越高).每次放入的时候,就往分别向三个数据结构中加入这个数:每次取出的时候就检查这个数是否与三个数据结构的第一个数(栈顶,队首),不相等就排除这个数据结 ...

  7. Vue.directive 自定义指令的问题

    1.今天复习一下Vue自定义指令的代码,结果出现一个很无语的结果,先贴代码. 2. <div id="example" v-change-by="myColor&q ...

  8. ThreadLoacl,InheritableThreadLocal,原理,以及配合线程池使用的一些坑

    虽然使用AOP可以获取方法签名,但是如果要获取方法中计算得出的数据,那么就得使用ThreadLocal,如果还涉及父线程,那么可以选择InheritableThreadLocal. 注意:理解一些原理 ...

  9. 简单的GIT上传

    简单的GIT上传 上传项目时先新建一个 文件夹 mkdir test 然后在切换到test文件夹中然后把github 中的项目拷贝下来 git glone url 然后git init 查看文件 然后 ...

  10. Redis笔记4-持久化方案

    一:快照模式 默认redis是会以快照的形式将数据持久化到磁盘的(一个二进制文件,dump.rdb,这个文件名字可以指定),在配置文件中的格式是:save N M表示在N秒之内,redis至少发生M次 ...