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
技术背景我们在对接外部开发者的时候,遇到这样的技术诉求,客户用于地下管道检测场景,需要把摄像头的数据拉取过来,然后叠加上实时位置、施工单位、施工人员等信息,然后对外输出新的RTSP流,并本地录制一份带动态水印叠加后的数据 技术实现废话不多说,下图先通过Android平台拉取RTSP流,然后把解码后的yuv或rgb数据回上来,以图层的形式投递到推送端,需要加水印的话,添加文字水印或图片水印(系动态水印)图层,底层做动态叠加后二次编码打包 ,通过启动轻量级RTSP服务,发布RTSP流,生成二次处理后的RTSP新的拉流url,如果需要推送至RTMP,只要调用推送RTMP的接口即可,本地录制,可以设置录制目录等信息,保存二次编码后的MP4文件到本地 ()) {stopPush();btnRTMPPusher.setText("推送RTMP");return;}Log.i(TAG, "onClick start push rtmp..") ;InitAndSetConfig();String rtmp_pusher_url = "rtmp://192.168.0.108:1935/hls/stream1";if (!
方法一 直接转flv吧 方法二 使用flash 示例代码 如果直接前端放rtmp直播流, 则需要有flash, 而Chrome已经不再支持flash了, 所以得借助flash插件 1659969197107 配置播放器 可以通过navigator.plugins来看flash插件有没有引入成功 image.png 然后引入组件, 配置直播流即可 <template> <div class="container false, // aspectRatio: '16:9', language: 'zh-CN', sources: [{ type: '<em>rtmp</em> /mp4', src: '<em>rtmp</em>://127.0.0.1/live/test', }], techOrder: ['flash', 'html5']
前言:本文探讨的是利用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); // 在字下面 //设置水印图片的坐标
nginx转发rtmp流 场景描述:服务器1使用nginx-rtmp-module搭建了基于nginx的rtmp推流平台,用户推rtmp流只能推到服务器2,然后转发到服务器1。 nginx默认只能转发http,转发rtmp需要另外编译转发tcp的模块。要求nginx版本大于1.9。
现在很多人都在使用小红书app,但大家肯定都会有同一个问题,图片怎么保存,重点是怎么保存图片无水印。看到好看的图片想保存下来,可是却不喜欢看到有水印。 下载完图片它会自动保存一个文件夹,我们打开文件夹可以看到里面的图片都没有水印哦。 如果有多个图片批量下载,看第一个步骤,你会发现链接一行一个自动粘贴到工具里面如下图所示:采集完点立即下载 还可以批量下载小红书视频哦,打开文件夹,查看视频,都是高清原视频,且无水印,还在迷茫的你,不妨试试小编这个方法吧
对应RTMP推流,业界有很多开源方案。如使用FFMPEG推流,librtmp(rtmp-dump),gstream推流。由于ffmpeg和gstreamer比较庞大,仅仅用来推流,有大炮打蚊子之嫌。 推流接口。 下面是一个h264裸文件推送RTMP过程。 并链接librtmp.so生成可执行文件h2642rtmp. 运行可执行程序推流 .
前言 搭建基于rtmp协议的推流服务器。 nginx-1.12.2 nginx 3、备份文件 cp -r /etc/nginx /etc/nginx_bak mv /usr/sbin/nginx /usr/sbin/nginx_bak 下载rtmp 模块 仓库地址:nginx-rtmp-module cd /usr/lib64/nginx/modules/ git clone https://github.com/arut/nginx-rtmp-module.git NGINX_HOME=/usr/local/nginx export PATH=$PATH:$NGINX_HOME/sbin 重新编译环境变量 source /etc/profile 配置Nginx的rtmp 推流请求路径,文件存放路径 hls_fragment 5s; #每个TS文件包含5秒的视频内容 } } } 启动nginx cd /usr/local/nginx
要做一个android端的流媒体播放器,获取服务器推的rtmp流。 vitamio库https://github.com/yixia/VitamioBundle,demo里面列举了很多情况,我自己新建了一个项目,导入module,选择用videoview控件,播放网络上rtmp 经过前辈指点方向,我网上找了rtmp视频的测试工具,简直了,原因竟然是!。。。后台给我的地址格式不正确。 听说rtmp协议有自己的解码规范,所以地址也是有规范的。 我之所以是没有往地址方面想,是因为我们俩手机安装了easyrtmp和easyplayer进行测试,一个推流一个拉流,没毛病,我就以为地址是正确的。。操心阿。 /objs/sb_rtmp_load -c 1 -r rtmp://127.0.0.1:1935/live/livestream 上面的地址换成自己要测试的地址就好。
技术背景 我们在做Windows平台流数据转发的时候,除了常规的RTSP转RTMP推送外,还有个场景就是,好多开发者希望拉取的RTSP流,做二次视频分析,或者加动态水印等,处理后的数据,再二次编码推送到 RTMP服务或轻量级RTSP服务。 技术实现 本文就以Windows平台拉取RTSP流,回调yuv数据到上层,处理后的数据,二次投递到RTMP服务和轻量级RTSP服务,然后叠加动态水印,并实现处理后的数据实时录像功能,废话不多说,先上图: 上图拉取了RTSP流,然后左侧窗体显示,添加动态水印后,再在右侧预览,并把数据重新投递到推送端,考虑到编码性能,我们可选硬编码。 (如增加动态水印)或视频分析(视觉算法处理)后,再录像、转推至RTMP或轻量级RTSP服务流程,经过二次处理后的流数据,配合我们的SmartPlayer,依然可以整体毫秒级的延迟体验
服务器地址 rtmp = r'rtmp://txy.live-send.acg.tv/live-txy/' # 读取视频并获取属性 cap = cv2.VideoCapture(0) size = (int RTMP是什么? RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。 该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。 RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。 RTMP与HTTP一样,都属于TCP/IP四层模型的应用层。 树莓派是什么?
clone https://github.com/arut/nginx-rtmp-module.git 解压nginx,将nginx-rtmp-module放到nginx里面 然后configure /nginx-rtmp-module --with-http_ssl_module http2协议可添加 --with-http_stub_status_module --with-http_v2_module 然后make && make install make的时候可能会报错 如果错误如下,则将文件objs/Makefile里面的-Werror删除即可 html5播放rtmp <! ://127.0.0.1:1935/livetv/1234" type="<em>rtmp</em>/flv"> //src里面填的是rtmp的地址rtmp://192.168.0.221/live 源 1.香港财经 香港财经,rtmp://202.69.69.180:443/webcast/bshdlive-pc(推荐,信号好不卡顿) 2.湖南卫视(推荐) 湖南卫视,rtmp://58.200.131.2
在前面一节基于FFmpeg进行RTMP推流(一)我们写了最简单的一版推流代码。但细心调试过的兄弟会发现当我们把文件换成mp4后,发现上面的代码在写入文件头时报错。也就是说上一版的代码是有bug的。 AVStream *in_stream = ictx->streams[i]; //为输出上下文添加音视频流(初始化一个音视频流容器) AVStream 说明我们推流的速度有问题。快了或慢了都会有问题。我们大概可以定位到,我们在计算延时的时候出现了错误。 test.mp4放到bin目录下即可 const char *inUrl = "hs.mp4"; //输出的地址 const char *outUrl = "rtmp://192.166.11.13 AVStream *in_stream = ictx->streams[i]; //为输出上下文添加音视频流(初始化一个音视频流容器) AVStream
Message Stream Id: 消息流ID,标识消息所使用的流,用大字节序表示。 此字段根据块流ID的不同,长度可能为1,2或3字节。在实现协议时,此字段应该使用可以容纳ID的最小长度。此协议支持最多65597个流,ID从3到65599。0,1,2这三个为保留ID。 块流ID为2时保留作为低级协议的控制消息和命令消息。以下是基本头的每个占位介绍: 3.3分块例子 四、交互过程 4.1推流 ! 4.2拉流 五、实践观察 5.1rtmp推拉流环境搭建 参考视频协议学习--HLS的环境部署 5.2rtmp推拉流抓包 5.2.1主要的推流包介绍 5.2.2主要的拉流包介绍 拉流的其他流程与推流类似 七、参考资料 专题报告:RTMP协议 揭开RTMP播放流畅的神秘面纱 Adobe官方公布的RTMP规范 RTMP Spec中文版 RTMP协议笔记 RTMP服务端实现
在本文之前,我们发布了Unity环境下的RTMP推流(Windows平台+Android平台)和RTMP|RTSP拉流(Windows平台+Android平台+iOS平台)低延迟的解决方案,今天做个整体汇总 Unity环境下RTMP推流 Unity环境下,不管是camera还是窗体数据也好,主要是高效率的拿到原始数据,采集端可用的数据格式是RGB的,拿到之后,通过高效率的数据传递,发给封装后的原生SDK,完成数据编码和 RTMP推送。 相关博客: Windows平台Unity3d下如何同时播放多路RTSP或RTMP流 https://cloud.tencent.com/developer/article/1800633 如何在Unity3d 平台下低延迟播放RTMP或RTSP流 https://cloud.tencent.com/developer/article/1592731
《FFmpeg开发实战:从零基础到短视频上线》一书的“10.2.2 FFmpeg向网络推流”介绍了轻量级流媒体服务器MediaMTX,虽然MediaMTX使用很简单,可是不能满足复杂的业务需求,故而实际应用中需要引入专业的流媒体服务器 nginx-rtmp是开源WEB服务器Nginx可增强的第三方rtmp模块,该模块封装了rtmp服务器,可以提供简单的rtmp流媒体服务器功能。 Nginx默认没开启rtmp模块,需要在编译nginx时添加rtmp模块,还要修改配置文件才能开启rtmp服务。 /nginx四、检查nginx-rtmp是否正常运行下面通过ffmpeg把视频文件向rtmp服务推流,也就是通过下面命令向rtmp://127.0.0.1/live/test推流视频文件。 链接的直播视频,说明nginx-rtmp服务正确实现了rtmp协议的流媒体传输功能。
我们知道多数监控摄像头都是支持RTMP协议的,当然公安部的摄像头是支持GB28181协议的,这个我们在本文不做过多赘述,我们来探讨一下网页播放RTMP视频流的播放器。 ? ? 网页可以播放RTMP视频流吗?当然是可以的,但是对于PC端来说,网页播放RTMP流媒体视频流将会承受更多的服务器压力,满足网页播放RTMP视频流有哪些要求,下文我们一起来看一下。 1.便捷。 本文已经为大家介绍完毕啦,结论就是网页是能够播放RTMP视频流的,如果想体验网页播放RTMP视频流的流媒体服务器或者播放器,可以继续关注本栏目。
好多开发者使用场景,除了实现基础的低延迟RTSP、RTMP播放外,还需要实现RTSP、RTMP流数据的本地录像功能。 本文以大牛直播SDK的Windows平台播放模块为例,介绍下如何实现RTSP、RTMP流录像。 功能设计 [拉流]支持拉取RTSP流录像; [拉流]支持拉取RTMP流录像; [逻辑分离]和播放、转发功能完全分离,支持随时录像; [参数设置]支持设置单个录像文件大小、录像路径等,并支持纯音频、纯视频 , 点播流才有*/ NT_SP_E_EVENT_ID_PULLSTREAM_REACH_EOS = NT_SP_E_EVENT_ID_BASE | 0xa3, /*拉流结束, 直播流没有这个事件 若能从视频源获取视频时长的话,则上报, param1表示视频时长,单位是毫秒(ms)*/}设置拉流的URLNT_SP_SetURL:支持rtsp/rtmp/本地FLV文件(全路径)。
为了解决上述问题,利用rtmp302特性,制定了一个改进方案。 2、RTMP 302重定向具体方案 为了解决推流过程中,网络异常问题,采用了RTMP 302 重定向的方案,具体实现逻辑如下图所示: 步骤一,推流过程中,rtmp server端支持持续弱网检测,支持域名 上述解决方案,在推流过程中,通过RTMP 302的方式获取到服务器慢速信息,根据客户端以及服务器端慢速信息,来进行断流重推,快速恢复直播,提高推流成功率。 对上述方案进行扩展,在开始推流时,利用302进行服务端的负载均衡。服务器端在刚收到客户端数据时,给客户端发送RTMP 302信息,来进行高负载302调度,提高推流的成功率。 3、结论 综上所述: 1、在推流过程中,给客户端发送RTMP 302控制消息,客户端使用服务器提供的重定向地址,进行断流重推,可以快速恢复推流异常,提升上行推流质量; 2、在推流开始时,服务器端可以综合后台机器负载以及带宽资源情况