技术背景我们在对接外部开发者的时候,遇到这样的技术诉求,客户用于地下管道检测场景,需要把摄像头的数据拉取过来,然后叠加上实时位置、施工单位、施工人员等信息,然后对外输出新的RTSP流,并本地录制一份带动态水印叠加后的数据 技术实现废话不多说,下图先通过Android平台拉取RTSP流,然后把解码后的yuv或rgb数据回上来,以图层的形式投递到推送端,需要加水印的话,添加文字水印或图片水印(系动态水印)图层,底层做动态叠加后二次编码打包 ,通过启动轻量级RTSP服务,发布RTSP流,生成二次处理后的RTSP新的拉流url,如果需要推送至RTMP,只要调用推送RTMP的接口即可,本地录制,可以设置录制目录等信息,保存二次编码后的MP4文件到本地 }发布RTSP流://发布/停止RTSP流class ButtonRtspPublisherListener implements View.OnClickListener {public void onClick ;return;}startLayerPostThread();btnRTMPPusher.setText("停止推送");}});总结以上是Android平台拉取RTSP数据,然后添加动态水印后,二次输出到轻量级
com.sun.image.codec.jpeg.JPEGCodec; //import com.sun.image.codec.jpeg.JPEGImageEncoder; /** * 说明:图片水印处理类 String strFWATERM,strIWATERM; static{ strFWATERM = Tools.readTxtFile(Const.FWATERM); //读取文字水印配置 strIWATERM = Tools.readTxtFile(Const.IWATERM); //读取图片水印配置 } /** * 刷新 */ public static (String imagePath){ //文字水印 if(null ! strFW[2]), Integer.parseInt(strFW[3]), Integer.parseInt(strFW[4])); //文字 } } } //图片水印
image.size[0] * 3, image.size[1] * 3), (255, 255, 255, 255)) new_img.paste(image, image.size) # 添加水印 Image.new('RGBA', rgba_image.size, (0, 0, 0, 0)) image_draw = ImageDraw.Draw(text_overlay) # 水印数量 text}, font:{font}') image_draw.text((i, j), text, font=font, fill=(0, 0, 0, 50)) # 水印文字角度 image.size[1] * 2)) return image_with_text if __name__ == '__main__': pic = '1.png' # 需要加水印的图片 text = "我是水印" # 水印文字 fontsize = 32 # 文字大小 img = Image.open(pic) fill_img
技术背景 我们在做Windows平台流数据转发的时候,除了常规的RTSP转RTMP推送外,还有个场景就是,好多开发者希望拉取的RTSP流,做二次视频分析,或者加动态水印等,处理后的数据,再二次编码推送到 技术实现 本文就以Windows平台拉取RTSP流,回调yuv数据到上层,处理后的数据,二次投递到RTMP服务和轻量级RTSP服务,然后叠加动态水印,并实现处理后的数据实时录像功能,废话不多说,先上图: 上图拉取了RTSP流,然后左侧窗体显示,添加动态水印后,再在右侧预览,并把数据重新投递到推送端,考虑到编码性能,我们可选硬编码。 (); btn_rtsp_stream.Text = "发布RTSP流"; btn_get_rtsp_session_numbers.Enabled 流二次编辑(如增加动态水印)或视频分析(视觉算法处理)后,再录像、转推至RTMP或轻量级RTSP服务流程,经过二次处理后的流数据,配合我们的SmartPlayer,依然可以整体毫秒级的延迟体验
将视频流保存为.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 流之前,先弄清楚你的摄像头设备的流获取规则,比如我的摄像头牌子是海康的,对应的获取流的规则,我在另个帖子说了,你们要根据你们的牌子找对应的规则获取到流后再做上面的流处理。
前言:本文探讨的是利用pageEvent事件在生成PDF文件的过程中把图片水印加好,这样导出的是加好水印的pdf文件。 1:加入依赖 <! artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> 2:准备好水印图片 ,将图片拷贝到项目中 3:代码示例,利用pageEvent事件加水印 定义事件类 package itextpdf; import com.itextpdf.text.Document; import document.getPageSize().getWidth(); try { Image img = Image.getInstance(markImagePath);//生成水印图片 plainWidth, plainHeight);//设置图片大小 img.setAlignment(Image.UNDERLYING); // 在字下面 //设置水印图片的坐标
现在很多人都在使用小红书app,但大家肯定都会有同一个问题,图片怎么保存,重点是怎么保存图片无水印。看到好看的图片想保存下来,可是却不喜欢看到有水印。 下载完图片它会自动保存一个文件夹,我们打开文件夹可以看到里面的图片都没有水印哦。 如果有多个图片批量下载,看第一个步骤,你会发现链接一行一个自动粘贴到工具里面如下图所示:采集完点立即下载 还可以批量下载小红书视频哦,打开文件夹,查看视频,都是高清原视频,且无水印,还在迷茫的你,不妨试试小编这个方法吧
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 接收 RTSP,以 ffplay ffplay rtsp://127.0.0.1:1554/test.mp4 参考 FFmpeg[15] ffserver[16] Streaming RTSP with
技术背景我们在对接RTSP播放器相关的技术诉求的时候,遇到这样的需求,客户做特种设备巡检的,需要把摄像头拍到的RTSP流拉下来,然后添加动态水印后,再生成新的RTSP URL,供平台调用。 技术实现在此之前,大牛直播SDK有非常成熟的RTSP播放、轻量级RTSP服务和录像模块,要做的就是,拉取到RTSP流后,把解码后的YUV或RGB回调给上层,上层通过图层的形式,添加动态文字水印(图片水印亦可 ),然后,投递给轻量级RTSP服务,RTSP服务对外提供个拉流的RTSP URL,无图无真相:左侧就是我们基于Windows平台C#的播放器的demo,二次开发的,添加了软、硬编码设置(考虑到分辨率比较高 ,添加支持了硬编码选项设置)、动态水印设置、轻量级RTSP服务、实时录像和RTMP推送。 拉流二次编码,整体逻辑不复杂,就是把数据回调后,二次处理,我们推送端设计的是图层的形式,所以,回调后的数据,直接作为第0层,文字水印作为第一层,如果需要图片水印,图片水印作为第三层即可。
– 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 个通道,命令和数据通道分离。 --<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>">
本代码是使用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 此外,在客户端开始下载之前,必须等待服务器端的编码器和流分割器至少生成一个TS文件,这也会带来潜在的时延。 服务器软件将接收到的流每缓存一定时间后包装为一个新的TS文件,然后更新m3u8文件。 参考链接 其他方案 WebRTC WebRTC 是支持网页浏览器进行实时音视频的一套API,例如:HTML5 通过 webRTC 直接调用摄像头,但是如果要实现远程视频流的显示,则需要将 RTSP 转换为 WebRTC 流,供 web 端显示。
通过 Android 端 RTSP 播放器模块及 YUV 数据回调机制,系统可在实时播放的同时进行 动态水印叠加、录像存档、二次编码以及轻量级 RTSP 服务再发布。 1️⃣ 播放端:RTSP 解码与 YUV 回调机器人前端摄像头通过内部 RTSP 服务输出实时码流。 2️⃣ 中间层:水印叠加与数据转投递在 demo 中,播放器回调的 YUV 数据会交由业务层进行轻量级图像处理。 常见操作包括: 叠加设备编号、时间戳、水印 Logo; 局部标注(如检测点框选)。 它让系统拥有三种能力: 可看:低延迟、高稳定的实时画面; 可用:YUV 数据可供 AI/水印/再编码复用; 可传:轻量 RTSP/RTMP/FLV 服务可随时转发。 ▶ Step 1:SmartPlayer —— 视觉采集与解码检测机器人前端摄像头通过 RTSP 输出实时视频流,终端端(主控设备或 Android 平台)使用 SmartPlayer 模块拉流、解码。
文章目录 RTSP视频流处理方法 1. Gstreamer整体框架 1.1 Media Applications 1.2 Core Framework 1.3 Plugins 2. 参考链接 RTSP视频流处理方法 这里使用Gstreamer + OpenCV来处理RTSP视频流,因此对Gstreamer进行调查。 1. 1.2 Core Framework 中间一层为Core Framework,主要提供: 上层应用所需接口 Plugin的框架 Pipline的框架 数据在各个Element间的传输及处理机制 多个媒体流( Filters:负责媒体流的处理,converters,mixers,effects等。 Sinks:负责媒体流输出到指定设备或目的地,alsa,xvideo,tcp/udp等。 2. 下面是解析RTSP视频流的pipeline: gst-launch-1.0 -v rtspsrc location=rtsp://10.201.0.158:8554/vlc !
关键点: 该功能实现,主要需要考虑RTSP取摄像头视频流,拆RTP包,组H264帧,通过PJSIP的视频通道转发;这个过程中,涉及到RTP通道保活,RTSP通道保活;调试时间多耗费在对摄像头返回的RTP 1、RTSP信令通道; curl支持rtsp的客户端取流,demo实现也是很简单的,主要有几个点,一是用户鉴权,二是RTSP通道保活; 用户鉴权:参考 https://github.com/lminiero 部分的接口, typedef struct pjmedia_rtsp_source_op { int (*init_rtsp_client)(); int (*deinit_rtsp_client int (*stop_rtsp_client)(); }pjmedia_rtsp_source_op; extern void set_use_rtsp_source(const char *url , &start_rtsp_client_sip, &stop_rtsp_client }; pjsip的接口: void register_rtsp_client_source(const
RTSP视频流显示(海康威视) VLC 网页显示 VLC-Qt库 SDK(C++) 本文使用环境如下: SDK下载。 AppEmit WebComponentsKit插件 VLC 如果使用插件需要注意谷歌浏览器版本,本文是在官网下载的软件,下载下来安装并运行: 填的地址就是摄像头RTSP视频流地址,然后点串流 1-子码流,2-码流 3,3-码流 4,以此类推 struPlayInfo.dwLinkMode = 0; //0- TCP 方式,1- UDP 方式,2- 多播方式,3- RTP 方式,4-RTP/RTSP,5-RSTP/HTTP struPlayInfo.bBlocked = 1; //0- 非阻塞取流,1- 阻塞取流 struPlayInfo.dwDisplayBufNum 视频流: 依次点击1、3即可看到画面,2位置的输入框需要按规则输入包含rtsp视频流地址信息的json格式描述,页面中列举了简单的测试案例: 主要代码提取出来: <!
实现了浏览器 MSE (Media Source Extensions) 播放相机 RTSP (Real Time Streaming Protocol) 流。 /nginx.conf -g 'error_log error.log warn;' # 设置相机发送 H264(该项目只支持 H264) 使用 发送 RTSP 流: sudo snap install ://:8554/test}' # 测试接收 RTSP 流 vlc rtsp://127.0.0.1:8554/test 启动程序: killall -9 nginx python3 ws_serve_new.py 更多 技术: WebSocket[2] MediaSource[3]: 构建媒体流,供 video/audio 元素播放 WebRTC[4]: 可直接捕获客户端视频流,并点对点传输、不依赖服务器中转 WebCodecs WebAssembly[6]: C/C++/Rust 等编译进前端使用 ffmpegwasm/ffmpeg.wasm[7] GoogleChromeLabs/webm-wasm[8] 项目: MSE: 需构建流,
将一个视频转成rtsp流,通过vlc播放器,搭建一个rtsp服务器,让rtsp客户端去访问这个视频的rtsp流 1 需要有vlc播放器,我的版本如下 2 媒体 –> 流 3 添加视频文件 ,点击添加一个mp4 文件 4 选择串流,然后 点击 “下一个” 5 选择新目标,RTSP ,然后点击添加 6 端口默认,路径添加个自定义名称 7 配置文件,不需要激活转码 8 下一步完成 【注意不要关闭这个vlc窗口】 9 验证,再重新打开一个vlc窗口 10 输入地址 rtsp://192.168.88.102:8554/vlc 说明: rtsp: 协议 192.168.88.102:本机ip地址 8554: 第六步填写的端口 vlc: 第六步填写的路径 11 效果图 html播放rtsp流 CSDN 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人