首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >FFMPEG读取本地文件推流到RTMP服务器!

FFMPEG读取本地文件推流到RTMP服务器!

作者头像
用户6280468
发布2023-02-10 19:43:50
发布2023-02-10 19:43:50
3.2K0
举报
文章被收录于专栏:txp玩Linuxtxp玩Linux

前言:

今天我们再来分享一个开源代码项目,这个代码项目是通过读取本地的TS文件,然后推流到RTMP服务器上面。

一、项目框图和运行效果:

1.1.项目的框图:

1.2.运行效果:

二、模块的讲解:

2.1.初始化文件读取模块:

这一块代码的作用是打开本地ts文件,avformat_open_input的作用是打开本地流媒体文件,并获得ts流文件的基本信息。并利用avformat_find_stream_info检测文件信息,包括编码的宽和高。

2.2.初始化FFMPEG输出模块:

输出模块使用avformat_alloc_output_context2的API进行初始化,并利用avio_open打开输出的IO文件流。

2.3.把输入模块的编解码参数拷贝到输出模块中:

根据nb_streams来创建AVStream,并利用avcodec_parameters_copy把输入模块的编解码参数拷贝到output的avstream。此时output的avstream就有了输入模块的编解码参数。并利用avformat_write_header来初始化模块的头部。

2.4.av_read_frame读取ts流每一帧数据,并进行时间基转换,然后推流到RTMP服务器:

这一块的代码主要是利用av_read_frame的api读取每一帧音视频数据,然后利用av_packet_rescale_ts的api进行时间基转换。这个转换是把FFMPEG文件输入的时间基传输到output的时间基,视频转换的时间基是以帧率为单位。转换时间基完成之后就使用av_interleaved_write_frame把转换后的数据推流到RTMP服务器。

2.5.释放所有资源:

当推流完成之后,就要释放资源。avformat_free_contex的api主要是释放AVFormatContext的资源,avio_close主要是释放AVIOContext的资源。av_packet_free释放的是packet资源。

三、完整的代码:

下面我们来看看一个完整的代码:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 txp玩Linux 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言:
  • 一、项目框图和运行效果:
    • 1.1.项目的框图:
    • 1.2.运行效果:
  • 二、模块的讲解:
    • 2.1.初始化文件读取模块:
    • 2.2.初始化FFMPEG输出模块:
    • 2.3.把输入模块的编解码参数拷贝到输出模块中:
    • 2.4.av_read_frame读取ts流每一帧数据,并进行时间基转换,然后推流到RTMP服务器:
    • 2.5.释放所有资源:
  • 三、完整的代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档