API

插件通过 API 调用播放器相关功能,比如播放、停止等。

插件中有以下对象:

  • plugin 插件对象
  • palyer 播放器对象
  • canvas 画布对象

插件对象

由 newPlugin 创建的对象,需要继承于 StellarPlayer.IStellarPlayerPlugin

doModal

显示对话框窗口

StellarPlayer.IStellarPlayerPlugin.doModal(self, pageId:str, width:int, height:int, title:str, controls:list)
1

参数

参数类型说明
pageIdstr对话框名称,用于区分各对话框,必填
widthint对话框宽度
heightint对话框高度
titlestr对话框标题文字
controlsobj或array对话框控件布局对象,参见[layout]

用户调用此方法显示一个对话框窗口,如果指定名称的窗口已存在,则会唤起之前的窗口。

updateLayout

更新窗口内容

有时插件需要更新窗口内容,比如搜索结果,此时可以用 updateLayout 更新指定窗口内容

StellarPlayer.IStellarPlayerPlugin.updateLayout(self, pageId:str, controls:list)
1

参数

参数类型说明
pageIdstr对话框名称,用于区分各对话框,必填
controlsobj 或 array对话框控件布局对象,参见[layout]

用户调用此方法更新指定对话框窗口内容。

播放器对象

插件中大多数 API 都是播放器对象提供的,播放器对象为插件对象的一个属性 player,所以在插件中调用播放器对象的方法时需要像这样:

self.player.play(url)
1

下面分别说明 player 对象的各个方法:

doModal

显示一个对话框,此方法与 plugin 中的 doModal 参数一致,plugin.doModal 是 player.doModal 的封装。

player.doModal(self, pageId:str, width:int, height:int, title:str, controls:list)
1

参数

参数类型说明
pageIdstr对话框名称,用于区分各对话框,必填
widthint对话框宽度
heightint对话框高度
titlestr对话框标题文字
controlsobj或array对话框控件布局对象,参见[layout]

用户调用此方法显示一个对话框窗口,如果指定名称的窗口已存在,则会唤起之前的窗口。

createTab

显示一个 Tab 页,Tab 页显示在 Tab 窗口中,pageId 为其名称,如果 pageId 已经存在,则切换到该 tab 页。

player.createTab(self, pageId:str, title:str, controls:list)
1

参数

参数类型说明
pageIdstrTab 名称,用于区分各页面,必填
titlestrTab 标题文字
controlsobj或arrayTab 控件布局对象,参见[layout]

对话框窗口和 tab 可以互相转换:

  • 通过将插件对话框窗口拖放到 Tab 窗口上,可以将其作为 Tab 页面。
  • 将 Tab 页面拖动离开 Tab 窗口,可以创建独立插件对话框窗口。

isModalExist

窗口或 Tab 页是否存在

player.isModalExist(self,pageId)
1
参数类型说明
pageIdstrTab 名称,用于区分各对话框,必填

返回值: True 窗口已存在 False 窗口不存在

updateLayout

更新对话框内容 有时插件需要更新窗口内容,比如搜索结果,此时可以用 updateLayout 更新指定窗口内容

player.updateLayout(self, pageId:str, controls:list)
1

参数

参数类型说明
pageIdstr对话框名称,用于区分各对话框,必填
controlsobj 或 array对话框控件布局对象,参见[layout]

用户调用此方法更新指定对话框窗口内容。

closeModal

关闭指定窗口或 Tab 页

player.closeModal(self, pageId:str, ok:bool)
1

参数

参数类型说明
pageIdstrTab 名称,用于区分各对话框,必填
okbool返回值

用户调用此方法关闭指定对话框或 Tab 页,关闭时可以指定 Bool 返回值,此值会作为 doModal 的返回值返回。

getControlValue

获取控件值

player.getControlValue(self, pageId:str,controlName:str)
1
参数类型说明
pageIdstrTab 名称,用于区分各对话框,必填
controlNamestr待获取的控件名称,必填

返回值

获取到的控件值,如果获取失败则返回 None

updateControlValue

更新控件值

player.updateControlValue(self, pageId:str,controlName:str,value)
1
参数类型说明
pageIdstrTab 名称,用于区分各对话框,必填
controlNamestr待获取的控件名称,必填
valuestr待设置的控件值,必填

getListItemControlValue

获取 list、grid 子元素值

player.getListItemControlValue(self, pageId:str,listName:str,itemIndex,itemName:str)
1

参数

参数类型说明
pageIdstrTab 名称,用于区分各对话框,必填
listNamestr待获取的 list 或 grid 控件名称,必填
itemIndexint待获取的子元素 index,必填
itemNamestr待获取的子元素 name,必填

返回值

获取到的控件值,如果获取失败则返回 None

showControl

显示隐藏控件

player.showControl(self, pageId:str,controlName:str,visible:bool)
1

参数

参数类型说明
pageIdstrTab 名称,用于区分各对话框,必填
controlNamestr待设置的控件名称,必填
visiblebool显示或隐藏

setControlSize

设置控件大小

player.setControlSize(self, pageId:str,controlName:str,width=None,height=None)
1

参数

参数类型说明
pageIdstrTab 名称,用于区分各对话框,必填
controlNamestr待设置的控件名称,必填
widthfloat,int,None宽度
heightfloat,int,None高度

说明

宽度值和高度值,为None时,不改变宽度或高度 小于0 自动计算剩余宽度或高度 大于1 为绝对大小 小于1 为权重大小 等于1 等于整数1时为绝对大小 浮点1.0时为权重大小

addControl

添加控件

player.addControl(self, pageId:str,nodeName:str,controls,previous='',weight=-1)
1

参数

参数类型说明
pageIdstrTab 名称,用于区分各对话框,必填
nodeNamestr在该节点上添加控件,该节点必须是一个容器节点(group,list,grid),根节点名称为root
controlsobj 或 array待添加的控件
previousstr添加的位置,在previous节点后新增节点,为空时,加在末尾
weightfloat,int,None参考 setControlSize 的控件大小

removeControl

移除控件

player.removeControl(self, pageId:str,controlName:str)
1

参数

参数类型说明
pageIdstrTab 名称,用于区分各对话框,必填
controlNamestr待移除的控件名称

loadingAnimation

显示或隐藏一个 loading 动画

player.loadingAnimation(self, pageId, stop=False, style='default')
1

参数

参数类型说明
pageIdstrTab 名称,用于区分各对话框,必填
stopbool隐藏或显示动画
stylestr动画样式,目前只有默认值 defalut

toast

显示一个文字提示,显示 3 秒后自动消失

player.toast(self, pageId, message)
1

参数

参数类型说明
pageIdstrTab 名称,用于区分各对话框,必填
messagestr文字提示

callWebbrowser

弹出系统浏览器

player.callWebbrowser(self, url)
1

参数

参数类型说明
pageIdstrTab 名称,用于区分各对话框,必填
urlstr待打开的 url 地址

showText

在播放器左上角显示一个文字提示

player.showText(self, message)
1

参数

参数类型说明
pageIdstrTab 名称,用于区分各对话框,必填
messagestr文字提示

showNotify

显示右下角托盘弹出提示

player.showNotify(self, caption, message, timeout=5, quite=True)
1

参数

参数类型说明
captionstr提示标题,必填
messagestr提示文字信息
timeoutint超时时间,自动隐藏,现在默认为 windows 自动
quitebool是否有提示音

setCaption

设置播放器标题文字

player.setCaption(self, text)
1

参数

参数类型说明
textstr待设置的标题文字

play

播放一个视频

player.play(self,url,caption=None,headers={})
1

参数

参数类型说明
urlstr待播放的视频地址
captionstr带设置的播放器标题
headersdict播放 http url 时,附带的 http 请求头

playMultiUrls

播放一个 url,可以传多条线路地址 播放器会依次尝试,直到打开成功

player.play(self,urls,caption=None)
1

参数

参数类型说明
urlsarray待播放的视频线路数组
captionstr带设置的播放器标题

其中 urls 数组中的元素结构为

字段类型说明
urlarray线路地址
headersobject地址对应的 http 请求头, 可以为空
self.player.playMultiUrls([ 
    {
        "url": "http://111.13.42.45/PLTV/88888888/224/3221226453/1.m3u8",
        "headers": {}
    },
    {
        "url": "http://39.136.18.76/cdnrrs.gz.chinamobile.com/PLTV/88888888/224/3221226046/1/index.m3u8?fmt=ts2hls"
    },
    {
        "url": "http://39.135.32.7:6610/000000001000/HD-4000k-1080P-cctv6/1.m3u8?IASHttpSessionId=OTT?zzhongd"
    },
    {
        "url": "http://39.135.138.58:18890/PLTV/88888888/224/3221225632/index.m3u8"
    },
    {
        "url": "http://117.148.179.160/PLTV/88888888/224/3221231724/index.m3u8"
    }
], "CCTV-6")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

pause

暂停、继续

player.pause(self, play)
1

参数

参数类型说明
playbool暂停或继续

stop

停止播放

player.stop(self)
1

prev

播放上一个

player.prev(self)
1

next

播放下一个

player.next(self)
1

getProgress

获取播放进度

player.getProgress(self)
1

返回值 当前播放进度,总时长

setProgress

设置当前播放进度

player.setProgress(self, pos)
1

参数

参数类型说明
posint待设置的播放进度

getSnapshot

获取当前视频的截图

player.getSnapshot(self, params)
1

参数

参数类型说明
params['width']int截图宽度
params['height']int截图高度

返回值 截图的 base64 数据

getThumbnail

获取视频缩略图

player.getThumbnail(self, params)
1

参数

参数类型说明
params['width']int截图宽度
params['ms']int截图位置,毫秒

返回值 缩略图的 base64 数据

getQRCodeImg

获取指定内容的二维码图片()

player.getThumbnail(self, params)
1

参数

参数类型说明
params['content']string要生成二维码的内容
params['bg']string背景色 #rrggbb 形式
params['fg']string前景色 #rrggbb 形式

返回值

二维码图片的 base64 数据

def show(self):
    img = self.player.getQRCodeImg({
        "content": "https://v2ex.com/-",
        "bg": "#ffffff",
        "fg": "#ff0000"
    })

    controls = [
        {
            'type':'image',
            'name':'img',
            'height': 300, 
            'width': 300, 
            'value': 'data:image/png;base64,' + img
        },
        {'type':'space'}
    ]
    self.doModal('main',500, 500,'测试', controls)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

addToPlaylist

添加 url 到播放列表

player.addToPlaylist(self, folder, items, autoPlayIndex=-1)
1

参数

参数类型说明
folderstr播放列表文件夹名称
itemsarray待添加的记录
autoPlayIndexint添加完成后自动播放的元素 index

待添加的记录形式如下

items = [
    {'name': 'test1', 'url': 'http://xxx1.m3u', headers: {'User-Agent': 'xxx'}},
    {'name': 'test2', 'url': 'http://xxx2.m3u', headers: {'User-Agent': 'xxx'}}
]
1
2
3
4

其中

  • name 为添加的记录名称;
  • url 为添加的记录 url;
  • headers 为 url 对应的 http 请求头;

getPlaylist

获取播放列表

player.getPlaylist(self)
1

返回值

播放列表数据,形如:

{
    "playingIndex": 0,
    "items": [
        {"name": "file1", "path": "http://test.com/1.m3u8", "index": 1},
        {"name": "file2", "path": "http://test.com/2.m3u8", "index": 2}
    ],
    "cateIndex": 0,
    "cates": ["cate1", "cate2"]
}
1
2
3
4
5
6
7
8
9

其中:

  • playingIndex 为当前正在播放项目的 index
  • items 为当前播放列表项目(不包含文件夹)
    • name 列表项目名称
    • path 列表项目地址
    • index 列表项目序号
  • cateIndex 当前分类序号
  • cates 所有分类

playPlaylist

播放当前播放列表中的指定项目

player.playPlaylist(self, index)
1

参数

参数类型说明
indexint待播放的项目序号

setPlaylistCate

切换播放列表类别

player.setPlaylistCate(self, index)
1

参数

参数类型说明
indexint待切换的播放列表类别序号

getPlayInfo

获取当前播放信息

player.getPlayInfo(self)
1

返回值

返回当前播放信息,当前正在播放或暂停状态时,返回值:

{
    status: 0,
    videoWidth: 1280,
    videoHeight: 720,
    viewWidth: 1920,
    viewHeight: 1050,
    url: "D:\\1.mp4"
}
1
2
3
4
5
6
7
8

当播放器处于停止状态时,返回值:

{
    status: 2,
    viewWidth: 1920,
    viewHeight: 1050
}
1
2
3
4
5
返回值类型说明
statusint播放状态,-1=无效;0=播放;1=暂停;2=停止
videoWidthint视频画面宽
videoHeightint视频画面高
viewWidthint视频区域宽
viewHeightint视频区域高
urlstring播放视频 url

addDanmu

以弹幕形式显示一行文字

player.addDanmu(self, message)
1

参数

参数类型说明
messagestr弹幕文字

batchAddDanmu

添加一批弹幕到当前正在播放的文件,只是临时添加

player.batchAddDanmu(self, messages)
1

参数

参数类型说明
messagesarray弹幕列表

messages 为数组形式的要添加的弹幕列表,每个元素的定义如下

{
    content: '弹幕内容',
    tm: 弹幕时间(毫秒)
}
1
2
3
4

示例代码:

self.player.batchAddDanmu([{
    "msg": f"hello {i}",
    "tp": 1000 * i
} for i in range(100)])
self.player.showDanmu(True)
1
2
3
4
5

其中 msg 为弹幕内容, tp 为弹幕时间(毫秒)

showDanmu

切换弹幕的显示、隐藏。

player.showDanmu(self, show)
1

参数

参数类型说明
showbool是否显示弹幕

clearDanmu

清除所有弹幕。

player.clearDanmu(self)
1

调用后清除所有弹幕,当有新弹幕加入时会重新显示。

dispatchResult

返回 dispatch 异步结果

player.dispatchResult(self, dispatchId, **kwarg)
1

参数

参数类型说明
dispatchIdintdispatch 请求的 id
kwargdict结果

此接口是播放器异步调用插件事件时,插件用来返回结果的接口,异步事件包括:

  • onUrlInput
  • onSearch

setShaderSelectorShaders

设置自定义着色器

player.setShaderSelectorShaders(self, shaders, stage)
1

参数

参数类型说明
shadersarray着色器文件数组,按文件顺序,依次执行每个着色器文件
stagestr着色器应用的渲染时机,prescale(缩放前)、scaled(缩放后)、interpolation(插帧)

setShaderSelectorEnable

设置自定义着色器是否启用

player.setShaderSelectorEnable(self, stage, enable, debug=False)
1

参数

参数类型说明
stagestr着色器应用的渲染时机,prescale(缩放前)、scaled(缩放后)、interpolation(插帧)
enablebool是否启用
debugbool是否调试

画布对象

画布对象提供了在视频画面上叠加自定义图案的功能。

newCanvas

创建一个画布对象

player.newCanvas(self, fps)
1

参数

参数类型说明
fpsint画布的刷新帧率

一个画布对应播放窗口上的一块显示区域,插件中可以创建多个 canvas 对象,相应的内容会依次绘制到视频画面上。

destroyCanvas

销毁一个画布对象

player.destroyCanvas(self, canvas:Canvas)
1

参数

参数类型说明
canvasCanvas待销毁的 Canvas 对象

drawBuffer

在画布上绘制内容

canvas.drawBuffer(self, imageBuffer:bytes, imageWidth, imageHeight, x, y, w, h)
1

参数

参数类型说明
imageBufferbytes绘制内容(RGBA)的字节数组
imageWidthint绘制内容的宽度
imageHeightint绘制内容的高度
xint绘制内容在视频画面的位置 x
yint绘制内容在视频画面的位置 y
wint绘制内容在视频画面的大小 w
hint绘制内容在视频画面的大小 h

注意此接口是 canvas 对象的方法,绘制的内容会被拉伸到 w x h 大小

drawBuffers

在画布上绘制多个内容

canvas.drawBuffers(self,imageWidth,imageHeight,x,y,w,h,images:List[ImageDrawingDescription],clear=True)
1

参数

参数类型说明
imageWidthint最终绘制内容的宽度, 超出的部分会被裁剪
imageHeightint最终绘制内容的高度
imagesList[ImageDrawingDescription]绘制的内容
clearbool是否清除整混合图像

其中 ImageDrawingDescription 的定义如下

{
    "width": 1,
    "height": 1,
    "buffer": b'\xff\xff\xff\xff',
    "x": 100,
    "y": 100,
    "w": 10,
    "h": 10
}
1
2
3
4
5
6
7
8
9

其参数定义同 drawBuffer