FFmpeg入门 - rtmp推流

本文介绍了如何使用FFmpeg进行rtmp推流,详细讲解了rtmp服务器的搭建、推流过程,包括准备输出流、理解codec_id和codec_tag、写入视频数据、帧同步以及资源释放等关键步骤,最后探讨了推流应用的拓展可能性。
摘要由CSDN通过智能技术生成

1、rtmp服务器


整个直播的功能分成下面三个模块:

截屏2022-09-08 下午9.49.50.png

从上图我们可以看到rtmp是需要服务器做转发的,我们选用开源的srs.直接从github上把它的源码拉下来编译,然后直接启动即可:

git clone git@github.com:ossrs/srs.git

cd srs/trunk

./configure

make

./etc/init.d/srs start

如果是本地的电脑,这个时候就能在局域网内直接用它的内网ip去访问了.但如果是腾讯云、阿里云之类的云服务器还需要配置安全组开放下面几个端口的访问权限:

listen 1935;

max_connections 1000;

#srs_log_tank file;

#srs_log_file ./objs/srs.log;

daemon on;

http_api {

enabled on;

listen 1985;

}

http_server {

enabled on;

listen 8080;

dir ./objs/nginx/html;

}

rtc_server {

enabledon;

listen8000; #UDPport

#@seehttps://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#config-candidate

candidate$CANDIDATE;

}

...

当然如果这几个端口已经被占用的话可以修改配置文件conf/srs.conf去修改

服务器到这里就准备好了,浏览器访问下面网址对srs进行调试、配置:

http://服务器ip:8080/players/rtc_publisher.html http://服务器ip:1985/console/ng_index.html

2、推流


2.1准备输出流

我们选择推送本地的视频到rtmp服务器,所以第一步仍然是打开本地视频流:

boolVideoSender::Send(conststring&srcUrl, conststring&destUrl) {

...

// 打开文件流读取文件头解析出视频信息如轨道信息、时长等

// mFormatContext初始化为NULL,如果打开成功,它会被设置成非NULL的值

// 这个方法实际可以打开多种来源的数据,url可以是本地路径、rtmp地址等

// 在不需要的时候通过avformat_close_input关闭文件流

if(avformat_open_input(&inputFormatContext, srcUrl.c_str(), NULL, NULL) <0) {

cout<<"open "<<srcUrl<<" failed"<<endl;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值