技术背景我们在对接外部开发者的时候,遇到这样的技术诉求,客户用于地下管道检测场景,需要把摄像头的数据拉取过来,然后叠加上实时位置、施工单位、施工人员等信息,然后对外输出新的RTSP流,并本地录制一份带动态水印叠加后的数据 技术实现废话不多说,下图先通过Android平台拉取RTSP流,然后把解码后的yuv或rgb数据回上来,以图层的形式投递到推送端,需要加水印的话,添加文字水印或图片水印(系动态水印)图层,底层做动态叠加后二次编码打包 ,通过启动轻量级RTSP服务,发布RTSP流,生成二次处理后的RTSP新的拉流url,如果需要推送至RTMP,只要调用推送RTMP的接口即可,本地录制,可以设置录制目录等信息,保存二次编码后的MP4文件到本地 = 0) {libPublisher.CloseRtspServer(rtsp_handle_);rtsp_handle_ = 0;Log.e(TAG, "创建rtsp server端口失败! ;return;}startLayerPostThread();btnRTMPPusher.setText("停止推送");}});总结以上是Android平台拉取RTSP数据,然后添加动态水印后,二次输出到轻量级
上一篇我们讲解了RTSP PLAY消息,PLAY请求成功之后,RTSP server就会一直向客户端发送RTP数据包!开始“播放”之后,我们相应的就会有暂停,停止等操作! 本篇我们就先来看下RTSP的PAUSE! PAUSE作用 暂停请求会使得流传输暂时中断(相当于暂停),如果请求的URL指向一个流地址,则仅针对该流的回放和录制会被中断! RTSP URI表示请求的流地址,RTSP Version表示RTSP的版本号; CSeq表示消息序列号; Session表示会话ID,SETUP请求时服务端返回的ID。 我们来看一个实际的例子吧,就用官方的吧: PAUSE rtsp://example.com/fizzle/foo RTSP/1.0\r\n CSeq:834\r\n Session:12345678\r 格式也比较简单,Rtsp Version表示版本号,状态码表示回复的状态,状态描述是对状态码的描述;CSeq表示序列号;Date表示时间!
技术背景 我们在做Windows平台流数据转发的时候,除了常规的RTSP转RTMP推送外,还有个场景就是,好多开发者希望拉取的RTSP流,做二次视频分析,或者加动态水印等,处理后的数据,再二次编码推送到 技术实现 本文就以Windows平台拉取RTSP流,回调yuv数据到上层,处理后的数据,二次投递到RTMP服务和轻量级RTSP服务,然后叠加动态水印,并实现处理后的数据实时录像功能,废话不多说,先上图: 上图拉取了RTSP流,然后左侧窗体显示,添加动态水印后,再在右侧预览,并把数据重新投递到推送端,考虑到编码性能,我们可选硬编码。 //String url = "rtmp://192.168.2.154:1935/live/stream1"; if (url.Length < 8) 流二次编辑(如增加动态水印)或视频分析(视觉算法处理)后,再录像、转推至RTMP或轻量级RTSP服务流程,经过二次处理后的流数据,配合我们的SmartPlayer,依然可以整体毫秒级的延迟体验
技术背景我们在对接RTSP播放器相关的技术诉求的时候,遇到这样的需求,客户做特种设备巡检的,需要把摄像头拍到的RTSP流拉下来,然后添加动态水印后,再生成新的RTSP URL,供平台调用。 技术实现在此之前,大牛直播SDK有非常成熟的RTSP播放、轻量级RTSP服务和录像模块,要做的就是,拉取到RTSP流后,把解码后的YUV或RGB回调给上层,上层通过图层的形式,添加动态文字水印(图片水印亦可 ,添加支持了硬编码选项设置)、动态水印设置、轻量级RTSP服务、实时录像和RTMP推送。 } String url = "rtmp://192.168.0.108:1935/hls/stream1"; if (url.Length < 8) 拉流二次编码,整体逻辑不复杂,就是把数据回调后,二次处理,我们推送端设计的是图层的形式,所以,回调后的数据,直接作为第0层,文字水印作为第一层,如果需要图片水印,图片水印作为第三层即可。
继之前一篇科普文《如何使用RTSP推流组件EasyPusher将MP4文件推到EasyDarwin开源平台》发布后,有开发者提出疑问:假如需要显示视频直播时间,如何在推送的时候可以自定义在视频上叠加时间水印 fontfile=arial.ttc:x=w-tw-20:y=30:fontcolor=white:fontsize=11:text=‘2020-10-10 %{localtime:%H\:%M\:%S}’” -rtsp_transport tcp -vcodec h264 -f rtsp rtsp://172.81.216.155:554/test.sdp 此命令解释,循环把test.mp4读出来以RTSP协议方式推送到172.81.216.155
通过 Android 端 RTSP 播放器模块及 YUV 数据回调机制,系统可在实时播放的同时进行 动态水印叠加、录像存档、二次编码以及轻量级 RTSP 服务再发布。 height_, 0, 0,0,0, 0,0);}}}通过该接口,开发者可直接在内存中获取逐帧图像数据,无需额外解码或拷贝,即可实现多种高阶功能: 动态叠加企业 Logo / 时间戳 / 检测编号等水印信息 1️⃣ 播放端:RTSP 解码与 YUV 回调机器人前端摄像头通过内部 RTSP 服务输出实时码流。 2️⃣ 中间层:水印叠加与数据转投递在 demo 中,播放器回调的 YUV 数据会交由业务层进行轻量级图像处理。 常见操作包括: 叠加设备编号、时间戳、水印 Logo; 局部标注(如检测点框选)。 它让系统拥有三种能力: 可看:低延迟、高稳定的实时画面; 可用:YUV 数据可供 AI/水印/再编码复用; 可传:轻量 RTSP/RTMP/FLV 服务可随时转发。
技术背景我们在做Windows平台RTMP推送、轻量级RTSP服务的时候,遇到过这样的技术需求,除了常规的png图片水印外,开发者希望能在桌面或摄像头上,叠加上实时时间和位置信息,并保存到图像里。 技术实现本文以大牛直播SDK的摄像头采集+动态文字水印为例,谈谈如何实现的,简单来说,这块分两步,第一步,如何从文字里面获取到rgb数据,第二步,如何吧rgb数据叠加到摄像头上? 废话不多说,先上图,选中采集摄像头和摄像头添加文字水印,如果需要默认打开动态文字水印,直接打开即可,如需关闭,随时可以关闭或二次打开:本文以启动个轻量级RTSP服务为例,效果如下,可以清楚的看到右侧播放端 e) { if (btn_text_osd.Text.Equals("打开动态文字水印")) { if (! camera.capabilities_[cur_sel_camera_resolutions_index_]; camera_layer_c0.device_unique_id_utf8_
一、三大核心水印能力,覆盖全场景风险安得基于企业终端管控实战需求,打造屏幕水印、打印水印、文档水印三位一体防护体系,全面覆盖数据使用、流转、输出全流程,精准封堵各类终端泄密漏洞。1. 屏幕水印:严防拍照泄密,让偷拍无处遁形针对员工手机拍摄终端屏幕、截取敏感数据外泄的高频风险,安得卫士屏幕水印会自动强制加载,水印内容包含计算机名、IP&MAC、部门、用户姓名、当前日期等唯一身份信息,支持自定义位置 核心作用:以显性水印形成强力震慑,一旦发生偷拍泄密,可通过水印快速锁定责任人,真正实现 “拍照即留痕”。2. 文档水印:跟随文件流转,实现全生命周期防护区别于屏幕与打印水印,安得卫士文档水印直接嵌入文件内部,在复制、转发、存储等流转环节中永久保留,不随打开环境变化而消失。 与TDLP外发拦截联动:当含有水印的敏感文件被违规外发(邮件、网盘、IM等),TDLP可识别水印中的身份信息,联动触发阻断、审计或溯源,精准锁定责任人。水印管控已成为终端安全标配能力。
[实时水印]支持动态水印设置,完美支持文字水印、实时时间水印和图片水印; [透明度]可以设置透明度处理(设置遮盖); 对应Demo: 测试程序:SmartPublisherDemo.exe; ]Windows平台支持文字水印、png水印、实时遮挡,Android平台支持文字水印、png水印; [RTMP推送模式]支持RTMP推送 live|record模式设置(需服务器支持); [镜像] H.265流录制,支持PCMA/PCMU转AAC后录制,支持设置只录制音频或视频),可参见"8. 8. Windows/Android/iOS RTMP/RTSP多路流媒体转RTMP推送SDK 如不单独说明,系Windows、Android、iOS全平台支持。 SEI扩展信息(H.264); [自定义数据]持发送自定义用户数据(如自定义utf8字符串); [二进制数据]支持发送二进制数据; [播放端解析]RTSP/RTMP直播播放端SDK支持utf8文本
轻量级RTSP服务还是RTMP? 文字、图片水印需要而且建议支持,比如实时时间、学校或公司logo等。 //水印效果选择++++++++++ watermarkSelctor = (Spinner) findViewById(R.id.watermarkSelctor); watermarkSelctor.setEnabled (false); final String[] watermarks = new String[]{"图片水印", "全部水印", "文字水印", "不加水印"}; ArrayAdapter > parent) { } });8.
今天给大家带来《数字图像处理》第 8 章的全面解析 —— 图像压缩和水印。 8.12 数字图像水印 数字图像水印是在图像中嵌入不可见的标识信息(如版权、溯源码),要求: 不可感知性:嵌入水印后图像无视觉失真; 鲁棒性:抗常见攻击(压缩、滤波、裁剪、噪声); 安全性:水印难以篡改 数字水印: 空域水印简单但鲁棒性差,变换域(DWT/DCT)水印鲁棒性强; 关键指标:不可感知性(PSNR)、鲁棒性(抗攻击能力)、安全性。 、抗 AI 篡改的鲁棒水印。 改进 DWT 域水印算法,加入盲提取(无需原始图像)功能。 综合题: 设计一个图像压缩 + 水印的完整系统:对图像进行小波压缩,在压缩域嵌入水印,解压后能正确提取水印。
收到的需求是在一个图上匹配到水印 然后将原来的水印换成一个新水印 先要安装一个库 库文件代码如下: # coding=utf-8 import cv2 import numpy as np # 膨胀算法 [0, 0, 1, 0, 0], [0, 0, 1, 0, 0]], dtype=np.uint8) :param img: 待去除水印图片位图 :param watermark_template_gray_img: 水印模板的灰度图片位图,用于确定水印位置 mask = np.zeros(img.shape, np.uint8) # watermark_template_mask_img = cv2.cvtColor(watermark_template_gray_img :param filename: 待去除水印图片文件名称 :param output_filename: 去除水印图片后的输出文件名称 :return:
我们在此前的文章中介绍过关于EasyNVR在去年就已经实现了视频添加水印的功能。开启水印后,用户可自主上传水印图片,水印支持移动、修改图片大小等操作。感兴趣的用户可以翻阅我们往期的文章进行了解。 有用户提出需求,需要在平台分发的RTSP视频流中添加水印,并将添加水印后的RTSP流接入大华的NVR进行播放。因为用户使用的是定制版本,所以针对该用户的需求,我们在该定制版本上也增加了视频水印功能。 添加水印后的效果,如图所示:将分发的RTSP流地址放入大华的NVR里:如图所示,视频在大华NVR中显示在线,并可以正常播放。 作为性能稳定、功能丰富的视频监控平台,EasyNVR视频边缘计算网关可支持市面上大部分的RTSP/Onvif协议设备,并拥有视频转码、直播与分发、云端录像与回放等多种功能,基于这些强大的视频能力,EasyNVR
各式各样的图片处理小工具,例如一键去水印、一键抠图、图片加水印等工具确实帮助我们大大提高了效率,化繁为简。 就拿AI去水印来说,可以任意消除图片中多余的元素,无论是水印、文字、标志、物体、路人,杂物等,那么AI如何去水印,能达到什么样的效果呢? 接下来,就让我们看看如何在线去除图片水印。 图片在线去水印 在下面这张照片中,如果可以一键去除图片中的文字,是不是很解放双手?!若是想要在线去除这些水印,简单几步轻松完成!具体操作步骤如下: ① 找到水印云,点击在线体验,进入功能页。 ③ 使用涂抹笔,调整画笔大小将您想要去除的文字水印,可一次涂抹所有水印,也可分多次涂抹去除水印,点击开始去水印。 ④ 等待数秒,水印将被自动去除。 如果你也有去水印的需求,不妨使用一下水印云,帮您轻松解决去水印的烦恼,还能提高您的生产力。
y+i)的位置, 奇数行,奇数列 */ rect_tmp_v += 2; } } } 代码 /* * author: francis.fan@rock-chip.com * date: 2019-8-
# -*- coding: utf-8 -*- """ A demo python code that .. 1) Connects to an IP cam with RTSP 2) Draws RTP lc=12 # bytecounter bc=12*8 # bitcounter version=bt[0:2].uint # version p=bt[3 ] # P x=bt[4] # X cc=bt[4:8].uint # CC m=bt[9] # M pt=bt[9:16].uint # PT "first three bits together :",bt[bc:bc+3] if (typ==7 or typ==8): # this means we .com/ https://github.com/odie5533/Python-RTSP
自媒体创作过程中经常遇到图片素材需要做水印处理。因为贪图网站的方便,所以我就一直没有下载PS软件,一直都在使用在线去水印网站。 「 水印云」这是一个多人使用的在线图片处理工具,通过AI技术实现一键去水印,不管你是新手还是老手,完全不需要任何技术,直接上手就能用,超简单,快速。 图片在线去水印下面给大家展示一下去水印效果,我直接在网上随便找了一张图片,直接导入,将水印内容轻松涂抹一下,能够智能识别出选择区域内的水印,即使是图片背景杂乱,也可以准确识别水印并抠除,做到干净无残留;
ImageEnhance.Brightness(alpha).enhance(opacity) im.putalpha(alpha) return im def get_mark_img(text, color="#8B8B1B return mark def create_watermark_pdf(text, filename="watermark.pdf", page_size=(595, 842), color="#8B8B1B pagesize c = int(math.sqrt(w**2+h**2)) mark.rotate(angle) mark.setFont('msyhbd', 20) mark.setFillColor("#8B8B1B import PyPDF2 import math def create_text_watermark_pdf(text, watermark, pagesize=(595, 842), color="#8B8B1B : IndirectObject(8, 0, 2016175275936)}, '/ProcSet': ['/PDF', '/Text', '/ImageB', '/ImageC', '/ImageI'
技术背景Android平台推流模块,添加文字或png水印,不是一件稀奇的事儿,常规的做法也非常多,本文,我们主要是以大牛直播SDK水印迭代,谈谈音视频行业的精进和工匠精神。 第一代:不可动态改变的文字、png水印2015年,我们在做Android平台RTMP推送模块和轻量级RTSP服务模块的时候,有这样的场景诉求,应急指挥、智慧巡检或安防类,都有文字或png水印的技术诉求, 、作业内容等),为此,我们想到的是,这一版,我们需要实现动态水印能力。 ", getFontSize(video_w) + 8, Color.argb(255, 200, 250, 0), false, 0, false ", getFontSize(video_w) + 8, Color.argb(255, 200, 250, 0), false, 0, false
交互流程 C表示rtsp客户端, S表示rtsp服务端。 Cache-Control: no-cache Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=6B8B4567 4)PLAY 客户端发送播放请求 Option not supported | extension-code extension-code = 3DIGIT Reason-Phrase = *<TEXT, excluding CR, LF 8、 MaxPacketSize:integer;1400 a=Preroll:integer;1000 a=Width:integer;320 //影片的宽度 a=OpaqueData:buffer;"AzcAAB8ELyARAbd0AAST4AAEk +AFIAAAAbDzAAABtQ7gQMDPAAABAAAAASAAhED6KFAg8KIfBgEC" a=StreamName:string;"Video Track" 9、总结 在RTSP交互过程中