今天我们再来分享一个开源代码项目,这个代码项目是通过读取本地的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 举报,一经查实,本站将立刻删除。