研究了几天,终于把直播功能做完了,顿时心里压力少了许多。

起初,买了本视频直播的书,看了一下,好麻烦,不知道从何做起。看有没有简便的方法能够实现直播功能。要想通过简便的方法实现,就必须要了解直播的原理。

思路:通过硬件(比如摄像头,我这使用的是海康的摄像头)采集视频数据(视频编码是标准的视频编码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 实现摄像头的直播相关推荐

  1. 视频直播软件的技术实现方式(jwplayer+ffmpeg+red5)

    视频直播软件的技术实现方式(jwplayer+ffmpeg+red5), 视频直播目前非常火爆,各种视频直播软件,手机APP层出不穷,深受分头的青睐.视频直播技术基于RTMP及时流协议,点播技术基于H ...

  2. FFmpeg进行笔记本摄像头+麦克风实现流媒体直播服务,展示在浏览器上。

    0.本文中所用软件下载包 1.前置工作 1.1 下载 ffmpeg,Download FFmpeg, 1.1.1配置ffmpeg如下图 1.1.2测试ffmpeg 安装成功:ffmpeg -versi ...

  3. RED5 1.0视频直播服务器 WINDOWS安装记录 教程

    http://www.myhack58.com/Article/sort099/sort0100/2014/50048.htm RED5 1.0视频直播服务器 WINDOWS安装记录 教程 来源:本站 ...

  4. ffmpeg查看USB摄像头同时推流

    欢迎访问自建博客原文: http://www.e-lionel.com/index.php/2018/08/07/64/ 最近有个项目,需求是USB摄像头在观看画面的同时做直播,一直以来都是通过ffm ...

  5. 使用FFMpeg API 获取摄像头的图像数据

    文章目录 1. 获取摄像头的信息 2. 打开并初始化摄像头 3. 获取摄像头数据及渲染 摄像头是我们比较常用的外设,很多场景我们都会用到摄像头.比如视频直播.视频监控等各个领域都会用到摄像头.摄像头图 ...

  6. cefsharp 发送请求服务器_使用 WPF 版简易 SIP 服务器向 GB28181 摄像头发送直播请求...

    使用 WPF 版简易 SIP 服务器向 GB28181 摄像头发送直播请求 目录 一.引言 二.项目渊源 三.软件使用及 SIP INVITE 流程 (一) 注册和心跳 (二) 直播 INVITE 四 ...

  7. ffmpeg推送摄像头rtmp流

    /*** * 张晖 Hui Zhang* zhanghuicuc@gmail.com* 中国传媒大学/数字电视技术* Communication University of China / Digit ...

  8. Linux下用FFMPEG采集usb摄像头到RTMP

    Linux下用 FFMPEG 采集 usb摄像头视频 和 摄像头内置麦克风音频 到RTMP服务 ffmpeg -f video4linux2 -qscale 10 -r 12 -s 640x480 - ...

  9. FFmpeg+OpenCV 读取摄像头

    FFmpeg+OpenCV 读取摄像头 提供两种方式使用 FFmpeg 从摄像头中读取数据,并使用 OpenCV 显示视频帧. 读取摄像头 方法一 void VideoCapture() {avdev ...

  10. 摄像头网页服务器,网络摄像头实现直播的方法 在网页浏览器播放等于可以在网页传播...

    网络摄像头实现直播的方法,可以在网页浏览器播放,可以发送给你的朋友,可以放到你的官网去增加一条播放链接,可以在网页文章里增加一条播放链接.怎么实现呢? 需要的准备如下: 1.网络摄像头一个 2.电脑一 ...

最新文章

  1. oracle java api_oracle java api
  2. 住房要注意用电安全-记录一下失火
  3. SD-WAN为企业业务出海提供网络保障
  4. iAPP(05)自习室占座
  5. 验证码的产生 python
  6. 生产环境该如何选择lvs的工作模式,和哪一种算法
  7. mysql5.7组复制多主一从搭建_MySql5.7-多源复制(多主单从)
  8. sql server 2012远程链接的方法及步骤
  9. 天刀现在最新服务器,天涯明月刀8.21服务器更新公告
  10. 在eclipse安卓sqlite怎么用_把安卓手机性能发挥到极致之-Aid Learning
  11. 流媒体服务器 NTV Media Server G3 电视回看功能赏析
  12. Safari new Date()
  13. 比较版本号大小c语言,比较两个版本字符串version1和version2
  14. mysql安装手册(2)
  15. 函数式接口,方法引入
  16. 桌面点击鼠标右键一直显示转圈卡住如何解决
  17. 产品思维训练 | 常见的用户增长手段有哪些?
  18. Codeforces Round #476 (Div. 2) 题解
  19. 从混合云存储看阿里云对下一代企业计算架构的思考
  20. QQ游戏中心能力值抽大奖 抽奖得Q币 iPad QQ公仔等实物

热门文章

  1. Python进化算法之多目标优化与代码实战
  2. 【生活】换手机号需要更改哪些绑定
  3. Linux运维踩过的坑---Temporary failure in name resolution
  4. 五分钟学Java:一篇文章带你搞懂spring全家桶套餐
  5. 从阿里云迁移域名至 Amazon Route 53 帮你了解域名迁移
  6. 读取excel数据的方式整理
  7. linux怎么查看ip地址
  8. 【无人机三维路径规划】基于帝国企鹅算法实现无人机三维路径规划附matlab代码
  9. 【雅思大作文考官范文】——第八篇:recycling essay(垃圾回收)
  10. 川希:精准引流的本质,被动涨粉的秘密。