一、环境

1、开发环境:windows

2、开发工具:FFmpeg、nginx、nginx-rmtp-module

(链接  rtsp转u3m8提取码:fyc2 )

3、简介:Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。 nginx-rmtp-module是Nginx服务器的流媒体插件。nginx通过rtmp模块提供rtmp服务, ffmpeg推送一个rtmp流到nginx, 然后客户端通过访问nginx来收看实时视频流。

二.准备文件

Nginx、nginx-rmtp-module、FFmpeg和实例mp4视频

三、搭建实践

1、启动nginx服务器

1、进入windows的cmd  

2、cd nginx-1.7.11.3-Gryphon    //进入nginx的目录

3、nginx.exe -c conf\nginx-win-rtmp.conf   //运行rtmp配置文件 

注意:此时命令行会一直处于执行中 不用理会  也不要关闭

测试:浏览器输入localhost:8080  ,如果出现如下页面 说明配置nginx启动成功!

 2、配置FFmpeg

1、解压:将ffmpeg解压到指定目录 我这里是D:\ffmpeg

2、环境配置:右键我的电脑(win10是此电脑) -- 》 属性  --》 高级系统设置 --》高级 --》环境变量--》打开Path ,

  将 E:\BaiduNetdiskDownload\video\ffmpeg\ffmpeg\bin (你的ffmepg解压目录下的bin目录的绝对路径)添加到Path 路径下;具体方法不会的可以的百度 

3、测试:打开windows 的cmd (不要关闭前面的nginx) 输入ffmpeg -help 如果出现如下情况  说明配置成功

3、运行(RTSP转RTMP)

1、将下载的orange.mp4文件放到D盘的E:\BaiduNetdiskDownload\video目录文件夹内 。

2、新打开windows的cmd (不要关闭之前的ngnix)进入E:\BaiduNetdiskDownload\video目录内文件夹。

3、然后输入一下指令:

ffmpeg -re -i orange.mp4 -vcodec libx264 -acodec aac -f flv rtmp://你的ip地址:1935/live/home
//注意:192.168.1.125是我电脑的ip地址,需要替换成你的ip地址 (ip地址可通过cmd 的ipconfig指令获取)
//例如:ffmpeg -re -i orange.mp4 -vcodec libx264 -acodec aac -f flv rtmp://192.168.1.25:1935/live/home

4、电脑打开vlc播放器      输入地址:rtmp://你的ip地址:1935/live/home

5、然后先点击命令行回车 再点击播放 然后你就会看到文章开头的这张图 大功告成!

4、运行(RTSP转U3M8)

1、编写Java代码 其中rtsp:流地址与name:流名称

String m3u8 = "ffmpeg -rtsp_transport tcp -i "+rtsp+" -fflags flush_packets -max_delay 1 -an -flags -global_header -hls_time 1 -hls_list_size 3 -hls_wrap 3 -vcodec copy -s 216x384 -b 1024k -y E:\\BaiduNetdiskDownload\\video/test2.m3u8";
Process process = Runtime.getRuntime().exec("cmd /c start /b cmd.exe /k "+m3u8);

2、下面我给出一些dos常用命令给大家参考:
   cmd /c dir 是执行完dir命令后关闭命令窗口.
   cmd /k dir 是执行完dir命令后不关闭命令窗口.
   cmd /c start dir 会打开一个新窗口后执行dir指令,原窗口会关闭.
   cmd /k start dir 会打开一个新窗口后执行dir指令,原窗口不会关闭.

      常规调用方式:(这个肯定会弹出cmd窗口)

      Runtime.getRuntime().exec("cmd.exe   /C   start   D:\\test.bat");

      解决不弹框只需要“start”后面加一个参数“/b”就行:

      Runtime.getRuntime().exec("cmd.exe   /C   start   /b   D:\\test.bat");

3、然后执行程序(用一个main方法即可),出现下图即为成功。

 4. 前端直接使用video.js插件就行了

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>前端播放m3u8格式视频</title>
    <link href="https://vjs.zencdn.net/7.4.1/video-js.css" rel="stylesheet">
    <script src='https://vjs.zencdn.net/7.4.1/video.js'></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/videojs-contrib-hls/5.15.0/videojs-contrib-hls.min.js" type="text/javascript"></script>
    <!-- videojs-contrib-hls 用于在电脑端播放 如果只需手机播放可以不引入 -->
</head>
<body>
    <style>
        .video-js .vjs-tech {position: relative !important;}
    </style>
    <div>
        <video id="myVideo" class="video-js vjs-default-skin vjs-big-play-centered" controls preload="auto" data-setup='{}' style='width: 100%;height: auto'>
            <source id="source" src="http://1252093142.vod2.myqcloud.com/4704461fvodcq1252093142/48c8a9475285890781000441992/playlist.m3u8" type="application/x-mpegURL"></source>
        </video>
    </div>
    <div class="qiehuan" style="width:100px;height: 100px;background: red;margin:0 auto;line-height: 100px;color:#fff;text-align: center">切换视频</div>
</body>
 
<script>
    // videojs 简单使用
    var myVideo = videojs('myVideo', {
        bigPlayButton: true,
        textTrackDisplay: false,
        posterImage: false,
        errorDisplay: false,
    })
    myVideo.play()
    var changeVideo = function (vdoSrc) {
        if (/\.m3u8$/.test(vdoSrc)) { //判断视频源是否是m3u8的格式
            myVideo.src({
                src: vdoSrc,
                type: 'application/x-mpegURL' //在重新添加视频源的时候需要给新的type的值
            })
        } else {
            myVideo.src(vdoSrc)
        }
        myVideo.load();
        myVideo.play();
    }
    var src = 'http://1252093142.vod2.myqcloud.com/4704461fvodcq1252093142/f865d8a05285890787810776469/playlist.f3.m3u8';
    document.querySelector('.qiehuan').addEventListener('click', function () {
        changeVideo(src);
    })
</script>
四.结尾总结

本文总结了完整的RTSP转流技术栈,现在是用作windows系统,同理可以用作Linux系统。博主后面出一版Linux系统的部署方法。由于技术有限,难免有错误之处,希望博友可以不辞指正,也可在下方评论区留言,博主会及时回复。希望能帮到各位博友。