技术背景好多开发者,提到希望在Unity的Android头显终端,播放2路以上RTMP或RTSP流,在设备性能一般的情况下,对Unity下的RTMP|RTSP播放器提出了更高的要求。 对于每一路RTMP或RTSP流,可以分别创建个播放实例,并启动播放。可以创建一个管理类,用于统一管理多个播放器实例,方便对多路流的播放状态进行监控和控制。 对于多路视频流,需要为每一路视频流创建独立的纹理和材质,并分别进行渲染。 流可能并不简单,因为Unity没有内置对RTMP|RTSP的直接支持。 以上是Unity下多路播放RTMP|RTSP的技术探讨,感兴趣的开发者,可以单独跟我沟通讨论。
我们在做Android平台轻量级RTSP服务和内网RTSP网关的时候,遇到过这样的问题,如何同时发布多路RTSP流出去? 回答这个问题,实际上不难,大牛直播SDK在设计这个模块的时候,考虑到了一个Service带多路流的情况,以下是大概的技术实现:图片启动RTSP服务:启动RTSP服务的时候,你可以注意到OpenRtspServer (false);}}};如何启动一个服务,发布多个RTSP流(对应不同的数据源和RTSP拉流URL)? 流://停止发布RTSP流private void stopRtspPublisher(long publisherHandle){if(! :publisher_event = "RTSP服务URL: " + param3;break; ...}}}如果需要获取单个Service的会话链接数://获取RTSP会话数class
本篇主要分析一下另一种低成本的多路流切换方式——重启解码器实现多路流切换。 3.1 首先了解下多路流切换可以实现的功能。 原伴唱切换 音频品质切换 视频清晰度切换 其他渲染器资源切换 3.2 什么是多路流? 所谓多路流是指播放过程中,存在多个I/O相关的媒体资源。 3.3 MediaPlayer是否支持多路流 不支持,也没法切换 3.4 ExoPlayer如何将多路流输入到播放器中? 其中,MergingMediaSource 可以实现多路流合并入到同一个MediaSource中。 五、总结 ExoPlayer 具备完善的多路流切换,高可扩展性,可以实现MediaClock扩展、Renderer裁剪、多路流切换、自定义解封装器,也方便很多人学习音视频知识。
技术背景我们在对接Windows平台RTSP|RTMP直播播放模块的时候,有开发者提出来这样的技术需求,他们做驾考、全景摄像头、多路会议录制等场景的时候,希望把多路视频流数据,合并到一路保存或者对外推送到 技术实现多路RTSP|RTMP流合流,实际上我们2016年就有这块demo,当时合流的数据是本地采集的摄像头或屏幕数据,和外部RTSP、RTMP流,合成后输出(类似于传统意义的连麦操作)。 这里大概说下思路,外部的RTSP|RTMP流数据,解码后,把YUV或RGB数据回调上来,然后,按照图层的形式,分别贴摄像头、屏幕数据或解码后的流数据。 )){if (1 == in_support_d3d_render){is_support_d3d_render = true;}}if (is_support_d3d_render){// 支持d3d 服务,或者本地直接录制MP4文件,录制出来四宫格效果如下:总结多路RTSP|RTMP数据合流,在多媒体处理、实时监控、驾考、教育等各个行业,应用非常广泛,除了视频外,音频如果需要合成,可以以采集系统扬声器的形式合流出来
EasyNVR是一款支持RTSP接入同时也能支持ONVIF协议接入的视频平台,既有硬件设备,也有软件平台,能够实现设备接入、实时视频直播、录像、告警、级联等丰富灵活的视频功能。 有用户反馈,接入三百多路设备,并且都是非按需实时直播状态,但是出现通道离线又主动上线的现象,有时软件进程在平台无法打开,请求我们协助排查。今天我们来分享一下排查思路和解决办法。 EasyNVR的视频能力在于通过RTSP/ONVIF协议,接入前端音视频采集设备,将拉取过来的音视频流转化成适合全平台播放的RTMP、FLV、HLS、WebRTC等视频流格式。
好多开发者在做AR、VR或者教育类产品时,苦于如何在windows平台构建一个稳定且低延迟的RTSP或者RTMP播放器,如果基于Unity3d完全重新开发一个播放器,代价大、而且周期长,不适合快速出产品 废话不多说,以Windows平台多路播放为例: 1.Native播放器吐RGB/YUV420/NV12等其中的一种未压缩的图像格式 比如Windows平台,我们回调YUV上来(NT_SP_E_VIDEO_FRAME_FROMAT_I420 ),本文以调用大牛直播SDK(Github)的Windows平台RTSP、RTMP播放器SDK为例,具体代码如下: public void Play(int sel) { u3d_frame.v_stride_ = d_v_stride; u3d_frame.y_data_ = new byte[d_y_size]; u3d_frame.u_data 具体播放效果如下 windows4player.png 总结 Unity3d下,做多路播放的话,首先确保调用的拉流解码数据的模块具备回调yuv/rgb数据能力,回上来后,再上层直接刷新显示即可,是不是没有你想的那么复杂
EasyNVR是一款支持RTSP接入同时也能支持ONVIF协议接入的视频平台,既有硬件设备,也有软件平台,能够实现设备接入、实时视频直播、录像、告警、级联等丰富灵活的视频功能。 有用户反馈,接入三百多路设备,并且都是非按需实时直播状态,但是出现通道离线又主动上线的现象,有时软件进程在平台无法打开,请求我们协助排查。今天我们来分享一下排查思路和解决办法。 EasyNVR的视频能力在于通过RTSP/ONVIF协议,接入前端音视频采集设备,将拉取过来的音视频流转化成适合全平台播放的RTMP、FLV、HLS、WebRTC等视频流格式。
大牛直播SDK(Github)多路RTMP/RTSP转RTMP转发软件,系原有转发SDK基础上,官方推出的Windows平台定制版。 如监控类摄像机、NVR等,通过厂商说明或Onvif工具,获取拉流的RTSP地址,图形化配置,完成拉流转发等操作,轻松实现标准RTMP服务器(或CDN)对接。 视频转发支持H.264、H.265(需要RTMP服务器或CDN支持扩展H.265),音频支持配置PCMA/PCMU转AAC后转发,并支持只转发/录制视频或音频,RTSP拉流端支持鉴权和TCP/UDP模式设置和 (必须填):需要转发的RTSP或RTMP地址; ² 推流RTMP地址:需要转推的RTMP地址; ² 推流播放地址:需要预览的播放地址; ² 音视频转发选项:可选择之转发音频或视频,亦或同时转发音视频; [image] 系统配置: ² 支持程序启动后自动开启转发; ² 支持程序启动后自动开启录像(考虑到Windows平台磁盘读写性能,Windows平台不做多路录像承诺); ² 开机后自动启动(可配置开机自动启动配置名
将视频流保存为.avi格式的本地文件 import cv2 cap = cv2.VideoCapture("rtsp://103.229.215.117:1554/s?
例如,我们有工作rtsp流测试像:“rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov”(它在发布这篇文章的时候工作) 现在我想在openCV中捕获这个视频流 (opencv 2.4.7 / 2.4.8)我的代码完全适用于本地电影文件,但当我尝试捕获rtsp时,我得到的信息如下:“无法读取电影文件RTSP://184.72.239.149/vod/mp4:BigBuckBunny _115k.mov” 我尝试过几种不同的方式: CvCapture *camera = cvCreateFileCapture(“rtsp://184.72.239.149/vod/mp4:BigBuckBunny vcap.open(“rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov”)) { std::cout << “Error opening video
javacv-platform 1.5.1 pom 然后就是测试类 public static void testzc() throws FrameGrabber.Exception { String rtsp = “获取的对应rtsp流”; FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(rtsp); grabber.setOption (“rtsp_transport”, “tcp”); // 使用tcp的方式,不然会丢包很严重 grabber.setImageWidth(960); grabber.setImageHeight(540 String[] args) { try { testzc(); } catch (Exception e) { e.printStackTrace(); } } 最后我还是想说一句,在调用rtsp 流之前,先弄清楚你的摄像头设备的流获取规则,比如我的摄像头牌子是海康的,对应的获取流的规则,我在另个帖子说了,你们要根据你们的牌子找对应的规则获取到流后再做上面的流处理。
RTSP (Real Time Streaming Protocol),实时流协议,是一种应用层协议,专为流媒体使用。 本文将介绍 GStreamer, VLC, FFmpeg 这几个工具,如何发送、接收 RTSP 流。 发送 RTSP 测试流: $ . rtph264pay name=pay0 pt=96" stream ready at rtsp://127.0.0.1:8554/test 用 gst-launch 接收 RTSP 测试流: gst-launch autovideosink 参考 GStreamer[2] Installing on Linux[3] Command line tools[4] Plugins[5] GStreamer RTSP
视频流 原文:网页播放rtsp视频流_江山夜雨的博客-CSDN博客_web播放rtsp RTSP协议 (1)是流媒体协议。 (2)RTSP协议是共有协议,并有专门机构做维护。 (3)RTSP协议一般传输的是 ts、mp4 格式的流。 (4)RTSP传输一般需要 2-3 个通道,命令和数据通道分离。 loop="false" controller="true" pluginspage="http://www.apple.com/quicktime/"></embed> </object> 3、 --<source src="<em>rtsp</em>://184.72.239.149/vod/mp4:BigBuckBunny_175k.mov" type="application/x-<em>rtsp</em>">--> <source src="<em>rtsp</em>://184.72.239.149/vod/mp4:BigBuckBunny_175k.mov" type="application/x-<em>rtsp</em>">
2.2获取RTSP流2.2.1本地RTSP流使用VLCmediaPlayer播放器,加载本地视频文件,通过设置流的方式提供本地RTSP播放地址,本方式适合本地临时测试。 三、项目架构获取本地/远程RTSP流。UI界面/接口:使用VUE3实现UI界面,支持输入多路RTSP地址。拉流解码/转码:使用ffmpeg编解码,opencv转换格式,每路RTSP流有独立的处理周期。 4.2实现流程4.2.1RTSP流输入使用VUE3框架,简单编写了一个RTSP流实时输入和效果展示页面,目前支持4路RTSP流输入,页面如下图所示。 注意,要实现多路RTSP流同时解析,每路都需要创建converter实例。 如下图(保护隐私,做了脱敏处理),输入多个RTSP地址,通过人脸识别检测后,会实时渲染到UI上。如果不需要实时显示人脸框,只保留后台服务,可以删除VUE3和HTML相关功能。
本代码是使用GStreamer播放RTSP视频流,没有使用playbin,而是自己构建pipeline,经测试可以正常播放视频。 data.sink), "sync", FALSE, NULL); /* Set the URI to play */ g_object_set (data.source, "location", "rtsp pad */ gst_object_unref (sink_pad); } 编译命令: gcc rtspplay.c `pkg-config --cflags --libs gstreamer-1.0` RTSP 地址换成自己的即可,上述代码只是简单展示如何使用pipeline播放RTSP视频。
最近项目中需要实时播放摄像头rtsp视频流,于是就专门做了些研究。而浏览器不能直接播放,只有通过插件或者转码来实现这个需求。 方案一: html5 + websocket_rtsp_proxy 实现视频流直播 实现原理 实现步骤 服务器安装streamedian服务器 客户端通过video标签播放 var errHandler 其原理是把整个流切分成一个个的小视频文件,然后通过一个m3u8的文件列表来管理这些视频文件 HTTP Live Streaming 并不是一个真正实时的流媒体系统,这是因为对应于媒体分段的大小和持续时间有一定潜在的时间延时 此外,在客户端开始下载之前,必须等待服务器端的编码器和流分割器至少生成一个TS文件,这也会带来潜在的时延。 服务器软件将接收到的流每缓存一定时间后包装为一个新的TS文件,然后更新m3u8文件。 参考链接 其他方案 WebRTC WebRTC 是支持网页浏览器进行实时音视频的一套API,例如:HTML5 通过 webRTC 直接调用摄像头,但是如果要实现远程视频流的显示,则需要将 RTSP 转换为
技术背景 实际上,我们在2015年做Android平台RTSP、RTMP播放模块的时候,第一版就支持了多实例播放,因为SDK设计比较灵活,做个简单的player实例封装即可实现多实例播放(Android Unity的就有多路demo),所以官方一直没有正式demo,本次也是有个开发者提到,希望测试下我们多路播放的效果,自己又不想做封装,索性给做个版本。 1 : 0); //设置RTSP超时时间 int rtsp_timeout = 10; lib_player_.SmartPlayerSetRTSPTimeout(handle, rtsp_timeout ); //设置RTSP TCP/UDP模式自动切换 int is_auto_switch_tcp_udp = 1; lib_player_.SmartPlayerSetRTSPAutoSwitchTcpUdp is_auto_switch_tcp_udp); lib_player_.SmartPlayerSaveImageFlag(handle, 1); // It only used when playback RTSP
技术背景 无论是Windows平台还是Linux,多路播放诉求非常普遍,比如针对智慧工地、展馆、教育等宏观场景下的摄像头展示,关于RTSP或RTMP直播播放器开发需要注意的点,可参考之前博客,总的来说有以下一些点 音视频同步或跳转:有些开发者为了追求低延迟体验,甚至不做音视频同步,拿到audio video直接播放,导致a/v不同步,还有就是时间戳乱跳; 3. 静音支持:比如,多窗口播放RTSP流,如果每个audio都播放出来,体验非常不好,所以实时静音功能非常必要; 8. 代码实现 本文以大牛直播SDK(官方)的Linux平台为例,介绍下RTMP或RTSP流多路播放集成。 总结 多路RTMP或RTSP播放,涉及到性能和多路之间音视频同步、长时间播放稳定性等问题,Linux平台可参考的资料比较少,可选的方案比较少,感兴趣的可酌情参考。
背景 尽管Windows平台有诸多优势,Linux平台的发展还是势不可挡,特别实在传统行业,然而Linux生态构建,总是差点意思,特别是有些常用的组件,本文基于已有的Linux平台RTSP、RTMP播放模块 ,构建Unity下的RTSP和RTMP直播播放。 技术实现 实际上,Unity层面这块没什么好介绍的,和Windows、Android、iOS平台一样,调用原生的播放模块,回调解码后的数据,在Unity绘制,主要的技术难点,还在原生的处理,也就是拉流、 _ + 1) / 2); u3d_frame.y_stride_ = d_y_stride; u3d_frame.u_stride_ = d_u_stride; u3d_frame.v_stride Unity下,简单来说就是拉流解码回调,上层绘制,其实也没有那么复杂,需要注意的是DllImport的写法、之前C++结构体或枚举的转换、Unity3D对Linux的版本兼容等一些细节,对熟悉C#的开发者来说
好多开发者的使用场景,需要在Windows特别是Android平台实现Unity3D的全景实时视频渲染,本文以Windows平台为例,简单介绍下具体实现: 如果是RTSP或RTMP流数据,实际上难点,主要在于拉取 RTSP或RTMP流,解析解码,然后把解码后的YUV数据,回调到Unity层,Unity创建个Sphere,创建个材质球(Material),并把材质球挂在到Sphere即可。 ,编码推送到RTMP服务器,播放端拉流回调数据并在Unity渲染为例(左侧是Unity播放端,滑动鼠标,可以实现全景内容切换): unity全景.jpg 废话不多说,大概流程如下: 本文以调用我们写的RTSP 、RTMP直播播放模块为例,首先是初始化模块,然后设置拉流的参数信息: public void Play(int sel) { if (videoctrl[sel].is_running) 0.0f, 0.0f, 0.0f); } } 以上是Unity3D下实现RTMP或RTSP全景视频播放的大概流程,感兴趣的开发者可自行尝试。