PHZ76 / DesktopSharing

桌面共享, 支持RTSP转发, RTSP推流, RTMP推流。
MIT License
721 stars 282 forks source link

如何实时添加隐藏水印功能 #8

Closed eaglesharkmayonnaise closed 4 years ago

eaglesharkmayonnaise commented 5 years ago

比如说正在分享中的屏幕,我需要在左上角或者屏幕任意位置添加文字或几何图形、图片 但是不能在对屏幕出现此类水印。 查看了一些资料 有以下做法:

  1. 解析格式自己在内存中添加 , 这个就比较难了
  2. ffmpeg添加, 肯定延时较大而且耗资源

阅读了源码 发现没有相关功能,有任何建议吗

eaglesharkmayonnaise commented 5 years ago

这个好像可以 https://blog.csdn.net/bixinwei22/article/details/94454258

如何在源码这个地方添加这个功能: https://github.com/PHZ76/DesktopSharing/blob/9d306a47dcefab708b01a3e57c0851c1338dcdcc/DesktopSharing/DesktopSharing.cpp#L275

eaglesharkmayonnaise commented 5 years ago

尝试了下这是个低版本 编译不过 对ffmpeg不熟 改起来无法用。。。

eaglesharkmayonnaise commented 5 years ago

研究了俩天无果 大佬有空指点下 QAQ 我看大佬这里H264Encoder::encodeVideo 似乎是截图然后转发过去的,那么是不是我只需要在encodeVideo 这个函数解析图片再添加水印就可以了

eaglesharkmayonnaise commented 5 years ago

我在这里主要添加了以下代码

init_filters(_vCodecCtx , "scale = 78:24 , transpose = cclock");
    auto filtFrame = test(*_vPkt , _vCodecCtx , _yuvFrame);

完整代码:code


按我的设想每一帧利用freetype的filters_descr去添加水印 然后把我修改后的过滤帧给avcodec_send_frame 使用 就好了 不知道对不对。。。