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

大疆上云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_

相关文章:

  • Linux文件目录管理指令详解(上篇)
  • STM32学习笔记之存储器映射(原理篇)
  • Langchain 历史消息和会话管理
  • 简单一周日期展示及选择切换
  • 定时任务框架选型指南:Quartz、Elastic-Job 与 XXL-JOB 深度对比与场景实践
  • vue对文件进行加密,后台解密后保存
  • EFK日志分析
  • 操作系统 :Linux基础开发工具
  • LLM之Agent(十四)| 字节开源ComputerUse纯视觉驱动GUI 智能体模型 UI-TARS
  • file io(I)
  • 数据类设计_图片类设计之8_自由图形类设计_(前端架构)
  • 云资源开发学习应用场景指南,场景 1 云上编程实践平台
  • 【Linux网络(五)】传输层协议
  • 说说MyBatis一、二级缓存和Spring一二级缓存有什么关系?
  • Vue Router动态改变路由参数的两种方法
  • 装饰器模式介绍和典型实现
  • k8s常用命令
  • js的闭包
  • linux 运行脚本命令区别
  • Pinecone数据库介绍、Milvus数据库介绍
  • 网站开发的开发语言/如何快速被百度收录
  • 网站建设基础百度百科/互联网怎么打广告推广
  • 在线客服免费咨询/图片优化是什么意思
  • 珠海找工作哪个网站好/关键词排名优化易下拉软件
  • qq是什么公司开发的/seo排名助手
  • 广州优质网站排名公司/网络维护培训班