RTSP协议学习Ubuntu环境准备

news/2024/5/2 1:10:04/文章来源:https://blog.csdn.net/e891377/article/details/127691630

文章目录

  • RTSP协议学习Ubuntu环境准备
  • RTSP协议概述
  • Ubuntu环境准备
  • 一、Ubuntu安装FFmpeg
  • 二、安装ZLMediaKit
    • 1、获取代码
    • 2、强烈推荐
    • 3、编译器
      • 3.1、编译器版本要求
      • 3.2、安装编译器
    • 4、cmake
    • 5、依赖库
      • 5.1、依赖库列表
      • 5.2、安装依赖库
    • 6、构建和编译项目
    • 7、运行
    • 8、测试
  • 三、测试
    • 推流测试
    • 观察日志
    • 播放地址
  • 参考资料

RTSP协议学习Ubuntu环境准备

RTSP协议概述

实时流传输协议(RTSP:Real Time Streaming Protocol)是⼀种网络传输协议,旨在发送低延迟流。该协议由RealNetworks,Netscape和哥伦⽐亚⼤学的专家在1996年开发。它定义了应如何打包流中的数据以进行传输。
在这里插入图片描述
其实上,RTP协议也是应用层的,这里只是逻辑上划到了传输层。

Ubuntu环境准备

一、Ubuntu安装FFmpeg

下载FFmpeg 4.4.3源码到Ubuntu

  1. cd 到下载的ffmpeg文件执行命令,生成编译脚本;

    解压

        tar -zxvf ffmpeg-4.4.3.tar.gzcd ffmpeg-4.4.3
    

    生成makefile脚本

     ./configure --prefix=/usr/local/ffmpeg --enable-debug=3 --enable-libx264 --enable-gpl  --enable-shared
    
    • prefix可以指定安装的本地电脑的路径
    • enable-debug表示可以允许在开发时调试
    • disable-static关闭静态库
    • enable-shared 打开动态库,这个enable-shared 要写在最后面,不然会报错。比如你可能把libfdk_aac编码器加进去,就把–enable-libfdk-aac写在shared的前面;
  • 这里用到的x264要提前安装sudo apt-get install libx264-dev
  1. 指定多个进程进行编译

    make -j 4 
    

    指定多个进程进行编译,加快编译速度,如果电脑是单核的设置多少都是一样的;

  2. 安装

    sudo make install 
    

    加sudo是因为安装的目录地址可能有读写权限问题

    如果直接ffmpeg -v会发现找不到命令,还要进行如下操作。

  3. 设置链接

    ln -s /usr/local/ffmpeg/bin/ffmpeg /usr/bin/ffmpeg
    ln -s /usr/local/ffmpeg/bin/ffprobe /usr/bin/ffprobe
    ln -s /usr/local/ffmpeg/bin/ffplay /usr/bin/ffplay
    
  4. 添加库路径

    sudo touch /etc/ld.so.conf.d/ffmpeg.conf #在其中添加路径:/usr/local/ffmpeg/lib

  5. 链接

     sudo ldconfig 
    

    ffmpeg -v查看安装情况

    ldconfig命令的用途:主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件。缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表。

二、安装ZLMediaKit

1、获取代码

请不要使用 github 下载 zip 包的方式下载源码,务必使用 git 克隆 ZLMediaKit 的代码,因为 ZLMediaKit 依赖于第三方代码,zip 包不会下载第三方依赖源码,你可以这样操作:

#国内用户推荐从同步镜像网站gitee下载 
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
cd ZLMediaKit
#千万不要忘记执行这句命令
git submodule update --init

2、强烈推荐

如果你是位新手,强烈建议使用 ubuntu16 或更新版本编译 ZLMediaKit,macOS 是次选推荐平台,最不推荐的是 centos6.* 或 windows 平台。

3、编译器

3.1、编译器版本要求

ZLMediaKit 采用了 C++11 的语法和库,要求编译器支持完整的 C++11 标准,亦即:

  • linux 上要求 gcc 版本 >= 4.8(4.7 应该也能支持)
  • macOS 上 clang >= ???(我也不知道,估计大部分不会遇到这个问题)
  • windows 上 visual stuido >= 2015(vs2013 某些版本也能编译通过,如果怕麻烦建议直接 vs2017)

3.2、安装编译器

  • 如果你是 debian 系操作系统 (包括 ubuntu 系用户),一般自带的 gcc 版本够新,你可以这样安装 gcc 编译器:

    sudo apt-get install build-essential
    
  • 如果你是 centos7 或以上用户,你可以这样安装 gcc 编译器:

    sudo yum -y install gcc
    sudo yum -y install gcc-c++
    
  • 如果你是 centos6.* 用户,你可以这样安装 gcc 编译器:

    sudo yum install centos-release-scl -y
    sudo yum install devtoolset-4-toolchain -y
    #切换到高版本gcc
    scl enable devtoolset-4 bash
    
  • 如果你是 macOS 用户,你直接安装 xcode 即可。

  • 如果你是 windows 用户,推荐安装 vs2017 或以上。

4、cmake

ZLMediaKit 采用 cmake 来构建项目,通过 cmake 才能生成 Makefile(或 Xcode/VS 工程),所以必须先安装 cmake 才能完成后续步骤。

  • 如果你是 debian 系操作系统 (包括 ubuntu 系用户),一般自带的 cmake 版本够新,你可以这样安装 cmake

    sudo apt-get install cmake
    
  • 如果你是 centos7 或以上用户,你也许可以这样安装 cmake:

    sudo yum -y install cmake
    
  • 如果你是 centos6.* 用户,那么你需要下载新版本的 cmake 源码然后编译安装 cmake

    wget https://github.com/Kitware/CMake/releases/download/v3.17.0-rc3/cmake-3.17.0-rc3.tar.gz
    tar -xvf cmake-3.17.0-rc3.tar.gz
    cd cmake-3.17.0-rc3
    ./configure
    make -j4
    sudo make install
    
  • 如果你是 macOS 用户,你可以这样安装 cmake:

  • 如果你是 windows 用户,并且 vs 版本为 2017 及以上,你不用单独安装 cmake,否则你需要安装 cmake-gui:

    #安装win64版本cmake
    https://github.com/Kitware/CMake/releases/download/v3.17.0-rc3/cmake-3.17.0-rc3-win64-x64.zip#安装win32版本cmake
    https://github.com/Kitware/CMake/releases/download/v3.17.0-rc3/cmake-3.17.0-rc3-win32-x86.zip
    

5、依赖库

5.1、依赖库列表

ZLMediaKit 可选依赖一些第三方库,这些库都不是必选的;在构建 ZLMediaKit 时,cmake 能查找系统路径中的这些库,并根据安装情况选择是否开启相关特性,你可以选择安装这些依赖并启用相关特性:

  • openssl

    • flash player 在播放 rtmp 时,采用的是复杂握手模式,如果不安装该库,flash player 将播放不了 zlmediakit 提供的 rtmp url.

    • 同时 ZLMediaKit 的 https/rtsps/webrtc 相关功能需要使用 openssl 才能开启。

  • ffmpeg

    zlmediakit 可以通过 fork ffmpeg 进程的方式实现多种协议的拉流,编译时不需要安装 FFmpeg。

  • sdl、avcodec、avutil

    这 3 个库供 ZLMediaKit 的 test_player 测试程序使用,你通常不需要安装这 3 个库。

5.2、安装依赖库

  • Debian 系 (包括 ubuntu)系统下安装依赖的方法:

    #除了openssl,其他其实都可以不安装
    sudo apt-get install libssl-dev
    sudo apt-get install libsdl-dev
    sudo apt-get install libavcodec-dev
    sudo apt-get install libavutil-dev
    sudo apt-get install ffmpeg
    
  • centos6.* 的用户可以参考该文章

  • macOS/centos 下安装依赖库:

    基本安装方式跟 Debian 系安装差不多,安装命令分别改成 brew / yum 即可。但是有些库名字与 Debian 系不太一样,请自行查找相关资料。

  • windows 下安装依赖库

    • 安装 openssl

      请从网站中下载。

6、构建和编译项目

由于开启 webrtc 相关功能比较复杂,默认是不开启编译的,如果你对 zlmediakit 的 webrtc 功能比较感兴趣,可以参考这里

  • 在 linux 或 macOS 系统下, 你应该这样操作:

    cd ZLMediaKit
    mkdir build
    cd build
    #macOS下可能需要这样指定openss路径:cmake .. -DOPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2j/
    cmake ..
    make -j4
    
  • 在 windows 系统下

    • 如果你是 vs2017 或以上,可以在 vs 菜单栏中直接打开项目文件夹:

      [文件] -> [打开] -> [文件夹] -> [选择ZLMediaKit代码根目录并打开]
      

    • 如果你是 vs2017 以下版本,你需要使用 cmake-gui 生成 vs 工程然后编译:

      1 进入ZLMediaKit目录执行 git submodule update --init 以下载ZLToolKit的代码
      2 使用cmake-gui打开工程并生成vs工程文件.
      3 找到工程文件(ZLMediaKit.sln),双击用vs2017打开.
      4 选择编译Release 版本.
      5 找到目标文件并运行测试用例.
      
    • 同时,Windows 编译也可以参考这里

  • 如果你要编译 Android 版本,你可以自己在 Android Studio 中打开 Android 目录。

  • 如果你要编译 ios 版本,可以生成 xcode 工程然后编译 c api 的静态库; 另外,你可以参考此文档

    cd ZLMediaKit
    mkdir -p build
    cd build
    # 生成Xcode工程,工程文件在build目录下
    cmake .. -G Xcode -DCMAKE_TOOLCHAIN_FILE=../cmake/ios.toolchain.cmake  -DPLATFORM=OS64COMBINED
    

7、运行

ZLMediaKit 工程主要生成 3 种二进制目标文件,他们的生成的路径在 release 目录下,这些目标文件主要分为:

  • MediaServer 进程

    这是 ZLMediaKit 作为服务器的主进程,该进程可以在免去开发的情况下直接作为测试流媒体服务器使用,如果你需要更复杂的业务逻辑,可以通过 Web HOOK 和 RESTful API 实现, 同时你可以通过配置文件控制其参数。

    • 在 linux 下启动:

      cd ZLMediaKit/release/linux/Debug
      #通过-h可以了解启动参数
      ./MediaServer -h
      #以守护进程模式启动
      ./MediaServer -d &
      

      -h查看启动参数

      $ ./MediaServer -h-h  --help     无参  默认:null                                                                选填  打印此信息-d  --daemon   无参  默认:null                                                                选填  是否以Daemon方式启动-l  --level    有参  默认:0                                                                   选填  日志等级,LTrace~LError(0~4)-m  --max_day  有参  默认:7                                                                   选填  日志最多保存天数-c  --config   有参  默认: config.ini   选填  配置文件路径-s  --ssl      有参  默认: default.pem  选填  ssl证书文件或文件夹,支持p12/pem类型-t  --threads  有参  默认:4                                                                   选填  启动事件触发线程数-v  --version  无参  默认:null                                                                选填  显示版本号
      

      不加&为前台启动,如

      $ sudo ./MediaServer -d -c ./config.ini2771-MediaServer System.cpp:122 startDaemon | 启动子进程:2774
      2774-MediaServer System.cpp:154 systemSetup | core文件大小设置为:18446744073709551615
      2774-MediaServer System.cpp:163 systemSetup | 文件最大描述符个数设置为:1048576
      2774-MediaServer SSLBox.cpp:174 setContext | add certificate of: default.zlmediakit.com
      2774-stamp thread util.cpp:366 operator() | Stamp thread started!
      2774-MediaServer EventPoller.cpp:461 EventPollerPool | 创建EventPoller个数:4
      2774-MediaServer TcpServer.cpp:199 start_l | TCP Server listening on [::]:554
      2774-MediaServer TcpServer.cpp:199 start_l | TCP Server listening on [::]:1935
      2774-MediaServer TcpServer.cpp:199 start_l | TCP Server listening on [::]:80
      2774-MediaServer TcpServer.cpp:199 start_l | TCP Server listening on [::]:443
      2774-MediaServer TcpServer.cpp:199 start_l | TCP Server listening on [::]:10000
      2774-MediaServer UdpServer.cpp:104 start_l | UDP Server bind to [::]:10000
      2774-MediaServer UdpServer.cpp:104 start_l | UDP Server bind to [::]:9000
      2774-MediaServer main.cpp:358 start_main | 已启动http api 接口
      2774-MediaServer main.cpp:360 start_main | 已启动http hook 接口
      
    • 在 macos 下启动:

      目标文件目录在 ZLMediaKit/mac/Debug, 其他操作完全一致。

    • 在 window 下启动:

      1 进入ZLMediaKit/release/windows/Debug目录
      2 双击MediaServer启动
      3 你也可以在cmd或powershell中启动,通过MediaServer -h了解启动参数
      
    • c api 的 SDK

      ZLMediaKit 也提供 c 的 api 二次开发 sdk 库,头文件在ZLMediaKit/api/include, 库文件为:

    • linux 下:

      ZLMediaKit/release/linux/Debug/libmk_api.so
    • macOS 下:

      ZLMediaKit/release/linux/mac/libmk_api.dylib
    • windows 下:

      ZLMediaKit/release/windows/Debug/mk_api.dll
      ZLMediaKit/release/windows/Debug/mk_api.lib
      

      SDK 头文件有详细的注释,一般足够二次开发使用。

  • test_开头的测试程序

    相关代码在ZLMediaKit/tests目录下,你可以对照代码启动测试进程。

8、测试

请参考此文章完成推流播放测试

三、测试

推流测试

ZLMediaKit 支持 rtsp/rtmp/rtp 推流,一般通常使用 obs/ffmpeg 推流测试,其中 FFmpeg 推流命令支持以下:

  • 1、使用 rtsp 方式推流
# h264推流
ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test
# h265推流
ffmpeg -re -i "/path/to/test.mp4" -vcodec h265 -acodec aac -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test
  • 2、使用 rtmp 方式推流
#如果未安装FFmpeg,你也可以用obs推流
ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f flv rtmp://127.0.0.1/live/test
# RTMP标准不支持H265,但是国内有自行扩展的,如果你想让FFmpeg支持RTMP-H265,请按照此文章编译:
# https://github.com/ksvc/FFmpeg/wiki/hevcpush
  • 3、使用 rtp 方式推流
# h264推流
ffmpeg -re -i "/path/to/test.mp4" -vcodec h264 -acodec aac -f rtp_mpegts rtp://127.0.0.1:10000
# h265推流
ffmpeg -re -i "/path/to/test.mp4" -vcodec h265 -acodec aac -f rtp_mpegts rtp://127.0.0.1:10000

观察日志

如果推流成功,会打印这种日志:

日志中相关字符串分别代表:

2020-04-10 12:51:52.331 I | regist rtsp __defaultVhost__ rtp 206442D7^           ^         ^      ^schema      vhost      app stream_id

播放地址

请按照播放 url 规则来播放上述的推流。

可以用PotPlayer,KMPlayer来播放。

参考资料

ZLMediaKit快速开始

Ubuntu下安装ffmpeg完整教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_412010.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Tomcat】解决Tomcat服务器乱码问题

俩地方开展出现乱码的原因1、以startup.bat文件打开的服务器出现乱码2、在IDEA中运行Tomcat服务器出现乱码问题3、有关社区版IDEA如何开发JavaWeb项目出现乱码的原因 使用了错误的字符编码去解码字节流,所以出现乱码咱思维要清晰,就去找字符编码是否与其…

【TS04——接口的多态——泛型接口】

接口的多态,同一个方法,传入不同的参数,他所对应的操作不同成为多态【参数不同】或者可以理解为同一个方法,返回不同的结果,称之多态。 interface IfnPerson {run():voidrun(id:number):voidrun(id:number,name:strin…

【生日快乐】Node.js 实战 第1章 欢迎进入Node.js 的世界 1.3 安装Node

Node.js 实战 文章目录Node.js 实战第1章 欢迎进入Node.js 的世界1.3 安装Node第1章 欢迎进入Node.js 的世界 1.3 安装Node 安装Node的最简单的方法是使用其官网上的安装程序。可以用对应Mac或 Windows的安装程序安装最新的当前版。 官网安装包下载地址:https://…

Jenkins部署详细教程

Jenkins简介 Jenkins 是一个可扩展的持续集成引擎。是一个自成一体的开源自动化服务器, 可用于自动化与构建、测试、交付或部署软件相关的各种任务; Jenkins是一个高度可扩展的产品, 其功能可以通过安装插件来扩展。 在gitlab里可以完成源代码的管理,但是对于研发…

[ACTF2020 新生赛]Exec1命令注入

1.来看题目如下 得到一个ping的输入框,老样子先检查网页源码看有没有什么好东西,得到一个链接,我们来访问一下 发现也没什么有用处的信息,于是看到题目的标题之后联想到了命令注入, 那么是怎么判断使用命令注入的呢&am…

MyBatis初步了解

1.Mybatis简介 1.1原始jdbc操作(查询数据) 1.2原始jdbc操作(插入数据) 1.3 原始jdbc操作的分析 原始jdbc开发存在的问题如下: ①数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能 ②sql 语句在代码中硬编…

深入理解Java虚拟机:Java运行内存结构

本篇内容包括:JAVA 运行内存结构,即 程序计数器、Java 虚拟机栈、本地方法栈 、Java堆、方法区、运行时常量池 以及 直接内存等相关内容! 一、JAVA 运行内存结构 Jvm 执行 Java 程序时,会把它所管理的内存划分为若干个不同的数据…

软件设计与体系——创建型模式

如果有兴趣了解更多相关内容,欢迎来我的个人网站看看:瞳孔的个人空间 创建型模式: 创建型模式抽象了实例化过程帮助系统独立于如何创建、组合和表示对象 一个类创建型模式使用继承改变被实例化的类类创建型模式使用继承改变被实例化的类对象…

自学Python需要掌握哪些知识点?怎么学?

其实这个问题你可以转换一下思路,自学python有什么合适的学习路线,基本路线里涉及到的都是需要掌握的~ 单个知识点那罗列起来可是太多了~ 另外你可以考虑下你自学python的目的和方向,是单纯兴趣还是说要学了就业~ 想往人工智能方向发展还是P…

如何实现CAN/LIN通信路由测试?

目前车载网络通信越来越复杂,通信总线、协议多种多样,网关作为信息交互的载体,主要通过报文路由转发、报文过滤、信号重组等方式实现不同网段、不同协议间的信息交互;在复杂的车载网络中,网关通信路由转发功能具有非常…

软件设计师--数据结构考点细节总结

视频2022软件设计师-提炼高频考点-个人学习过程的总结,仅供参考!_哔哩哔哩_bilibili 目录 1,栈 2,二叉树 3,HUFFMAN 特点: 4,文件压缩比 5,拓扑排序 -- 有向无环图 6,查找 7…

CSDN编程竞赛第八期 | 参赛经历分享

参赛经历分享 一共参与七次了,这是我第二次在CSDN竞赛上获奖,上一次获奖是在第四期,获得了第三名,拿到了一个高级背包、一件T恤和一个获奖证书,我之前拍照发过动态的,详情请见:动态 - CSDN 然后…

机器视觉(三):摄像机标定技术

目录: 机器视觉(二):机器视觉硬件技术 机器视觉(三):摄像机标定技术 🌏🧐以下为正文🦄🪐 摄像机标定的目的:三维重建 空间物体表面…

FOTS:端到端的文本检测与识别方法的原理应用与优势

导言: 基于深度学习的可端到端训练的自然场景检测与识别算法(text spotting)由于其简洁高效且统一的结构,逐渐取代了过去将检测与识别分阶段训练然后拼接在一起的方案,成为自然场景文本检测与识别的主流研究方向之一。端到端自然场景文本检测…

rk3288-android8.1-OV13850

第一步,要到规格书,知道引脚定义 第二步,对应原理图定义 第三步 电源是打开的,如果是GPIO请设置 第四步,查看是否有驱动 out目录可以看到驱动 第五步,查看是否有以下文件

分组后再子集再查询

【问题】 有如下查询结果 从这里面查询每个产品 (ProductID) 具有某个(或同时具有某几个)属性 (即 AttID) 的产品数量,并按 ClassID 分组 如果只查询某个产品具有单个属性的话,可以用如下 SQL,如下面查询具有 AttID 为…

AI图像合成技术如何用于数字营销和创意领域?

全栈程序员推荐,AI好书必读 北大出版社,人工智能原理与实践 人工智能和数据科学从入门到精通 详解机器学习深度学习算法原理 人工智能原理与实践 全面涵盖人工智能和数据科学各个重要体系经典 “哇,你拍到的吗?等一下——那是专…

Ray 框架

一 Ray是什么,优势 Spark则是一个面向数据处理的产品,RDD则是以数据作为抽象对象的,你关心的应该是数据如何处理,而不是去如何拆解任务,关心资源如何被分配,这其中涉及的概念比如Job,Stage,task你最好都不…

1807521-02-3,PEP azide,PEP叠氮化物其中叠氮基发生点击反应

PEP azide叠氮基在铜存在下与炔烃反应,生成三唑,可作为多功能连接物。西安凯新生物科技有限公司​叠氮基可以通过点击化学与炔烃、BCN、DBCO反应,生成稳定的三唑键。末端羧酸在活化剂(如EDC或HATU)存在下可与伯胺基反应…

【数据结构与算法】详解归并

目录一、归并的定义及思路二、归并的代码实现一、归并的定义及思路 归并就是归并排序,将两个有序的或两个以上有序的数列合并成一个有序的数列 其基本思想是: 分而治之,与快排的分治是不同的,并归是以中间点分治。 其步骤为&#…