博客
关于我
ffmpeg 推rtsp/rtmp流
阅读量:382 次
发布时间:2019-03-04

本文共 1499 字,大约阅读时间需要 4 分钟。

FFmpeg 推流实现对比:rtsp/rtmp 内存数据推流与直接填充 AVPacket 推流

1. rtsp/rtmp 内存数据推流实现

本实现参考雷神的代码,在此基础上扩展了读取rtsp/rtmp流以及内存数据的能力。该方法支持通过rtsp/rtmp推送h264/h265流,flv则仅支持h264流(h265扩展暂不支持)。在内存数据推流时,需注意以下几点:

  • 内存数据读取注意事项:在调用 avformat_open_input 之前,必须确保内存数据已到位,否则会导致文件打开失败。此外,第一帧必须是IDR帧(独立决断帧)。

  • 实现特点

    • 支持rtsp、rtmp流的读取与推流。
    • 允许从内存数据中读取视频流并进行推流。
    • 代码框架清晰,注重流程的规范性和可维护性。
  • 代码实现细节

    • 通过 avformat_open_inputavformat_find_stream_info 读取输入流信息。
    • 根据输入流中视频流的索引定位视频数据。
    • 使用 av_read_frame 逐帧读取视频流数据,并通过 av_interleaved_write_frame 进行推流。
    • 对视频流 PTS 和 DTS 的调整,确保流推时间与网络时间一致。
  • 优点:实现简单,稳定性高,适合对 rtsp/rtmp 流推流有具体需求的场景。

2. 直接填充 AVPacket 数据推流实现

本实现基于参考代码,主要针对直接填充 AVPacket 数据的推流方式进行了细化。这种方法适用于对自定义视频流数据进行处理后再进行推流,支持rtsp/rtmp流的推送,但需要注意以下几点:

  • 实现特点

    • 代码结构较为基础,主要完成了视频流数据的读取与填充。
    • 推流支持h264/h265格式,但音频部分尚未实现。
    • 需要手动设置视频流的相关参数(如帧率、码率、分辨率等)。
  • 代码实现细节

    • 通过 av_read_frame 读取输入视频流数据,并将其复制到 AVPacket 数据结构中。
    • 根据视频流类型判断是否为 I 帧(关键帧),并设置 AV_PKT_FLAG_KEY 标志。
    • 对视频流 PTS 和 DTS 进行调整,确保流推时间与网络时间一致。
    • 使用 av_interleaved_write_frame 进行推流。
  • 优点:适合对视频流格式有高度控制需求的场景,支持自定义视频流处理。

3. Ubuntu 14 推音视频实现

该实现基于 FFmpeg 在 Ubuntu 14 系统中进行推音视频的功能演示。该代码框架清晰,易于扩展,适合用于音视频同步推流场景。由于篇幅限制,代码细节将简要说明。

  • 实现特点

    • 支持从文件或内存数据中读取视频流数据。
    • 支持rtmp、rtsp、UDP 等多种推流协议。
    • 允许对视频流参数(如码率、帧率、分辨率等)进行设置。
  • 代码实现细节

    • 使用 avformat_open_inputavformat_alloc_output_context2 分别打开输入输出流。
    • 根据输出格式设置视频流的相关参数。
    • 使用 av_read_frame 读取输入流数据,并进行视频流处理后推送到输出流中。
    • 使用 av_interleaved_write_frame 实现视频流的按间隔写入。

总结

两种 FFmpeg 推流实现方式各有特点,选择哪种实现方式取决于具体需求:

  • 如果需要稳定性和对 rtsp/rtmp 流有具体需求,推荐使用内存数据推流实现。
  • 如果需要对视频流数据进行自定义处理,直接填充 AVPacket 数据的推流方式更为灵活。

通过合理配置和优化,这两种实现方式均能满足不同场景下的推流需求。

转载地址:http://vtoe.baihongyu.com/

你可能感兴趣的文章
OpenCV与AI深度学习 | 使用Python和OpenCV实现火焰检测(附源码)
查看>>
OpenCV与AI深度学习 | 使用PyTorch进行小样本学习的图像分类
查看>>
OpenCV与AI深度学习 | 使用YOLO11实现区域内目标跟踪
查看>>
OpenCV与AI深度学习 | 使用YOLOv8做目标检测、实例分割和图像分类(包含实例操作代码)
查看>>
OpenCV与AI深度学习 | 使用单相机对已知物体进行3D位置估计
查看>>
OpenCV与AI深度学习 | 初学者指南 -- 什么是迁移学习?
查看>>
OpenCV与AI深度学习 | 十分钟掌握Pytorch搭建神经网络的流程
查看>>
OpenCV与AI深度学习 | 基于GAN的零缺陷样本产品表面缺陷检测
查看>>
OpenCV与AI深度学习 | 基于OpenCV和深度学习预测年龄和性别
查看>>
OpenCV与AI深度学习 | 基于OpenCV实现模糊检测 / 自动对焦
查看>>
OpenCV与AI深度学习 | 基于Python和OpenCV将图像转为ASCII艺术效果
查看>>
OpenCV与AI深度学习 | 基于PyTorch实现Faster RCNN目标检测
查看>>
OpenCV与AI深度学习 | 基于PyTorch语义分割实现洪水识别(数据集 + 源码)
查看>>
OpenCV与AI深度学习 | 基于YOLO11的车体部件检测与分割
查看>>
OpenCV与AI深度学习 | 基于YOLOv8 + BotSORT实现球员和足球检测与跟踪 (步骤 + 源码)
查看>>
OpenCV与AI深度学习 | 基于YOLOv8的停车对齐检测
查看>>
OpenCV与AI深度学习 | 基于机器视觉的磁瓦表面缺陷检测方案
查看>>
OpenCV与AI深度学习 | 基于深度学习的轮胎缺陷检测系统
查看>>
OpenCV与AI深度学习 | 实战 | OpenCV传统方法实现密集圆形分割与计数(详细步骤 + 代码)
查看>>
OpenCV与AI深度学习 | 实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)
查看>>