SkeyePlayer RTSP Windows端(下文简称:SkeyePlayer)播放器之前抓图代码主要通过OpenCV来实现,且数据格式转换的效率过于低下;故而在当时的代码中采用线程机制来解决抓图导致视频播放时卡顿的问题 ;而最新版的SkeyePlayer为了精简代码也为了提高抓图效率,我们采用ffmpeg进行抓图,为了保证视频播放的流畅性,线程机制我们仍然保留。 当然强大的格式转换函数也支持图像的缩放,且效率很高; 图像编码,细心的同学不难发现,ffmpeg的编码和存文件/推送流的代码是通用的,这套代码可以用来抓图也可以用来编码H264、265等然后存文件(如MP4等)或者推送RTMP/RTSP
从摄像机获取的RTSP视频流直接在浏览器中播放,这里采用vlc插件进行播放,设置步骤如下 1、下载32位的vlc播放器,安装时选择安装插件,安装路径不要有空格,注意64位播放器安装上也不能正常播放 (我测试不能正常播放) 2、注册VLC插件(否则视频无法正常显示):使用cmd 运行:regsvr32 D:\VideoLAN32\VLC\axvlc.dll 其中D:\VideoLAN32\VLC为VLC events=’false’width=”720″height=”410″> object> div> body> 其中,value=’rtsp://184.72.239.149/vod/mp4://BigBuckBunny loop: (true或false),是否循环 fullscreen:是否全屏 controls:显示默认的控件 4、目前测试IE浏览器和360浏览器可以正常支持vlc插件播放 5、若需要播放多个视频 ,将object标签拷贝几次,将id改一下,将不同的RTSP视频流地址修改即可。
NT_SP_E_VIDEO_FRAME_FORMAT_RGB32 = 1, // 32位的rgb格式, r, g, b各占8, 另外一个字节保留, 内存字节格式为: bb gg rr xx, 主要是和windows , 依次是rr, gg, bb NT_SP_E_VIDEO_FRAME_FORMAT_ARGB = 2, // 32位的argb格式,内存字节格式是: bb gg rr aa 这种类型,和windows 2.4.10 RTMP/RTSP播放参数设置 具体可参照Demo源码里面InitCommonSDKParam(): 2.4.10.1 播放前可选设置接口 NT_SP_SetBuffer:设置视频播放缓冲 NT_SP_StartPlay 开始播放RTMP或RTSP流数据。 2.4.17 停止播放 NT_SP_StopPlay 停止播放RTMP或RTSP流数据。 2.4.18 关闭播放实例 NT_SP_Close 调用Close接口后,player handler置空。
好多开发者在做Windows平台特别是单屏多画面显示时,希望像监控摄像机一样,可以在播放画面添加OSD台标,以实现字符叠加效果,大多开发者可很轻松的实现以上效果,针对此,本文以大牛直播SDK (Github )的Windows平台demo为例,简单介绍下具体实现: Windows平台RTMP播放器、RTSP播放器C++ demo Windows平台C++的demo,以录像过程为例,动态在左上角显示个闪动的图标 logo_image->data_.swap(buffer); } bitmap.UnlockBits(&locked_bitmapData); } return logo_image; } Windows 平台RTMP播放器、RTSP播放器C# demo Windows平台C#的demo,添加了“设置台标”选择框,在player窗口左上角显示“叠加字符展示”,具体内容、坐标可自定义,具体效果如下: 添加osd.png
我们在实现Windows平台RTSP播放器或RTMP播放器的时候,需要考虑的点很多,比如多实例设计、多绘制模式兼容、软硬解码支持、快照、RTSP下TCP-UDP自动切换等,以下就其中几个方面,做个大概的探讨 视频绘制模式 我们在实现Windows平台播放的时候,一般首选D3D,D3D不支持的情况下,考虑数据回上来,采用GDI模式,一般实现如下,先做D3D检测,以大牛直播SDK播放端为例(Github),调用 特定机型硬解码 Windows平台硬解码,主要适用于性能偏弱的PC端,或者有多路播放诉求的场景,一般建议在软解性能没问题的情况下,尽量软解,具体处理如下,先检测系统是否支持硬解,如果支持,再做硬解设置, 实时快照 实时快照功能不表,是一个好的RTSP播放器和RTMP播放器必备的功能,实时快照是把解码后的yuv数据重新编码成png,所以有一定的CPU消耗,不建议过于频繁操作,具体实现如下: set_capture_image_call_back_(result, image_name); } } 后续,我们将针对RTSP
我们在Windows平台实现RTSP或者RTMP播放的时候,有个功能是绕不开的,那就是播放窗口全屏。 本文就以大牛直播SDK(官方)的Windows播放器为例,大概讲下大概实现: 全屏播放需要考虑的点不多: 第一:视频播放后,全屏的意义; 第二:全屏后,是否等比例显示,我们的设计原则是,之前等比例显示的
我们在做Windows平台Unity播放RTMP或RTSP的时候,遇到这样的问题,比如展会、安防监控等场景下,需要同时播放多路RTMP或RTSP流,这样对设备性能,提出来更高的要求。 虽然我们软解码,已经做的资源占有非常低了,但考虑到多路播放的情况,我们也设计了硬解码的接口,下面大概讲下,如何在Unity下开启硬解码: 图片 检测系统是否支持硬解码 /* * 检查是否支持 1 : 0, 0); 如果系统支持硬解码,开启后,可以明显看到CPU占用,会有一定的改善,在多路播放的场景下,还是非常必要,感兴趣的开发者,可以参考设计。
GitHub – 131/h264-live-player: A live h264 player for the browser (ideal for raspberrypi / raspicam ) 网页播放 rtsp视频流 原文:网页播放rtsp视频流_江山夜雨的博客-CSDN博客_web播放rtsp RTSP协议 (1)是流媒体协议。 (2)RTSP协议是共有协议,并有专门机构做维护。 (3)RTSP协议一般传输的是 ts、mp4 格式的流。 (4)RTSP传输一般需要 2-3 个通道,命令和数据通道分离。 如果客户使用ie或者firefox的话,可以使用vlc player,vlc player 同样需要安装插件,需要电脑上安装vlc player的本地客户端(安装时勾选插件选项),然后通过 标签来引入播放 [endif]--> 2、quicktime 也是需要安装quicktime客户端(安装时勾选插件),下载 Windows 版 QuickTime 7.7.9 (中国) ,参考博客使用Quicktime
本代码是使用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视频。
技术背景上篇文章,我们介绍了Unity平台RTMP、RTSP播放器录像功能,这里,我们详细的介绍下,做个RTSP或RTMP拉流端录像模块有哪些需要考虑的技术点? 在我们常规的考量,RTMP或RTSP流录制,无非就是拉取数据写文件而已,接口设计StartRecorder()/StopRecorder()足矣。 除了上述的设计,还需要确保和RTSP、RTMP播放在一个实例下,确保播放的过程中可以随时录像,录像的过程中,可以随时播放。 录像模块设计无图无真相,先看录像设置:图片开始录像、停止录像:图片Windows平台,我们提供了C++和C#的接口,本文以C++接口设计为例:先说录像设置:设置录制纯音频或纯视频: /**
最近项目中需要实时播放摄像头rtsp视频流,于是就专门做了些研究。而浏览器不能直接播放,只有通过插件或者转码来实现这个需求。 方案一: html5 + websocket_rtsp_proxy 实现视频流直播 实现原理 实现步骤 服务器安装streamedian服务器 客户端通过video标签播放 var errHandler 实现步骤 注意:linux系统需要安装 nginx-rtmp-module 模块,Windows系统安装包含rtmp的(如nginx 1.7.11.3 Gryphon) 3. flash允许 参考链接 方案三:ffmpeg + video,rtsp转hls播放 HLS (HTTP Live Streaming) 直播 是有苹果提出的一个基于http的协议。 复制代码 优缺点 优点: 可以直接播放RTSP,无需任何中介服务器的帮助 缺点: 需要手动安装插件; 基于NPAPI,不被最新的 Chrome 和 Firefox 支持 如果你项目的其他功能都能兼容客户电脑上的
为什么要支持GDI 先说结论,Windows平台播放渲染这块,一般来说99%以上的机器都是支持D3D的,实现GDI模式绘制,除了为了好的兼容性外,在远程连接的场景下,D3D创建不成功,需要使用GDI模式 简单来说,Windows平台的RTMP播放器或RTSP播放器,设计如果系统支持D3D,优先D3D,如果检测到不支持D3D,数据回调上来,GDI模式绘制。 上图以1920*1080分辨率、30帧、固定码率(采集屏幕左侧区域)为例,通过大牛直播SDK ( 官方 ) 的Windows平台SmartPublisherDemo.exe工具推送到内网nginx服务器 ,然后分别以D3D模式和GDI模式拉流(播放端缓冲设置为0)。 1 : 0); } else { is_gdi_render_ = true; // 不支持D3D就让播放器吐出数据来,用GDI绘制 wrapper_render_wnd
RTSP协议探究RTSP播放器可广泛应用于对延迟要求比较高的场景下,比如协同操控相关的智能机器人或无人机、实时视频监控、远程视频会议、网络电视等。通过控制信令实现对流媒体数据的远程控制和传输管理。 三、协议功能播放控制:客户端可以通过RTSP命令控制媒体流的播放,如播放、暂停、停止、快进和快退等。 如何实现RTSP播放器 本文以大牛直播SDK的Windows平台RTSP直播播放器为例,大概介绍下,如何集成RTSP直播播放能力。 NT_SP_StartPlay开始播放RTMP或RTSP流数据。 停止播放NT_SP_StopPlay停止播放RTMP或RTSP流数据。关闭播放实例NT_SP_Close调用Close接口后,player handler置空。
背景我们看过了太多介绍RTSP、RTMP播放相关的技术资料,大多接口设计简约,延迟和扩展能力也受到一定的局限,好多开发者希望我们能从接口设计的角度,大概介绍下大牛直播SDK关于RTMP、RTSP播放器开发设计 ,本文以Windows平台RTMP、RTSP播放模块为例,大概介绍下常用的接口。 一般来说,Windows平台如果同时播放的实例不多或者分辨率不是太高的话,考虑到播放体验,建议优先考虑软解码,如果特定设备需要多路播放,也可以考虑硬解,需要注意的是,如果调用硬解码,需要先做是否支持硬解码检测 1 : 0);总结以上就是大牛直播SDK(官网)关于Windows平台RTSP、RTMP播放器接口设计需要参考的点,其他还有些,比如如果不支持D3D,GDI模式绘制,播放界面叠加实时文字,播放画面全屏等 ,这里就不再赘述,除Windows平台外,我们还同步开发了Linux、Android、iOS平台的RTSP、RTMP播放器,大多常规接口四个平台基本统一,延迟也都做到了毫秒级。
技术设计本文以大牛直播SDK的Windows平台RTSP|RTMP直播播放录制功能设计为例,谈谈我们的接口的细粒度设计。 目前,我们录像模块,涵盖了Windows/Linux/android/iOS 推送端(涵盖轻量级RTSP服务模块、RTMP推流模块和GB28181设备接入模块)和RTSP|RTMP播放端,主要实现了如下功能 : [拉流]支持拉取RTSP流录像; [拉流]支持拉取RTMP流录像; [推流端录像]支持RTMP|RTSP推送端同步录像; [轻量级RTSP服务录像]支持轻量级RTSP服务SDK同步录像; [推流端录像实时暂停 /恢复]支持推送端录像过程中实时暂停录像、恢复录像; [逻辑分离]大牛直播录像SDK不同于普通录像接口,更智能,和推送、播放、转发、内置轻量级RTSP服务SDK功能完全分离,支持随时录像; [url切换 专注做好一件事,极致做精一件事,口碑做成一件事,比快更快,让RTSP|RTMP直播播放器更适用于延迟要求苛刻的使用场景(如平衡控制、无人机、智能机器人等),是我们一直的追求。
以Windows平台为例,海康摄像头2560*1440分辨率、8M码率的RTSP流,左侧是VLC播放器,有测试大牛直播SDK的SmartPlayer的,可以看到,SmartPlayer延迟200毫秒左右 跨平台支持多平台兼容:大牛直播SDK的RTSP播放器支持Windows、Linux(x86_64|aarch64)\Android、iOS多个平台,满足了不同场景下的使用需求。 功能丰富多实例播放:支持同时播放多路RTSP流,适用于需要同时监控多个视频源的场景。 ,此外,还支持RTSP MJPEG播放; [音频格式]支持AAC/PCMA/PCMU; [H.264/H.265软解码]支持H.264/H.265软解; [H.264硬解码]Windows/Android OpenSL ES; [实时静音]支持播放过程中,实时静音/取消静音; [实时音量调节]支持播放过程中实时调节音量; [实时快照]支持播放过程中截取当前播放画面; [只播关键帧]Windows平台支持实时设置是否只播放关键帧
好多开发者纠结播放端绘制,是D3D还是GDI,先说结论,Windows平台播放渲染这块,支持D3D的前提下,优先D3D,如果检测到不支持D3D,数据回调上来,GDI模式绘制。 无图无真相: 本文以1920*1080分辨率、30帧、固定码率(采集屏幕左侧区域)为例,通过大牛直播SDK ( github) 的Windows平台SmartPublisherDemo.exe工具推送到内网 nginx服务器,然后分别以D3D模式和GDI模式拉流(播放端缓冲设置为0)。 is_gdi_render_ = true; playWnd.Visible = false; // 不支持D3D就让播放器吐出数据来
实现了浏览器 MSE (Media Source Extensions) 播放相机 RTSP (Real Time Streaming Protocol) 流。 更多 技术: WebSocket[2] MediaSource[3]: 构建媒体流,供 video/audio 元素播放 WebRTC[4]: 可直接捕获客户端视频流,并点对点传输、不依赖服务器中转 WebCodecs [12]: RTSP > fMP4 Streamedian/html5_rtsp_player[13]: RTSP > fMP4, Proxy 收费 JS 解码 131/h264-live-player [21] kyriesent/node-rtsp-stream[15] wanghaoxi3000/gin-rtsp[16] YE-Fan/JAVA-RTSP-JSMpeg[17] Aleckgt/rtsp-ws-proxy /gin-rtsp [17] YE-Fan/JAVA-RTSP-JSMpeg: https://github.com/YE-Fan/JAVA-RTSP-JSMpeg [18] Aleckgt/rtsp-ws-proxy
摘要(Abstract)在 Windows 端实现 RTSP 播放,看似只是“把流播出来”,实则涉及端到端延迟、弱网稳态、硬件解码覆盖率、渲染路径零拷贝、并发与资源占用、可观测性与可运维等多维指标的系统工程 为什么 Windows 端的 RTSP 播放“门槛”更高? 协议与链路复杂度:Windows 原生并不直接提供完善的 RTSP 播放链路支持,RTP 解复用、乱序重组、缓存管理都需要播放器自行实现或依赖第三方库,稍有疏忽就会引发花屏、音画不同步或延迟积累。 Windows 端主流技术路线对比在 Windows 平台实现 RTSP 播放,有多条可行的技术路线,不同方案在协议支持、延迟控制、弱网适应性、渲染效率、集成成本等方面差异显著。 结语在 Windows 平台选择 RTSP 播放器,从来不只是“能不能播”的技术判断,而是一场涉及延迟控制、播放稳定性、并发能力与运维成本的全局博弈。
,我们可能无法直接通过播放器控制音量,这时候,可以使用操作系统的全局音频控制来调节RTSP或RTMP播放器的音量。 跨平台使用操作系统支持:可在 Windows、macOS、Linux 等多个主流操作系统上运行。无论你使用哪种操作系统,都可以享受到 VLC 带来的强大播放功能。 (可达150-300ms延迟)的RTSP、RTMP播放器,以下是其主要功能列表:播放协议支持: 广泛的流媒体协议:支持 RTMP、RTSP 等主流直播流媒体协议,可播放相应协议的直播视频流,适用于多种直播场景 播放控制功能: 多实例播放:支持同时播放多路 RTMP 或 RTSP 流,方便用户同时观看多个直播源,例如在监控场景中可同时查看多个监控摄像头的画面。 播放器如何设计音量调节接口 以大牛直播SDK的Windows平台RTSP、RTMP播放器为例,最早,我们设计的接口如下,直接通过实时静音来完成音量调节:/* * smart_player_sdk.cs