最近需要做实时录屏并把视频推流到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秒左右
参考:
>通过接口调用,获取网络摄像头的 RTSP 推流 URL,需要播放此 RTSP 协议传输的视频流
An HTML5 Flash Video (FLV) Player written in pure JavaScript without Flash
FLV 支持格式
动态添加 rtsp | rtmp | hls 拉流代理。只支持 H264 | H265 | AAC | G711 负载
以 rtsp://somedomaincom:554/live/0token=abcdefg&field=value
通过 流媒体源对应的播放 URL 可知一个 >
打开“媒体——流”选项
点击“添加”按钮选择流媒体文件,然后点击“串流”按钮
点击“下一个”后,在“目标设置”界面选择“RTSP”,然后点击添加 + 按钮
填上目标ip地址,并在“转码选项”中选择相应的编码类型(这个视情况而定),目标IP地址就是PC机器本机的IP地址
客户端, 点击“媒体——打开网络串流”,在d出的框中输入“rtsp://19216812:1234/tcp1”,点击“播放”按钮即可。
用VLC可以的吧,而且 *** 作很简单,VLC既是一款播放器,也能作为流媒体服务器进行发布,下面是具体步骤:
打开播放器后,点击“媒体”--》“流”;
选择一个文件进行编码输出,同时也可采集摄像头进行编码输出,点击“添加”
点击“串流”-->“NEXT”
在文件中选择“RTSP”,点击“添加”,选择端口号和输出媒体流的名称,然后“next”
在“配置文件”中选择输出的视音频编码的协议,根据你的需求,可选择“MPEG4”,然后“next”
最后点击“stream”,即可以rtsp协议传输以mpeg4编码的视频,在客户端根据协议进行接收即可。
最后保持着服务器一直开着就好了
当然,这是windows系统下的 *** 作,看你用了red5,如果是linux下的话,VLC是跨平台的,也是可以的!望采纳!
海康流媒体服务器转发出来的rtsp流不是标准的,不用使用vlc/real player等播放。海康的H264不是标准的,文件头中有hk自己添加的字段。网络摄像设备只能用hk的自己的API访问。
解码器出现了问题。
RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学、网景和RealNetworks公司提交的IETF RFC标准。该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。
RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输。>
RTSP是用来控制声音或影像的多媒体串流协议,并允许同时多个串流需求控制,传输时所用的网络通讯协定并不在其定义的范围内,服务器端可以自行选择使用TCP或UDP来传送串流内容,它的语法和运作跟>
而前面提到的允许同时多个串流需求控制(Multicast),除了可以降低服务器端的网络用量,更进而支持多方视讯会议(Video Conference)。
因为与>
RTSP请求可以几种不同方式传送:
1、持久传输连接,用于多个请求/响应传输。
2、每个请求/响应传输一个连接。
3、无连接模式。
传输连接类型由RTSP URL来定义。对“rtsp'’方案,需要持续连接;而"rtspu"方案,调用RTSP请求发送,而不用建立连接。
不像>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)