使用nginx-rtmp-module 部署了一个rtmp服务, 但是推流地址只有一个,我如何才能有多个推流地址
推流到Nginx的时候,推流地址是指向appname的,每路流是根据streamname来保证原子性的,所以当有两路流的时候,更改推流地址的streamname即可保证流的原子性。
PS:
推流地址为rtmp://localhost:1935/appname/streamname
最近需要做实时录屏并把视频推流到RTSP服务器,具体流程是抓取屏幕内容(bitmap),并把bitmap转化为YUV,接着把YUV编码成H264,再把H264码流推到RTSP服务器;把采集到的PCM编码为AAC,再把AAC推流至RTSP服务器。
看了雷神的一篇文章: 最简单的基于FFmpeg的推流器(以推送RTMP为例) ,他是把本地的视频文件推流至RTMP服务器,并不符合我的要求。
接着我找到另一篇文章: ffmpeg实现H264压缩并且推流至RTSP ,这篇文章只有图像编码,并没有音频编码,并且推流之后并没有播放成功。
我综合上面两位大佬的思路,和查找一些资料实现了这个功能。
RTSP服务器使用的是 HappyTime 的免费试用版本。
我抓到的bitmap是BGRA格式的,所以使用的图像格式是 AV_PIX_FMT_BGRA , cropImage 是含有rgba图像的数组
调用:
由于我是实时抓取的屏幕, frame_yuv->pts 设为当前的时间戳,以保证能正常播放。
调用:
调用:
其中pcm_buff是包含pcm数据的数组
使用udp传输时传到1400多帧就断开链接了,原因不明,所以改用使用tcp协议传输
延迟有15秒左右
参考:
https://blogcsdnnet/leixiaohua1020/article/details/39803457
https://blogcsdnnet/yunge812/article/details/79345584
https://tracffmpegorg/wiki
直播-拉流和推流首先要了解拉流和推流的原理。
直播中视频编码器可以称为推流,就是把前端的视频画面通过编码器推流到各个直播平台。
推流中只要将直播平台的推流地址复制到编码器管理后台即可实现推流操作。比方说RTSP,RTMP推流等。
视频解码器可以称为拉流,就是把你网络的视频流通过解码器拉流还原到大屏上显示,显示包括电视、拼接屏等。如果需要把视频还原在大屏幕显示出来,就需要解码器。设置跟编码器同样道理。
直播编解码器原理图
流媒体服务器提供的流式传输方式有两种:顺序流式传输和实时流式传输 两种方式。顺序流式传输是顺序下载,在下载文件的同时用户可观看在线媒体。实时流式传输总是实时传送,特别适合现场事件。一般来说,如果视频为现场直播,或使用专用的流媒体服务器,或应用如RTSP等专用实时协议,即为实时流媒体传输。实时流式传输必须匹配连接带宽,这意味着图像质量会因网络速度降低而变差。在流式传输时,流媒体数据具有实时性,等时性等基本特点,流服务期和客户终端要保证各种媒体间的同步关系,因此,流媒体传输对“最大延时”,“延时抖动”等QoS参数都有严格要求。实时流传输既可传输实况直播,也可传输完整的音视频文件(专用协议流式)。
推流,指的是把采集阶段封包好的内容传输到服务器的过程。
视频直播中说的抓流和推流,是什么意思,两种有什么区别?
“抓流”应该指的是拉流吧?也就是英语中的pull,或者down streaming。这个指的是用户端从服务器拉去语音视频流到客户端播放。
推流,也就是英语中的publish/push,或者up streaming。这个指的是主播端把本地采集的语音视频流推送到媒体服务器。
网站模板库 » 使用nginx-rtmp-module 部署了一个rtmp服务, 但是推流地址只有一个,我如何才能有多个推流地址
0条评论