欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ngnix+rtmpModule+ffmpeg实现直播流媒体服务器,并于java后台关联

程序员文章站 2022-03-17 14:45:21
...

1、ngnix+rtmpModule+ffmpeg安装配置

1.1、安装环境

1.2、ngnix安装

  • ngnix必要库安装

    yum -y install openssl-devel pcre pcre-devel zlib zlib-devel gcc gcc-c++ glibc glibc-devel

    其他缺少的库根据编译错误提示安装

  • ngnix安装和配置

    1、解压ngnix1.12.2

    tar -zxvf ngnix1.12.2.tar.gz
    unzip ngnix-rtmp-module.zip

    2、配置安装

    cd ngnix1.12.2
    ./configure –add-module=/homt/root/nginx-rtmp-module
    make
    make install

    3、修改配置文件

    vi conf/ngnix.conf

    
    #在最外层增加如下配置
    
    rtmp {
        server {
            listen 1935;
    
           #rtmp配置
            application live{
                live on;
                #开始推流回调,url地址为java接口
                on_publish http://192.168.1.62:9001/hello;
                #推流停止回调,url地址为java接口
                on_done http://192.168.1.62:9001/hello;
            }
    
            #hls配置
            application hls {
                live on;
                hls on;
                hls_path /tmp/hls;
                #开始推流回调,url地址为java接口
                on_publish http://192.168.1.62:9001/hello;
                #推流停止回调,url地址为java接口
                on_done http://192.168.1.62:9001/hello;
            }
        }
    }

1.3、java后台

只做了个简单测试,可根据这些参数完善后台,实现用户推流开始把用户ID和推流地址存入redis或其他高性能存储,前台展示当前直播的用户,点击用户返回推流地址,实现直播,测试代码如下,用spring boot写的

@RestController
@SpringBootApplication
public class DemoApplication {

    @RequestMapping("/hello")
    public String hello(HttpServletRequest request) {
        Map<String, String[]> parameterMap = request.getParameterMap();
        System.out.println("参数数量:"+parameterMap.size());
        /**这三个参数是比较有用的参数
             tcurl:rtmp地址
             name:"rtmp://ngnix服务器地址/live/id"地址中去除推流地址的最后一个参数,可传入直播用户ID
             type:推流类型
        */
        System.out.println("tcurl:"+request.getParameter("tcurl"));
        System.out.println("name:"+request.getParameter("name"));
        System.out.println("type:"+request.getParameter("type"));
        //打印所有回调传过来的参数
        for(Entry<String, String[]> entry : parameterMap.entrySet()) {
            System.out.println(entry.getKey() + "====================");
            for(String str : entry.getValue()) {
                System.out.println("\t"+str);
            }
        }

        return "hello world2";
    }

    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(DemoApplication.class);
        app.setBanner(new BannerInfo());
        app.run(args);
    }
}

1.4、测试

1.4.1、使用ffmpeg把一个文件转为rtmp流

ffmpeg -re -i F:\1.wmv -c:v libx264 -preset veryfast -maxrate 3000k -bufsize 6000k -pix_fmt yuv420p -g 50 -c:a aac -b:a 160k -ac 2 -ar 44100 -f flv rtmp://ngnix服务器地址/live/1

java后台打印结果

参数数量:9
tcurl:rtmp://192.168.1.10:1935/live
name:1
type:live
app====================
    live
flashver====================
    FMLE/3.0 (compatible; Lavf58.5.
swfurl====================

tcurl====================
    rtmp://192.168.1.10:1935/live
pageurl====================

addr====================
    192.168.1.62
clientid====================
    410
call====================
    publish
name====================
    1

1.4.2、然后使用vlc打开,测试成功

ngnix+rtmpModule+ffmpeg实现直播流媒体服务器,并于java后台关联

1.5、结尾

到此一个简单的直播平台就可以实现了,虽然不是一个完整的例子,但是核心就是以上这些,大家可以在次基础上扩展,因为本人目前并没有应用场景,只是空闲时间了解了一些这块的一些相关东西,做了一下整理,方便以后使用,有什么不妥的地方希望大家指正,共同学习

相关标签: 直播 rtmp

上一篇: HTML的

标签

下一篇: Javascript 编码规范(总结)