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

今天我们再来分享一个开源代码项目,这个代码项目是通过读取本地的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资源。

三、完整的代码:

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

图片
图片
图片
最后:

对嵌入式音频开发感兴趣的朋友,可加作者陈工微信:tu18879499804加入星球学习。

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论