上传下载和数据入库及通知

转码下载及同步等统计接口、剧集和视频信息入库、视频文件入库、视频上传、下载中心、转码数据POST通知接口等。

统计信息

#后面为转码设置的apikey
Get /api2/videostatistics?apikey=5c20cEga22FgG7f

#返回信息
{
    "视频管理": {
        "自动转码": "已开启",
        "视频总数": 9,
        "等待转码": 0,
        "转码完成": 9,
        "转码错误": 0
    },
    "下载中心": {
        "自动下载": "已开启",
        "任务总数": 0,
        "下载完成": 0,
        "下载失败": 0
    },
    "云存储同步": {
        "同步状态": "已关闭",
        "可同步视频数": 9,
        "已同步视频数": 0
    },
    "硬盘信息": [
        {
            "分区": "/dev/mapper/VolGroup-lv_root",
            "挂载": "/",
            "硬盘总量": "911.63G",
            "使用量": "474.66G",
            "使用百分比": "52.07%"
        },
        {
            "分区": "/dev/md0",
            "挂载": "/boot",
            "硬盘总量": "0.94G",
            "使用量": "0.12G",
            "使用百分比": "12.63%"
        }
    ]
}

视频文件入库

#该api效果可参考扫描入库,可以将movies所有视频入库到视频库,再自动转码。
POST /api/ruku

body: {
    apikey,
}

response: {
    success: 1,
}

#curl命令使用示例,apikey可在转码设置处获取
curl http://127.0.0.1:3000/api/ruku -d "apikey=5c20cEga"

视频详情信息入库

提示:如果你的视频和封面都是链接形式,推荐使用下载中心api代替处理。

POST /api/postmovie

body: {
    #必填参数
    apikey, //api,转码设置获取
    originalname, //视频名称
    path, //视频路径,可为相对或绝对路径,相对路径以切片根目录为参考,如./movies/test.mp4

    #可选参数,如用不到相关参数可不用传递
    poster, //封面路径,不填会自动生成,仅支持jpg、png、jpeg、webp格式,可为相对或绝对路径,相对路径以切片根目录为参考,如./movies/test.png
    category, //视频分类,不存在会自动创建
    originaltitle, //视频原名
    aka, //别名
    language, //语言
    banben, //版本,hd等
    director, //导演,多个导演用英文逗号,分开,如 导演1,导演2,导演3
    stars, //主演,多个主演用英文逗号,分开,如 主演1,主演2,主演3
    writer, //编剧,多个编剧用英文逗号,分开,如 编剧1,编剧2,编剧3
    tags, //分类标签,多个标签用英文逗号,分开,如 剧情,悬疑,搞笑
    summary, //影片详情
    country, //国家
    year, //发行年份
    rate, //豆瓣评分

    #可选参数,可自动入库到剧集,下面3个都必填,如用不到可不用传递;且剧集id可以使用剧集api添加后获取
    autodownTv, //剧集id,填入后,会在转码完成时,自动添加进剧集
    autodownepisodes, //集数,如 01,会在添加进剧集后,自动排序;集数命名要规范,位数和总集数一致,如总集数2位数,则用01、10,3位数用001、010。
    tvepisodesname, //集数,如 01,
}

response: {
    success: 1|0,  //1成功,并会直接返回视频的id;0失败
}

视频详情信息更新

POST /api/postupmovie

body: {
    #必填参数
    apikey, //api,转码设置获取
    originalname, //视频名称的关键词或全称,为模糊搜索

    #可选参数,如用不到相关参数可不用传递
    poster,  //封面,仅支持jpg、png、jpeg、webp格式,可为相对或绝对路径,相对路径以切片根目录为参考,如./movies/test.png;也可以为链接,如为链接,则会自动下载并处理。
    category, //视频分类,不存在会自动创建
    originaltitle, //视频原名
    aka, //别名
    language, //语言
    banben, //版本,hd等
    director, //导演,多个导演用英文逗号,分开,如 导演1,导演2,导演3
    stars, //主演,多个主演用英文逗号,分开,如 主演1,主演2,主演3
    writer, //编剧,多个编剧用英文逗号,分开,如 编剧1,编剧2,编剧3
    tags, //分类标签,多个标签用英文逗号,分开,如 剧情,悬疑,搞笑
    summary, //影片详情
    country, //国家
    year, //发行年份
    rate, //豆瓣评分
}

response: {
    success: 1|0,  //1成功,并会直接返回更新视频的id和名称;0失败
}

剧集详情信息入库

POST /api/posttv

body: {
    #必填参数
    apikey, //转码设置获取
    title, //剧集标题
    poster,  //封面,仅支持jpg、png、jpeg、webp格式,可为相对或绝对路径,相对路径以切片根目录为参考,如./movies/test.png;也可以为链接,如为链接,则会自动下载并处理。

    #可选参数,如用不到相关参数可不用传递
    episodescount, //集数,如12
    duration, //时长,可随便填入某个单集时长,单位分钟,如 23
    category, //视频分类,不存在会自动创建
    originaltitle, //剧集原名
    aka, //剧集别名
    language, //语言
    director, //导演,多个导演用英文逗号,分开,如 导演1,导演2,导演3
    stars, //主演,多个主演用英文逗号,分开,如 主演1,主演2,主演3
    writer, //编剧,多个编剧用英文逗号,分开,如 编剧1,编剧2,编剧3
    tags, //分类标签,多个标签用英文逗号,分开,如 剧情,悬疑,搞笑
    summary, //剧集简介
    country, //发行地区
    year, //发行年份,如 1996
    rate, //豆瓣评分,如 8.8
}

response: {
    success: 1|0,  //1成功,并会直接返回剧集的id;0失败
}

上传

提示:如果不会使用分片上传,可以使用简易上传或使用下载代替上传。

分片上传

分片上传需要配合插件一起使用,目前推荐Web Uploader,传送地点:点击查看

#需配合webuploader,file是分片之后的视频文件,md5码是未分片前视频的独一无二的MD5码,size是视频总大小单位字节,chunk从0开始,chunks是总分片数
POST /api/upload

body: {
    uploadkey, //后台设置上传秘钥
    file, //文件对象
    filemd5, //md5码
    chunk, //当前分片数
    chunks, //总分片数
    size,  //文件大小
}

response: {
    success: 1,
    id, //返回上传成功的视频objectid,用于构建m3u8地址。
}

我们上传后,会自动返回一个视频objectid,我们可以直接拿来组装M3U8地址和截图地址,基本上都是固定路径。

注意上传如果报错413状态码,则可能是nginx上传限制,调整下nginx上传限制大小即可。

简易上传

POST /api/simpleupload  //可根据后台设置m3u8路径自己架构返回的m3u8地址。

body: {
    uploadkey, //上传凭证,转码设置下方获取
    file, //上传文件
}

response: {
    success: 1,
    id, //返回上传成功的视频objectid,用于构建m3u8地址。
}

#curl命令使用示例,uploadkey为上传凭证,可在转码设置处获取
curl http://127.0.0.1:3000/api/simpleupload?uploadkey=7e8EgFAe -F "file=@/root/xx.mp4"

我们上传后,会自动返回一个视频objectid,我们可以直接拿来组装M3U8地址和截图地址,基本上都是固定路径。

注意上传如果报错413状态码,则可能是nginx上传限制,调整下nginx上传限制大小即可。

下载中心

POST /api/downloadm3u8

body: {
    #必填参数
    apikey, //转码设置获取
    name, //视频名称,下载完成后自动入库到视频管理的视频名称
    url,  //下载链接,注意如果地址包含&等特殊符号,如果影响到使用,记得转义下
    type,  //下载类型,如m3u8、downloadall,且m3u8仅支持下载m3u8链接,downloadall支持m3u8、mp4、mkv等其它视频直链和youtube视频地址下载,建议下载M3U8首选m3u8类型,m3u8类型出错就使用downloadall类型下载M3U8。

    #可选参数,如用不到相关参数可不用传递
    poster,  //封面链接,封面仅支持jpg、png、jpeg、webp格式,下载转码后,会自动转换成封面1和封面2;如不填会自动生成封面。
    category, //视频分类,不存在会自动创建
    clientId, //传递一个数据库id,即客户端辨识视频id,当使用通知接口返回信息的时候会返回该id,让你对应并进行数据填充。
    geturl, //解析接口配置,设置详情看下方
    originaltitle, //视频原名
    aka, //视频别名
    language, //语言
    banben, //版本,如HD、高清等
    director, //导演,多个导演用英文逗号,分开,如导演1,导演2,导演3
    stars, //主演,多个主演用英文逗号,分开,如主演1,主演2,主演3
    writer, //编剧,多个编剧用英文逗号,分开,如编剧1,编剧2,编剧3
    tags, //分类标签,多个标签用英文逗号,分开,如剧情,悬疑,搞笑
    summary, //视频简介
    country, //发行地区
    year, //发行年份
    rate, //豆瓣评分

    #可选参数,可自动入库到剧集,下面3个都必填,如用不到可不用传递;且剧集id可以使用剧集api添加后获取
    autodownTv, //剧集id,填入后,会在转码完成时,自动添加进剧集
    autodownepisodes, //集数,如 01,会在添加进剧集后,自动排序;集数命名要规范,位数和总集数一致,如总集数2位数,则用01、10,3位数用001、010。
    tvepisodesname, //集数,如 01,
}

response: {
    success: 1|0,  //1成功,0失败
}

#curl命令使用示例
curl http://127.0.0.1:3000/api/downloadm3u8 -d "name=西游记&category=动作片&url=http://127.0.0.1:8080/1.m3u8&apikey=5c20cEga&type=m3u8&poster=http://127.0.0.1:8080/1.jpg

注意部分参数的格式,切勿乱填,且导入成功后,部分信息不会显示在下载中心,直到下载完成后,会自动将你填入的所有信息入库到视频管理。

解析接口配置

如果获取到的m3u8需要配合解析接口使用,那么得填入解析接口配置,格式为:解析参数$解析接口

比如我获取到的m3u8链接为:http://127.0.0.1:8080/1.m3u8,解析接口为:http://127.0.0.1:3000/api?url=

然后访问解析m3u8的地址,如:http://127.0.0.1:3000/api?url=http://127.0.0.1:8080/1.m3u8,返回json数据如下:

{
    code: '200',
    url: 'http://127.0.0.1:8080/9.m3u8',
    type: 'hls'
}

url参数为解析后获取到的m3u8链接,那么解析接口配置就填入:url$http://127.0.0.1:3000/api?url=,最后下载的时候,会提取解析后的m3u8进行下载。

通知域名获取转码信息

通知域名的作用就是可以将转码完成的视频所有详细信息传给通知域名。

先去EFV后台转码设置设置一个对接域名,开启转码成功通知即可,如果你想设置多个通知域名,中间请使用英文|分开。

且通知方式有2种,分为手动通知和转码自动通知,如下:

#自动通知
需前往转码设置开启转码完成自动通知,即视频转码完成后,立马会将m3u8链接等信息自动通知到指定域名。

#手动通知
如你想先编辑视频或剧集信息后再通知,则需关闭转码完成自动通知,然后编辑好了后,通过手动发布的方式通知。

注意开启转码完成自动通知后,手动发布通知会失效,建议测试的时候关闭转码完成自动通知,使用手动发布通知,手动发布通知后可以反复下架重新发布,多次通知测试,

EFV会将转码完成的视频详细信息JSON类型POST到这个域名,您在您的后台只需要针对这个接收API处理JSON数据入库您自己的第三方程序数据库即可。

相关信息:

对象名:movie

#获取到的相关参数信息
status: String,
size: String,
category: String,
originalname: String,
originaltitle: String,
aka: String,
language: String,
banben: String,
vtt: String,
thumbnails: String,
poster: String,
poster2: { url: String, width: Number, height: Number },
count: { type: Number, default: 0 },
retry: { type: Boolean, default: false},
path: String,
duration: String,
director: [String],
writer: [String],
rate: Number,
year: Number,
stars: [String],
summary: String,
country: [String],
tags: [String],
m3u8paths: [{ hd: Number, path: String }],
previewvideo: String,
price: Number,
totv: Schema.Types.ObjectId,
md5: String,
createAt: {
  type: Date
}

如果你使用了详细编辑,里面的数据都有,接收API就选择里边的数据处理就行了。

单个视频接收的JSON数据

{
poster2: {
  url: '/videos/202202/07/61ffbfbb9b36dd00c878b4a1/poster.jpg',
  height: 773,
  width: 540
},
count: 23,
retry: false,
autoPublish: false,
director: [ '古桥一浩' ],
writer: [ '古桥一浩' ],
stars: [
  '三宅健太',  '宫野真守', '樱井孝宏',
  '伊藤静',   '梶裕贵',  '绵贯龙之介',
  '濑户麻沙美', '早见沙织', '滨野大辉',
  '柳田淳一',  '铃木玲子', '石冢运升',
  '中井和哉',  '天崎滉平', '菅原慎介',
  '町山芹菜'
],
country: [ '日本' ],
tags: [ '剧情', '喜剧', '战争', '动画' ],
screenshots: [
  '/videos/202202/07/61ffbfbb9b36dd00c878b4a1/0.jpg',
  '/videos/202202/07/61ffbfbb9b36dd00c878b4a1/2.jpg',
  '/videos/202202/07/61ffbfbb9b36dd00c878b4a1/1.jpg',
  '/videos/202202/07/61ffbfbb9b36dd00c878b4a1/3.jpg'
],
_id: '61ffbfbb9b36dd00c878b4a1',
originalname: '窈窕淑女前篇:红绪,花样的17岁',
status: 'finished',
path: './movies/Haikara-san ga Toru the movie.mkv',
category: '日本动漫',
size: '5497612960',
createAt: '2022-02-16T09:25:49.733Z',
m3u8paths: [
  {
    _id: '6200c8949dc15a00c15be7db',
    hd: 640,
    path: './public/videos/202202/07/61ffbfbb9b36dd00c878b4a1/8f89fb/index.m3u8'
  },
  {
    _id: '6200cc499dc15a00c15be809',
    hd: 1280,
    path: './public/videos/202202/07/61ffbfbb9b36dd00c878b4a1/08cad8/index.m3u8'
  }
],
thirdm3u8: [],
__v: 1,
height: 1080,
width: 1920,
duration: '97分钟',
moviepath: '/videos/202202/07/61ffbfbb9b36dd00c878b4a1',
gif: '/videos/202202/07/61ffbfbb9b36dd00c878b4a1/1.gif',
previewvideo: '/videos/202202/07/61ffbfbb9b36dd00c878b4a1/preview.mp4',
poster: '/videos/202202/07/61ffbfbb9b36dd00c878b4a1/cover.jpg',
firstScreen: '/videos/202202/07/61ffbfbb9b36dd00c878b4a1/first.jpg',
aka: '',
banben: 'HD',
language: '日语',
originaltitle: '劇場版 はいからさんが通る 前編 ~紅緒、花の17歳~',
rate: 7.5,
summary: '根据70年代大受欢迎的少女漫画《窈窕淑女》改编的剧场版动画,《窈窕淑女》的题目字面意思出自诗经:“窈窕淑女,君子好逑"。大和和纪的《窈窕淑女》是1977年的少女漫画优秀杰作,曾经红极一时。讲述了一个关...',
year: 2017
}

注意m3u8paths里边的hd参数,320240P480360P640480P1138640P1280720P19201080P25602K20000为原画。

剧集接收的JSON数据

由于剧集需要先整理分集,所以暂时没自动发布,只能通过手动点击正式发布,才会通知到域名,数据如下:

{
poster2: {
    url: '/poster/623eaaf9b1d50c9badb2f47b-poster2.jpg',
    height: 763,
    width: 540
},
count: 263,
director: [ '中山敦史', '山本裕介', '名和宗则', '森义博', '重原克也' ],
writer: [ '木村畅', '横手美智子' ],
stars: [
    '兴津和幸',   '小野大辅',   '伊藤静',
    '大原沙耶香', '麦人',       '田中敦子',
    '土师孝也',   '中村悠一',   '高桥李依',
    '稻田彻',     '绵贯龙之介', '野濑育二',
    '松冈祯丞',   '千本木彩花', '加隈亚衣',
    '田村由香里', '柳田淳一',   '相马康一',
    '手冢弘道',   '井上喜久子', '菅生隆之',
    '大桥彩香',   '朝井彩加',   '阪口大助',
    '樱井浩美',   '天崎滉平',   '菅原慎介',
    '木下浩之',   '千叶进步',   '松本忍',
    '松风雅也',   '岩泽俊树',   '内匠靖明',
    '木内太郎',   '伊丸冈笃',   '池田胜',
    '潘惠子',     '深川和征'
],
country: [ '日本' ],
tags: [ '动画', '奇幻' ],
published: 'waiting',
_id: '623eaaf9b1d50c9badb2f47b',
title: '骑士&魔法',
originaltitle: 'ナイツ&マジック',
aka: "Knight's Magic",
year: 2017,
duration: '24分钟',
episodescount: '13',
language: '日语',
rate: 6.6,
summary: '能干的程序员,同时是重度机器人宅的青年,转生到了巨大机器人“幻晶骑士(Silhouette Knight)”震动大地的骑士与魔法的异世界!?以艾尔涅斯帝·埃切贝里亚的身份转生的他,活用丰富的机械知识...',
status: 'wanjie',
zhouqi: '',
episodes: [
    {
    _id: '62777218e7a65ed82225e5bc',
    episode: '01',
    movieid: '62010cfa471273018072295a'
    },
    {
    _id: '62777218e7a65ed82225e5bd',
    episode: '02',
    movieid: '62010cfa471273018072295b'
    },
    {
    _id: '62777218e7a65ed82225e5be',
    episode: '03',
    movieid: '62010cfa471273018072295c'
    },
    {
    _id: '62777218e7a65ed82225e5bf',
    episode: '04',
    movieid: '62010cfa471273018072295d'
    },
    {
    _id: '62777218e7a65ed82225e5c0',
    episode: '05',
    movieid: '62010cfa471273018072295f'
    },
    {
    _id: '62777218e7a65ed82225e5c1',
    episode: '06',
    movieid: '62010cfa4712730180722960'
    },
    {
    _id: '62777218e7a65ed82225e5c2',
    episode: '07',
    movieid: '62010cfa4712730180722961'
    },
    {
    _id: '62777218e7a65ed82225e5c3',
    episode: '08',
    movieid: '62010cfa4712730180722963'
    },
    {
    _id: '62777218e7a65ed82225e5c4',
    episode: '09',
    movieid: '62010cfa4712730180722964'
    },
    {
    _id: '62777218e7a65ed82225e5c5',
    episode: '10',
    movieid: '62010cfa4712730180722959'
    },
    {
    _id: '62777218e7a65ed82225e5c6',
    episode: '11',
    movieid: '62010cfa4712730180722965'
    },
    {
    _id: '62777218e7a65ed82225e5c7',
    episode: '12',
    movieid: '62010cfa471273018072295e'
    },
    {
    _id: '62777218e7a65ed82225e5c8',
    episode: '13',
    movieid: '62010cfa4712730180722962'
    }
],
createAt: '2022-05-08T07:32:40.856Z',
__v: 0,
poster: '/poster/623eaaf9b1d50c9badb2f47b-poster.jpg',
category: '日本动漫',
updateAt: '2023-01-16T16:01:40.804Z'
}

movieid为集数的视频id,可以通过拼接获取该集数的自适应m3u8地址,拼接如下:

#拼接格式:/movie/auto/ + 视频id + .m3u8
/movie/auto/62010cfa4712730180722962.m3u8

最后就可以获取每个集数的自适应m3u8链接了。