基于FFmpeg进行rtsp推流及拉流(详细教程)

目录

1. 安装FFmpeg

1.1 Windows系统

1.2 Ubuntu 和 Debian 系统

1.3 CentOS 和 Fedora 系统

1.4 macOS系统

2. 安装rtsp-simple-server

3. FFmpeg推流

3.1 UDP推流

3.2 TCP推流

3.3 循环推流

4 拉流

4.1 ffplay/VLC拉流显示

4.2 FFmpeg拉流保存成视频


1. 安装FFmpeg

FFmpeg 是一个免费、开源的跨平台视频和音频流处理工具。

首先,打开终端(在 Windows 中是命令提示符,在 Windows 搜索栏中输入“cmd”,然后打开命令提示符),然后运行以下命令以检查您的系统上是否已安装 FFmpeg:

ffmpeg -version

如果显示安装的版本号,表明 FFmpeg 已安装。否则,需要进行安装。

1.1 Windows系统

转到 FFmpeg 官方网站,然后下载最新版本的 Windows 安装包。

下载完成后,双击安装包文件,然后按照提示操作安装 FFmpeg。

1.2 Ubuntu 和 Debian 系统

对于 Ubuntu 和 Debian 系统,可以使用 apt 包管理器来安装 FFmpeg:

sudo apt update
sudo apt install ffmpeg

1.3 CentOS 和 Fedora 系统

对于 CentOS 和 Fedora 系统,可以使用 yum 来安装 FFmpeg:

sudo yum install ffmpeg

1.4 macOS系统

对于 macOS系统,可以使用 Homebrew 来安装 FFmpeg:

brew install ffmpeg

在安装完成后,可以再次运行

ffmpeg -version 

命令来检查是否安装成功。如果安装成功,将显示安装的版本号等信息。

2. 安装rtsp-simple-server

安装rtsp服务器,可以去这个链接

rtsp-simple-server

下载对应编译好的文件直接运行就好。

3. FFmpeg推流

注意:在推流之前先运行rtsp-simple-server

3.1 UDP推流

ffmpeg -re -i input.mp4 -c copy -f rtsp rtsp://127.0.0.1:8554/stream

3.2 TCP推流

ffmpeg -re -i input.mp4 -c copy -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:8554/stream

3.3 循环推流

ffmpeg -re -stream_loop -1 -i input.mp4 -c copy -f rtsp rtsp://127.0.0.1:8554/stream

其中:

-re 为以流的方式读取;

-stream_loop 为循环读取视频源的次数,-1为无限循环;

-i 为输入的文件;

-f 为格式化输出到哪里;

4 拉流

4.1 ffplay/VLC拉流显示

ffplay rtsp://127.0.0.1:8554/stream

如需用VLC拉流,需安装VLC播放器,下载网站为:VLC 官方网站

内有各个系统的安装包,选择自己的系统下载安装即可。

安装好后,打开网络串流,输入对应的地址即可拉流显示。

4.2 FFmpeg拉流保存成视频

ffmpeg -stimeout 30000000 -i rtsp://127.0.0.1:8554/stream -c copy output.mp4

-stimeout 30000000 为等待RTSP 流连接的时间,单位为us微秒,30000000 为等待 30 秒,如果连接失败则退出。特别注意该字段要放在rtsp地址之前,否者无效。

  • 58
    点赞
  • 314
    收藏
    觉得还不错? 一键收藏
  • 84
    评论
ffmpeg 是一个强大的音视频处理工具,它可以用来进行各种音视频格式的编解码、转码、剪辑等操作。下面是基于 C++ 使用 ffmpeg 进行 RTSP 拉流和推流的流程: 1. 引入 ffmpeg 库:首先需要在项目中引入 ffmpeg 库,可以使用静态库或者动态库,具体方法不再赘述。 2. 初始化 ffmpeg:在使用 ffmpeg 前,需要初始化 ffmpeg,这可以通过调用 av_register_all() 函数实现。 3. 创建 AVFormatContext:创建一个 AVFormatContext 对象,用于存储音视频流的相关信息,包括音视频编码格式、流的时间基等信息。可以通过调用 avformat_alloc_context() 函数来创建。 4. 打开 RTSP 流:调用 avformat_open_input() 函数打开 RTSP 流,传入 RTSP 地址、AVFormatContext 对象等参数,函数会自动解析出音视频流的信息并存储到 AVFormatContext 对象中。 5. 查找音视频流:通过调用 avformat_find_stream_info() 函数,可以查找音视频流的索引,该函数会自动解析音视频流的信息,并将音视频流的索引存储到 AVFormatContext 对象中。 6. 获取音视频流的信息:可以通过遍历 AVFormatContext 对象的 streams 属性,获取每个音视频流的详细信息,包括编码格式、分辨率、码率等等。 7. 打开音视频解码器:对于每个音视频流,需要打开相应的解码器,可以通过调用 avcodec_find_decoder() 函数查找对应的解码器,然后调用 avcodec_open2() 函数打开解码器。 8. 创建 AVFrame 和 AVPacket:解码音视频帧需要使用 AVFrame 和 AVPacket 对象,可以通过调用 av_frame_alloc() 和 av_packet_alloc() 函数创建。 9. 读取音视频帧:通过调用 av_read_frame() 函数读取音视频帧,该函数会返回一个 AVPacket 对象,包含了音视频帧的数据和相关信息。 10. 解码音视频帧:根据 AVPacket 对象中的信息,可以调用对应的解码器进行解码,解码后的结果存储在 AVFrame 对象中。 11. 处理音视频帧:可以对解码后的音视频帧进行各种处理,比如转换格式、合并音视频等。 12. 推流:可以使用 avformat_new_stream() 函数创建一个新的音视频流,并设置相应的参数,然后使用 avio_open() 函数打开一个输出流,最后调用 avformat_write_header() 函数开始推流。 13. 写入音视频帧:对于每一帧音视频数据,可以调用 av_interleaved_write_frame() 函数写入输出流中,该函数会自动进行封装和编码。 14. 关闭流和解码器:最后记得关闭输入流、输出流和解码器,释放相应的资源。 以上是基于 C++ 使用 ffmpeg 进行 RTSP 拉流和推流的大致流程,具体实现还需要根据具体的需求和情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 84
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值