RTSP播放器网页web无插件直播流媒体音视频播放器EasyPlayer-RTSP实现视频渲染OSD叠加效果 *** 作方法

RTSP播放器网页web无插件直播流媒体音视频播放器EasyPlayer-RTSP实现视频渲染OSD叠加效果 *** 作方法,第1张

概述EasyPlayer-RTSP播放器是一套RTSP专用的播放器,包括有:Windows(支持IE插件,npapi插件)、Android、iOS三个平台,区别于市面上大部分的通用播放器,EasyPlayer-RTSP更加精炼、更加专注,具备非常低的延时,非常高RTSP协议兼容性,编码数据解析等方面,都有非常大的优势。 EasyPlayer RTSP Windows播放器新增OSD字幕叠加接口方法,这

EasyPlayer-RTSP播放器是一套RTSP专用的播放器,包括有:windows(支持IE插件,npAPI插件)、AndroID、iOS三个平台,区别于市面上大部分的通用播放器,EasyPlayer-RTSP更加精炼、更加专注,具备非常低的延时,非常高RTSP协议兼容性,编码数据解析等方面,都有非常大的优势。

EasyPlayer RTSP windows播放器新增OSD字幕叠加接口方法,这个接口和码率信息显示接口方法类似,都是调用FFRender库的接口实现的多OSD叠加。

多OSD叠加调用和注意事项

OSD叠加方法声明如下:

liB_EASYPLAYER_API int EasyPlayer_ShowOSD(int channelID,int show,EASY_PALYER_OSD osd);

其中:
channelID: 播放器通道ID,标识当前的播放器实例;
show:标识是否显示OSD叠加,0=不现实 1=显示;
osd:显示信息填充结构,定义如下:

typedef struct tagEASY_PALYER_OSD { char stOSD[1024]; //OSD字幕信息 DWORD Alpha; //透明通到0-255 0=透明 255=完全不透明DWORD color; //RGB(0xf9,0xf9,0xf9) DWORD shadowcolor; //OSD背景颜色RGB(0x4d,0x4d,0x4d) 全为0背景透明 RECT rect; //OSD基于图像右上角显示区域 int size; //OSD字体的大小 }EASY_PALYER_OSD;

注意:osd字幕叠加通过”\r\n“结束符进行换行,一行的长度不能超过128个字节,总的OSD叠加不能超过1024个字节。其中OSD大小设置只有D3D渲染模式才能生效;
我们已经对OSD叠加的接口有所了解,下面我们来写一段调用代码来看看效果:

//OSD Example		EASY_PALYER_OSD osd;		osd.Alpha = 255;		osd.size = 35;		osd.color = RGB(255,255);		osd.rect.left = 10;		osd.rect.right = 5000;		osd.rect.top = 100;		osd.rect.bottom = 800;		osd.shadowcolor = RGB(0,0);		char* ss =  "这是EasyPlayer-RTSP-Win播放器 \r\n的字幕叠加接口的效果!!!\r\n以\"\r\n\"为换行结束符号\r\n注意:每行的长度不能超过128个字节\r\n总的OSD长度不能超过1024个字节";		strcpy(osd.stOSD,ss);		EasyPlayer_ShowOSD(m_ChannelID,1,osd);

如上代码段所示,主要对OSD_PLAYER_OSD结构的参数进行设置,就能得到我们想要的效果,如下图所示:
(1)GDI显示

(2)D3D显示

对比两种方式的OSD叠加还是有所区别的,D3D的因为有硬件加速,我们可以看到OSD叠加更加清晰而且效率也高,OSD则是相对粗糙,而且在原FFRender库中GDI接口是不支持换行的,所以,我们需要做一些技术处理,如下段代码所示:

std::string sOSD = pThread->osd.stOSD;			while (!sOSD.empty())			{				char* subOSD = (char*)sOSD.c_str();				int nOSDLen = sOSD.length();				int sublen = 0;				int nEofPos = sOSD.find("\r\n");				if (nEofPos>127)				{					subOSD[128] = 0;					sublen = 128;				}				if (pThread->renderFormat == GDI_FORMAT_RGB24)				{					copyRect(&osd[osdlines].rect,&pThread->osd.rect);					osd[osdlines].rect.top = pThread->osd.rect.top+40*osdlines;					osd[osdlines].rect.bottom = pThread->osd.rect.bottom+40*osdlines;					if (nEofPos>=0)					{						subOSD[nEofPos] = 0;						sublen = nEofPos;					}				}				else				{					copyRect(&osd[osdlines].rect,&pThread->osd.rect);					osd[osdlines].rect.top = pThread->osd.rect.top+pThread->osd.size*osdlines;					osd[osdlines].rect.bottom = pThread->osd.rect.bottom+pThread->osd.size*osdlines;					if (nEofPos>=0)					{						subOSD[nEofPos] = 0;						sublen = nEofPos;					}				}					MBytetoWChar(subOSD,osd[osdlines].string,sizeof(osd[osdlines].string)/sizeof(osd[osdlines].string[0]));				osd[osdlines].color = pThread->osd.color;				osd[osdlines].shadowcolor = pThread->osd.shadowcolor;				osd[osdlines].Alpha = pThread->osd.Alpha;				osdlines++;				if (nEofPos>=0)				{					sOSD = subOSD+nEofPos+2;				}				else				{					sOSD = "";				}			}

简单描述下上段代码,即:通过查找“\r\n”结束符作为一条OSD信息,而一条OSD又不能超过128个字节进行换行,换行行高则通过size来确定,因为GDI不支持size大小的设定,所以我们给了个固定值40,当然为了紧凑点或者行间距大点还可以调整。

此外,目前版本的EasyPalyer RTSP windows播放器只支持软解码和NvIDia硬解码的OSD叠加显示,Intel硬解码目前还不支持。

总结

以上是内存溢出为你收集整理的RTSP播放器网页web无插件直播流媒体音视频播放器EasyPlayer-RTSP实现视频渲染OSD叠加效果 *** 作方法全部内容,希望文章能够帮你解决RTSP播放器网页web无插件直播流媒体音视频播放器EasyPlayer-RTSP实现视频渲染OSD叠加效果 *** 作方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1029074.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存