FFmpeg 代码实现流媒体推流(RTSP)
最近需要做实时录屏并把视频推流到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等专用实时协议,即为实时流媒体传输。实时流式传输必须匹配连接带宽,这意味着图像质量会因网络速度降低而变差。在流式传输时,流媒体数据具有实时性,等时性等基本特点,流服务期和客户终端要保证各种媒体间的同步关系,因此,流媒体传输对“最大延时”,“延时抖动”等QoS参数都有严格要求。实时流传输既可传输实况直播,也可传输完整的音视频文件(专用协议流式)。
推流,指的是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号传到网络的过程。
“推流”对网络要求比较高,网络不稳定,直播效果就会很差,观众观看直播时就会发生卡顿等现象,观看体验很是糟糕。
网络直播吸取和延续了互联网的优势,利用视讯方式进行网上现场直播,可以将产品展示、相关会议、背景介绍、方案测评、网上调查、对话访谈、在线培训等内容现场发布到互联网上。
利用互联网的直观、快速,表现形式好、内容丰富、交互性强、地域不受限制、受众可划分等特点,加强活动现场的推广效果。现场直播完成后,还可以随时为读者继续提供重播、点播,有效延长了直播的时间和空间,发挥直播内容的最大价值。
扩展资料
2018年4月,《新闻1+1》曝光了在一些视频网站上出现了大量的少女妈妈或者说早孕妈妈,其中有一定的比例其实是未成年人;包括全网最小二胎妈妈,14岁就拥有了自己的小孩,16岁独自带二胎孩子。问题曝光后,视频网站把矛头直接指向技术,都是推荐算法闹的。
2018年4月22日,一位佩戴红领巾的成年人对着路人唱着怪异的歌曲。这位名叫“摇滚红领巾大岭”的网络主播其粉丝达到百万之多。他将自己佩戴红领巾当街截停女生搭讪,搞笑、骚扰、扮丑等行为上传到短视频网站上,博取噱头,赢取流量。
2019年8月16日,YY主播“小洲”在与另一名主播连麦时,用脏话辱骂台风遇难者。网友称“小洲”还存在诸多侮辱国家言论,直播中曾穿国旗T恤称“说我汉奸是夸我”。YY直播回应称,已将“小洲”的账号予以封禁。
2019年8月20日,快手网红乞丐哥利用自己的“网红”身份,接近陌生女孩,并将她们拐卖至海南省、江西省等地。高某涉嫌多起拐卖未成年人、强迫卖*等案件。今年3月,诸暨警方将高某列为网上追逃对象。8月20日凌晨,诸暨市公安局民警在贵州将其抓获。
推流,指的是把采集阶段封包好的内容传输到服务器的过程。
视频直播中说的抓流和推流,是什么意思,两种有什么区别?
“抓流”应该指的是拉流吧?也就是英语中的pull,或者down streaming。这个指的是用户端从服务器拉去语音视频流到客户端播放。
推流,也就是英语中的publish/push,或者up streaming。这个指的是主播端把本地采集的语音视频流推送到媒体服务器。
内存里面。松下298摄像机搭载最新研发的松下高清镜头,采用松下的3MOS成像系统。松下298摄像机推流地址在内存里面。推流地址是推流服务器的地址,推流就是把直播状态实时上传到推流服务器,而观众观看的时候,实时从推流服务器中下载,实际上叫拉流。
拉流和推流的区别如下:
推流指的是把采集阶段封包好的内容传输到服务器的过程,而拉流是指服务器已有直播内容,用指定地址进行拉去的过程。
主流的推送协议和优缺点
RTMP
RTMP是Real Time Messaging Protocol(实时消息传输协议)的缩写,是Adobe公司为Flash/AIR平台和服务器之间音、视频及数据传输开发的实时消息传送协议。RTMP协议基于TCP,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。
HLS
Http Live Streaming是由Apple公司定义的基于HTTP的流媒体实时传输协议。它的原理是将整个流分为多个小的文件来下载,每次只下载若干个。服务器端会将最新的直播数据生成新的小文件,客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。
WebRTC
WebRTC(Web Real-Time Communication),即“源自网页即时通信”。WebRTC是一个支持浏览器进行实时语音、视频对话的开源协议。WebRTC的支持者甚多,Google、Mozilla、Opera推动其成为W3C推荐标准。
0条评论