Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1784948
  • 博文数量: 226
  • 博客积分: 8233
  • 博客等级: 中将
  • 技术积分: 3514
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-18 22:54
文章分类
文章存档

2019年(3)

2018年(7)

2017年(2)

2012年(8)

2011年(67)

2010年(45)

2009年(94)

分类: 服务器与存储

2018-10-16 17:02:58

之前是通过vlc插件来显示rtsp流视频,但是限制很多:1.要安装vlc的插件2.插件目前只支持ie,像chrome在46版本之后根本就无法使用,于是上网搜索得出rtsp->rtmp->videoJS这样的一个方案,具体流程如下:


一.rtsp转rtmp


1.首先测试rtsp链接是否有效,这里用的vlc midia player:


如下图所示 媒体->打开网络串流->输入rtsp链接->播放,正常的话就可以看到画面了。



2.接下来就是转换,用的是nginx-rtmp-module+Ffmpeg的方案,首先下载nginx-rtmp-module(),按照说明双击nginx.exe启动nginx,正常的话浏览器输入就可以进demo,chrome记得要允许允许flash。


FFmpeg转码用的这个方案 java封装FFmpeg命令,下载好后不改源码的话直接引入FFmpegCommandHandler.jar这个jar包即可。


启动转码的代码:

点击(此处)折叠或打开

  1. @Override
  2. public String startTranscoding(Camera camera) {
  3.     String ip = camera.getIp();
  4.     String id = "fourfour";
  5.     if (manager == null) {
  6.         manager = new FFmpegManagerImpl();
  7.     }
  8.     Map map = new HashMap<>();
  9.     map.put("appName", id);
  10.     map.put("input", "rtsp://admin:admin1234@" + ip + ":554");
  11.     map.put("output", "rtmp://localhost/live/");
  12.     map.put("codec", "h264");
  13.     map.put("fmt", "flv");
  14.     map.put("fps", "25");
  15.     map.put("rs", "640x360");
  16.     map.put("twoPart", "0");
  17.     // 执行任务,id就是appName,如果执行失败返回为null
  18.     return manager.start(map);
  19. }

代码运行日志截图:

可以看到执行的命令,具体参数就不做解释了,可以自行百度;这样我们就获得了rtmp://localhost/live/fourfour这个rtmp流。
同样的我们可以先用vlc media player先测试下这个流,操作方法同上:



顺利的话将会出现画面。


3.前端显示


前端主流的有jwplayer、videoJS等方案,这里选择的免费的VideoJS,主要代码如下:

点击(此处)折叠或打开

  1. //videoJS播放器实例
  2. var player = null;
  3.  
  4. //通过videoJs进行rtmp播放
  5. $scope.rtmpReview = function (decoder) {
  6.     console.log("点解的decoder", decoder);
  7.     if (decoder.style === 1) {
  8.         var cameraIp = decoder.head;
  9.         var id = "fourfour";
  10.         $http.post("/decoder/decoderManager/transcode", {ip:cameraIp}).success(function (data) {
  11.             console.log("transcode:", data);
  12.  
  13.         }).error(function (data) {
  14.             console.log(data);
  15.         });
  16.  
  17.         $("#videoBody").append(
  18.             "" +
  19.             "" +
  20.             "
  21. To view this video please enable JavaScript, and consider upgrading to a web browser that" +
  22.             "supports HTML5 video" +
  23.             "

  24. ");
  25.  
  26.         var videoUrl = "rtmp://localhost/live/" + id;
  27.         player = videojs('my-video1');
  28.  
  29.         videojs('my-video1', {
  30.             controls: true,
  31.             autoplay: true,
  32.             preload: 'auto'
  33.         }, function () {
  34.             player.src(videoUrl);
  35.             player.load(videoUrl);
  36.             player.play();
  37.  
  38.             this.on('ended', function() {
  39.                 videojs.log('A so soon?!');
  40.             });
  41.         });
  42.  
  43.         $("#videoWatchModal").modal({show: true, keyboard: false, backdrop: 'static'});
  44.     }
  45. };

这里是将播放器放在了模态框上,效果如下:


好了,这样我们就实现了rtsp在浏览器中播放的一整套流程。
--------------------- 
作者:方块糖 
来源:CSDN 
原文:https://blog.csdn.net/gui66497/article/details/78590190?utm_source=copy 
版权声明:本文为博主原创文章,转载请附上博文链接!
阅读(36916) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~