jwplayer +ffmpeg+red5 实现摄像头的直播
研究了几天,终于把直播功能做完了,顿时心里压力少了许多。
起初,买了本视频直播的书,看了一下,好麻烦,不知道从何做起。看有没有简便的方法能够实现直播功能。要想通过简便的方法实现,就必须要了解直播的原理。
思路:通过硬件(比如摄像头,我这使用的是海康的摄像头)采集视频数据(视频编码是标准的视频编码H264),把视频流推送到red5服务器(我用的red5服务器,你也可以使用nginx服务器,都一样),在通过rtmp协议把推送到服务器的视频流读取过来,再本地实现播放(我用的jwplayer播放器进行播放,如何你想自己写客户端,可以通过actionscript语言去完成)
总结一下就是:如何通过jwplayer播放器播放推送到red5服务器的实时流。
有了思路,如何实现:
1、red5服务器先搭建起来,太简单了,此处不再赘述。
2、客户端通过jwplayer播放器进行播放,下载此插件。网上一搜,一大推。
剩下的问题就是,如何把摄像头的实时流推送到服务器。继续网上搜,搜到了ffmpeg这个工具。这个工具就可以实现推流。
3、下载ffmpeg.exe
一切准备就绪,就剩下代码的实现。
服务端:red5服务器启动,啥也不用动,最多下载个oflaDemo看看点播的效果。
客户端:jwplayer通过rtmp协议读取实时流。代码如下:
jwplayer("jwplayer_flv").setup({
file: "rtmp://192.168.1.29/oflaDemo//hello",
flashplayer: '${ctx}/resource/yulan/jwplayer.flash.swf',
image : '',
primary : 'flash',
width : '800',
height : '600',
autostart: true,
mute: false,
repeat: false
});
file: "rtmp://192.168.1.29/oflaDemo//hello" 这句话可以暂时不用管,看到后面就会知道啥意思。
流的推送:ffmpeg
推送命令:
ffmpeg -i "rtsp://admin:admin123@192.168.10.91:554/h264/ch1/main/av_stream" -b 4096k -f flv -r 25 -s1280x720 -an"rtmp://localhost/oflaDemo/hello"
这句话如何在java代码里实现呢?网上很多。
java代码(下面的代码是同事给的,毕竟代码跑过一段时间,应该没啥问题):
public void liveVideo() throws Exception {
String rtspVideo = "rtsp://admin:admin123@192.168.10.91:554/h264/ch1/main/av_stream";
String rtmpVideo = "rtmp://192.168.1.29/oflaDemo/hello";
String commend = FFMPEG+"ffmpeg -i " + "\"" + rtspVideo + "\" -b 4096k -f flv -r 25 -s 1280x720 -an " + "\"" + rtmpVideo + "\"";
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(commend);
StreamGobbler sg1 = new StreamGobbler(proc.getInputStream(), "Console");
StreamGobbler sg2 = new StreamGobbler(proc.getErrorStream(), "Error");
sg1.start();
sg2.start();
proc.waitFor();
proc.destroy();
}
public class StreamGobbler extends Thread {
InputStream is;
String type;
private Logger log = Logger.getLogger(this.getClass());
private static int i = 1;
private static int j = 1;
public StreamGobbler(InputStream is, String type) {
this.is = is;
this.type = type;
}
public StreamGobbler() {
}
public void run() {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
i++;
j++;
String line = null;
while ((line = br.readLine()) != null) {
if (type.equals("Error")) {
// log.error(line);
// System.err.println(line);
}else{
// log.info(line);
// System.out.println(line);
}
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
从代码可以看出,客户端的“file: "rtmp://192.168.1.29/oflaDemo//hello" 这段代码 和 java中"String rtmpVideo = "rtmp://192.168.1.29/oflaDemo/hello";" 这段代码就对应起来了。
不得不说,ffmpeg这个东西的确厉害。给实现直播功能省了不少事。
至此,一个直播功能就实现了。
说明:这只是我个人对直播理解,有些可能不对,我也是才看了几天,理解上肯定有些偏颇。各位大牛勿喷啊。小弟心脏不好。如有问题,可评论,吐槽。
最后在粘贴个直播的效果图:
jwplayer +ffmpeg+red5 实现摄像头的直播相关推荐
- 视频直播软件的技术实现方式(jwplayer+ffmpeg+red5)
视频直播软件的技术实现方式(jwplayer+ffmpeg+red5), 视频直播目前非常火爆,各种视频直播软件,手机APP层出不穷,深受分头的青睐.视频直播技术基于RTMP及时流协议,点播技术基于H ...
- FFmpeg进行笔记本摄像头+麦克风实现流媒体直播服务,展示在浏览器上。
0.本文中所用软件下载包 1.前置工作 1.1 下载 ffmpeg,Download FFmpeg, 1.1.1配置ffmpeg如下图 1.1.2测试ffmpeg 安装成功:ffmpeg -versi ...
- RED5 1.0视频直播服务器 WINDOWS安装记录 教程
http://www.myhack58.com/Article/sort099/sort0100/2014/50048.htm RED5 1.0视频直播服务器 WINDOWS安装记录 教程 来源:本站 ...
- ffmpeg查看USB摄像头同时推流
欢迎访问自建博客原文: http://www.e-lionel.com/index.php/2018/08/07/64/ 最近有个项目,需求是USB摄像头在观看画面的同时做直播,一直以来都是通过ffm ...
- 使用FFMpeg API 获取摄像头的图像数据
文章目录 1. 获取摄像头的信息 2. 打开并初始化摄像头 3. 获取摄像头数据及渲染 摄像头是我们比较常用的外设,很多场景我们都会用到摄像头.比如视频直播.视频监控等各个领域都会用到摄像头.摄像头图 ...
- cefsharp 发送请求服务器_使用 WPF 版简易 SIP 服务器向 GB28181 摄像头发送直播请求...
使用 WPF 版简易 SIP 服务器向 GB28181 摄像头发送直播请求 目录 一.引言 二.项目渊源 三.软件使用及 SIP INVITE 流程 (一) 注册和心跳 (二) 直播 INVITE 四 ...
- ffmpeg推送摄像头rtmp流
/*** * 张晖 Hui Zhang* zhanghuicuc@gmail.com* 中国传媒大学/数字电视技术* Communication University of China / Digit ...
- Linux下用FFMPEG采集usb摄像头到RTMP
Linux下用 FFMPEG 采集 usb摄像头视频 和 摄像头内置麦克风音频 到RTMP服务 ffmpeg -f video4linux2 -qscale 10 -r 12 -s 640x480 - ...
- FFmpeg+OpenCV 读取摄像头
FFmpeg+OpenCV 读取摄像头 提供两种方式使用 FFmpeg 从摄像头中读取数据,并使用 OpenCV 显示视频帧. 读取摄像头 方法一 void VideoCapture() {avdev ...
- 摄像头网页服务器,网络摄像头实现直播的方法 在网页浏览器播放等于可以在网页传播...
网络摄像头实现直播的方法,可以在网页浏览器播放,可以发送给你的朋友,可以放到你的官网去增加一条播放链接,可以在网页文章里增加一条播放链接.怎么实现呢? 需要的准备如下: 1.网络摄像头一个 2.电脑一 ...
最新文章
- oracle java api_oracle java api
- 住房要注意用电安全-记录一下失火
- SD-WAN为企业业务出海提供网络保障
- iAPP(05)自习室占座
- 验证码的产生 python
- 生产环境该如何选择lvs的工作模式,和哪一种算法
- mysql5.7组复制多主一从搭建_MySql5.7-多源复制(多主单从)
- sql server 2012远程链接的方法及步骤
- 天刀现在最新服务器,天涯明月刀8.21服务器更新公告
- 在eclipse安卓sqlite怎么用_把安卓手机性能发挥到极致之-Aid Learning
- 流媒体服务器 NTV Media Server G3 电视回看功能赏析
- Safari new Date()
- 比较版本号大小c语言,比较两个版本字符串version1和version2
- mysql安装手册(2)
- 函数式接口,方法引入
- 桌面点击鼠标右键一直显示转圈卡住如何解决
- 产品思维训练 | 常见的用户增长手段有哪些?
- Codeforces Round #476 (Div. 2) 题解
- 从混合云存储看阿里云对下一代企业计算架构的思考
- QQ游戏中心能力值抽大奖 抽奖得Q币 iPad QQ公仔等实物