当前位置: 首页 > article >正文

大疆上云api直播功能如何实现

概述

流媒体服务器作为直播画面的中转站,它接收推流端的相机画面,同时拉流端找它获取相机的画面。整个流程如下:

  • 在流媒体服务器上创建流媒体应用(app),一个流媒体服务器上面可以创建多个流媒体应用
  • 约定推拉流的地址。假设流媒体服务器工作在1935端口上面,假设创建的流媒体应用的唯一标识为 live01,那么我们可以约定推拉流地址为 rtmp://ip:1935/live01/{camera_id} ,其中camera_id 为唯一标识,用于区分每一个相机 。针对相机A的推拉流地址可以为:rtmp://ip:1935/live01/camera-A,同理针对相机B的推拉流地址可以为:rtmp://ip:1935/live01/camera-B
  • 推流端向 推拉流地址 推送直播流
  • 拉流端从 推拉流地址 拉取直播流播放

出于技术调研的目的,将使用OBS作为上述流程中的推流端;将使用Nginx作为上述流程中的流媒体服务器;将使用ffplay、VLC、flv.js作为上述流程中的拉流端。那么整个流程的落地实践就变成了:

在这里插入图片描述

  • 使用Nginx搭建流媒体服务器,需要基于源码编译 nginx-http-flv-module 模块
  • 在nginx.conf 中创建媒体应用,并做相应的配置,包括对hls(即m3u8)的支持,http-flv的支持
  • 约定推拉流的地址
  • OBS向推拉流地址推送流
  • ffplay拉取直播画面并播放,rtmp协议
  • VLC拉取直播画面并播放,rtmp协议、hls协议
  • 使用基于flv.js 的视频播放器播放直播画面,http协议

基于源码编译安装nginx-http-flv-module

参考之前写的:使用Nginx搭建流媒体服务器

创建流媒体应用

当安装好了 nginx-http-flv-module 之后,就可以创建流媒体应用了。

所谓的创建流媒体应用其实就是编写 nginx 的配置文件,如果需要创建一个名为live 的流媒体应用,那么可以在nginx.conf 中做如下配置:

# 以下内容放可在 nginx.conf 的最后,rtmp 配置块为顶级配置块
rtmp_auto_push on ;

rtmp {
   server {
        listen 1935; #监听的端口
        notify_method get;
        chunk_size 4000;
        application live { #rtmp推流请求路径
            live on;
            # 添加 hls 支持
            hls on;
            hls_path /usr/local/nginx/html/hls;
            hls_fragment 3;
            hls_playlist_length 60;

            # 允许从任何源push 流
            allow publish  all ;
            # 允许从任何地方来播放流
            allow play all;
            # 20s内没有push,就断开连接
            drop_idle_publisher 20s ;
        }
 }
}
  • listen 1935:指定流媒体服务器的运行端口
  • live :为流媒体应用的应用的名称,也即流媒体应用的唯一标识
  • live on : 添加直播的支持
  • hls_path:指定生成的m3u8文件的位置

创建http-flv端点和hls端点

创建http-flv端点和hls端点的目的是让直播流可以在http协议上面传输直播画面。

若不创建,将仅可以使用rtmp协议拉流,即rtmp://ip:1935/live/stream_no;若创建了就可以使用hls或者flvjs来拉流播放了。

创建http-flv端点和hls端点同样是编辑nginx.conf来实现,如下示例配置:

http {
    ......
    server {
        listen  82;
        server_name  rtmpserver;

        # 创建hls端点
        location /hls {
            add_header 'Access-Control-Allow-Origin' '*' ;
            add_

http://www.kler.cn/a/610290.html

相关文章:

  • odata 搜索帮助
  • LangChain开发(六)多模态输入与自定义输出
  • leetcode238.除自身意外数组的乘积
  • 解决GLIBC不兼容问题
  • 查看linux系统文件描述符限制
  • abp vnext框架重写volo.abp.openiddict的tokenController登录验证
  • 【MySQL】用户账户、角色、口令、PAM
  • 一文速通Python并行计算:03 Python多线程编程-多线程同步(上)—基于互斥锁、递归锁和信号量
  • vue 封装 Axios菜鸟教程
  • C++学习之路:从头搞懂配置VScode开发环境的逻辑与步骤
  • P1464 Function —— 洛谷
  • C++:重载操作符
  • django入门教程之cookie和session【六】
  • Pyecharts入门之绘制地图数据
  • 云端存储新纪元:SAN架构驱动的智能网盘解决方案
  • 高维小样本数据的在线流特征选择
  • LangChain开发(二)LangChain提示词模板Template使用
  • LeetCode Hot 100 - 矩阵 | 73.矩阵置零、54.螺旋矩阵、48.旋转图像、240.搜索二维矩阵II
  • STM32F103_LL库+寄存器学习笔记03 - GPIO设置输入模式,并轮询GPIO的电平状态
  • Day15 -实例 端口扫描工具 WAF识别工具的使用