title: 音视频系列五:ffmpeg之rtmp推流阿里云转发vlc拉流播放
categories:[ffmpeg]
tags:[音视频编程]
date: 2021/11/30
作者:hackett
微信公众号:加班猿
在前两篇 阿里云服务器搭建Nginx+rtmp推流服务器中,我们已经配置把阿里云的rtmp推流服务搭建好了,用的是PC软件OBS来进行推流到阿里云服务器,接下来就用雷神的最简单的基于ffmpeg的推流器,rtmp方式推流,阿里云服务器转发流,VLC拉流的流程走一遍。
链接地址:最简单的基于FFmpeg的推流器(以推送RTMP为例) blog.csdn.net/leixiaohua1…
一、RTMP简介
RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括Adobe Media Server/Ultrant Media Server/red5等。RTMP与HTTP一样,都属于TCP/IP四层模型的应用层。– 百度百科
RTMP推流器(Streamer)的在流媒体系统中的作用可以用下图表示。首先将视频数据以RTMP的形式发送到流媒体服务器端(Server,比如FMS,Red5,Wowza等),然后客户端(一般为Flash Player)通过访问流媒体服务器就可以收看实时流了。
二、程序流程图
RTMP采用的封装格式是FLV。因此在指定输出流媒体的时候需要指定其封装格式为“flv”。同理,其他流媒体协议也需要指定其封装格式。例如采用UDP推送流媒体的时候,可以指定其封装格式为“mpegts”。
av_register_all():注册FFmpeg所有编解码器。
avformat_network_init():初始化Network。
avformat_open_input():输入(Input)。
avformat_find_stream_info():查找流信息。
avformat_alloc_output_context2():分配输出 AVFormatContext。
avcodec_copy_context():复制AVCodecContext的设置(Copy the settings of AVCodecContext)。
avformat_write_header():写文件头(Write file header)。
av_read_frame():获取一个AVPacket(Get an AVPacket)。
av_rescale_q_rnd():转换PTS/DTS(Convert PTS/DTS)
av_interleaved_write_frame():写文件尾。
三、代码
1 | cpp复制代码#include <iostream> |
四、运行结果
如果你觉得文章还不错,可以给个”三连“,文章同步到以下个人微信公众号[加班猿]
我是hackett,我们下期见
本文转载自: 掘金