视频点播RTMP推流直播流媒体服务二次开发集成接口

LiveQing流媒体服务器软件,提供一站式的转码、点播、直播、时移回放服务,极大地简化了开发和集成的工作。

其中,点播功能主要包含:上传、转码、分发。直播功能,主要包含:直播、录像, 直播支持RTMP输入,RTMP/HLS/HTTP-FLV的分发输出;录像支持自定义保存时长、检索及下载。提供丰富的二次开发接口,基于JSON的封装及HTTP调用。提供播放鉴权、推流鉴权等安全保证。提供用户及相关权限管理配置。

一、 接口列表

http://demo.liveqing.com:10080/apidoc/

二、 集成二次开发

二次开发中,方式是在自己业务系统后端登录接口中,调用流媒体的登录接口,获取所需的sid或是token

1. 封闭内网使用

在业务使用,如果只是使用LiveQing提供视频分发能力,且不会对外公开接口端口10080(默认端口),可以直接将接口鉴权关闭,具体服务器登录 http://localhost:10080 默认用户名/密码 admin/admin, 在 基础配置 页面,【接口鉴权】开关。

在这里插入图片描述

2. 业务系统对接(两种方式)

2.1 cookie方式

注: HttpOnly = true 客户端API(例如JavaScript)无法访问仅限http的cookie。 此限制通过跨站点脚本(XSS)消除了cookie被盗的威胁。

  1. 在后端业务代码中对接,如Java/PHP/Node.js 等

  2. 调用LiveQing登录接口,接口调用成功后会在请求Headers的cookie中写入sid

  3. 取出cookie里的sid

  4. 其它接口调用时在请求头cookies中传递sid

  5. Content-Type:application/x-www-form-urlencoded

  6. 接口请求路径示例:http://localhost:10080/login

代码示例:Java

2.1.1 获取sid

  import java.io.DataOutputStream;import java.net.HttpURLConnection;import java.net.URL;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;public class GetLoginSid {public static void main(String[] args) throws Exception {URL url = new URL("http://cloud.liveqing.com:10080/login");//发起POST请求,并传递username,password参数(需要md5加密)HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(true);conn.setDoInput(true);conn.setRequestMethod("POST");     conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");DataOutputStream out = new DataOutputStream(conn.getOutputStream()); String content = "username=admin&password=21232f297a57a5a743894a0e4a801fc3";out.writeBytes(content);out.flush(); out.close();Map<String, List<String>> headerFields = conn.getHeaderFields();Set<String> headerFieldsSet = headerFields.keySet();Iterator<String> hearerFieldsIter = headerFieldsSet.iterator();while (hearerFieldsIter.hasNext()) {String headerFieldKey = hearerFieldsIter.next();if ("Set-Cookie".equalsIgnoreCase(headerFieldKey)) {List<String> headerFieldValue = headerFields.get(headerFieldKey);for (String headerValue : headerFieldValue) {String[] fields = headerValue.split(";\\s*");for (int j = 0; j < fields.length; j++) {if (fields[j].indexOf('=') > 0) {String[] f = fields[j].split("=");if ("Expires".equalsIgnoreCase(f[0])) {                       System.out.println("Expires:" + f[1]);}else if ("Max-Age".equalsIgnoreCase(f[0])) {                 System.out.println("Max-Age:" + f[1]);}else if ("sid".equalsIgnoreCase(f[0])) {  //获取sid   System.out.println("sid:" + f[1]);}}}}}}}}

运行如下
在这里插入图片描述

2.1.2 携带sid调用其它接口

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;public class RequestOtherAPI {public static void main(String[] args) throws Exception {URL url = new URL("http://demo.liveqing.com:10080/live/list");HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(true);conn.setDoInput(true);conn.setRequestMethod("POST");     conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");//这里传递上一步获得sidconn.setRequestProperty("Cookie","sid=s%3Ark-TEuVtm.WnWoXuDY%2FldJuEc64I6TXjd0Fq1eqByEd4ng1UwNb2I;");DataOutputStream out = new DataOutputStream(conn.getOutputStream()); String content = "start=0&limit=10";out.writeBytes(content);out.flush(); out.close();conn.connect();StringBuffer sbf = new StringBuffer();InputStream is = conn.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));String strRead = null;while ((strRead = reader.readLine()) != null) {sbf.append(strRead);sbf.append("\r\n");}reader.close();System.out.println(sbf.toString());}}

2.2 token方式

  1. 调用登录接口获取token,调用时传递 onlytoken=true
    如: http://demo.liveqing.com:10080/login?username=admin&password=21232f29757a5a&onlytoken=true

  2. Content-Type:application/x-www-form-urlencoded

  3. 其它接口调用时传递附加token入参

代码示例:Java

2.2.1 获取token

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;public class GetLoginToken {public static void main(String[] args) throws Exception {URL url = new URL("http://localhost:10080/login");HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(true);conn.setDoInput(true);conn.setRequestMethod("POST");     conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");DataOutputStream out = new DataOutputStream(conn.getOutputStream()); String content = "username=admin&password=21232f297a57a5a743894a0e4a801fc3";out.writeBytes(content);out.flush(); out.close();conn.connect();StringBuffer sbf = new StringBuffer();InputStream is = conn.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));String strRead = null;while ((strRead = reader.readLine()) != null) {sbf.append(strRead);sbf.append("\r\n");}reader.close();System.out.println(sbf.toString());}}

运行如下

获取token运行结果

2.2.2 携带token调用其它接口

其他接口调用时,附加token入参

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;public class RequestOtherAPIByToken {
public static void main(String[] args) throws Exception {URL url = new URL("http://localhost:10080/live/list");HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(true);conn.setDoInput(true);conn.setRequestMethod("POST");     conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");DataOutputStream out = new DataOutputStream(conn.getOutputStream()); String content = "start=0&limit=10&token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1Mzc3NzExNTAsInB3IjoiMjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzMiLCJ0bSI6MTUzNzY4NDc1MCwidW4iOiJhZG1pbiJ9.b1U-R-_HVKV9reWRD50327B1ztUqs3gowUGi_lDzlmU";out.writeBytes(content);out.flush(); out.close();conn.connect();StringBuffer sbf = new StringBuffer();InputStream is = conn.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));String strRead = null;while ((strRead = reader.readLine()) != null) {sbf.append(strRead);sbf.append("\r\n");}reader.close();System.out.println(sbf.toString());}
}

运行如下
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/66387.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音视频直播推流和拉流到底是什么意思?

为什么直播现场的信息&#xff0c;用户通过手机或者网站就能很快的看到呢&#xff1f;为什么有时候网络不稳定&#xff0c;直播效果会有延迟呢&#xff1f;现场的视频信号又是如何传到网络呢&#xff1f; 这些所有问题的产生&#xff0c;都离不开视频直播中常说的两个词&#…

视频直播推流攻略(整理的各大平台推流界面)

如果我要做一场高端大气的直播活动&#xff0c;需要用高清摄像机拍摄画面&#xff0c;需要接入无人机的高空画面&#xff0c;需要在直播中插入多个镜头&#xff0c;甚至需要把电脑桌面共享到直播画面中...... 该如何将这类现场信号采集并整合起来传输到网络呢&#xff1f; 这个…

音视频流媒体-推流与拉流简介

一、概念 话不多说&#xff0c;先了解概念&#xff0c;再看示意图更直观&#xff1a; 1.1 推流 推流&#xff1a;将直播的内容推送至服务器的过程。即指的是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号传到网络的过程。“推流”对网络要求比较高&a…

Feishu(飞书) 聊天机器人应用(3/3)- DevOps 机器人助手,管理 GitLab Issues,BOT 开源示例程序

目录 DevOps 机器人助手命令示例 配置使用创建机器人设置环境变量GITLAB_URLPRIVATE_TOKENVALID_PROJECTS 修改对话使用帮助本系列文章 在上一篇文章&#xff1a;Feishu(飞书) 聊天机器人应用&#xff08;2/2&#xff09;- 定制对话&#xff0c;实现知识库、信息查询、意图识别…

什么是飞书机器人?如何定时发送飞书机器人消息?

什么是飞书机器人&#xff1f; 机器人是飞书应用的一种能力类型。基于飞书的机器人能力&#xff0c;开发者能够以较低的开发成本&#xff08;只需在服务端开发&#xff09;&#xff0c;实现在飞书单聊或群组中的消息推送和简单互动&#xff0c;完成企业系统数据与飞书的互联互通…

RPA工具实现飞书群聊自动发送信息,我终于也有了自己的机器人

一&#xff0e;RPA究竟是个啥&#xff1f; 首先&#xff0c;他的全称是&#xff1a;Robotic Process Automation&#xff0c;嫌太长&#xff0c;我们三个单词拆开看看&#xff1a; Robotic&#xff1a;软件机器人&#xff0c;不是物理上能走能动的机器人哦&#xff0c;而是一…

android面试:面向移动应用开发者的 Android 面试经常提问到的15道面试

Android 软件开发是为运行 Android 操作系统的设备创建应用程序的过程。可以使用 Android 软件开发工具包使用 Kotlin、Java 和 C 语言编写 Android 应用程序。以下是关于 Android 的编码面试问题列表&#xff0c;可帮助您秋招下一次技术面试做好准备。 &#x1f539; 1. 提一…

字节跳动资深面试官亲述:面试应该注意哪些问题?

01面试做匹配 面试官的根本目的在于考察你这个人是否与招聘岗位相匹配&#xff0c;衡量能否胜任工作&#xff0c;我们在面试中要做到的就是让面试官相信我们能够与应聘岗位相匹配。 针对一些面试题做了总结&#xff1a; 1.请简单进行一下自我介绍 首先请报出自己的姓名和身…

字节跳动面试官问我看过哪些源码,然后就没有然后了

最近&#xff0c;我的一位朋友在找工作&#xff0c;已经拿到了美团、快手等公司的Offer&#xff0c;准备选择其中一家入职了。 后来他又接到了字节跳动的电话&#xff0c;通知他去参加三面。从二面到三面之间隔了挺久的&#xff0c;他以为都没戏了&#xff0c;结果就收到了通知…

今日头条面试

首先说一下&#xff0c;今日头条的面试主要分为三轮到四轮&#xff0c;如果是旺季面三轮&#xff0c;首先是基础面试&#xff0c;基本面试一般10个题左右&#xff0c;最近面试了一下今日头条的移动Android资深工程师&#xff0c;记录下。 第一面是北京的开发进行视频面试&…

字节跳动Android高工面试官现身说法,深度解密大厂面试套路,赢在起跑线!

前言 面试从来不是要你给出每一个问题的标准答案&#xff0c;而是要你给出这个问题的你的、自己的答案。 一 关于简历 面试首先要提到的就是简历&#xff0c;简历这个东西真的是一个很深奥的事情&#xff0c;为什么深奥&#xff0c;其实是对像和我这样的人深奥&#xff1a;学…

头条面试官问我看过哪些源码,然后就没有然后了

最近&#xff0c;我的一位朋友在找工作&#xff0c;已经拿到了美团、快手等公司的Offer&#xff0c;准备选择其中一家入职了。 后来他又接到了字节跳动的电话&#xff0c;通知他去参加三面。从二面到三面之间隔了挺久的&#xff0c;他以为都没戏了&#xff0c;结果就收到了通知…

今日头条面试相关

原文地址&#xff1a; http://cv.qiaobutang.com/post/55e6a1110cf2633c1ba8ce8f 面试经历&#xff1a; 总共四轮&#xff0c;HR约得时间是下午两点半开始面&#xff0c;结果我2点20提前到了&#xff0c;坐在那一直等&#xff0c;等到3点5分才叫我去一个会议室&#xff0c;结果…

面试今日头条Android开发,结束时我问了面试官是否有女朋友,结果你猜?

点击上方“何俊林”&#xff0c;马上关注&#xff0c;每天早上8:50准时推送 真爱&#xff0c;请置顶或星标 本文转载自牛客网&#xff0c;作者&#xff1a;皮蛋瘦肉粥&#xff0c;链接&#xff1a;https://www.nowcoder.com/discuss/85227?type0&order0&pos28&pag…

剖析今日头条技术面试过程以及应该如何准备?

作者&#xff1a;“想去大厂的小菜鸡” https://juejin.im/post/5c14e7f051882562502f077 国庆期间公司的项目很闲&#xff0c;很多人觉得没意思陆续走了&#xff0c;我也考虑到自己的发展&#xff0c;从9月底开始面&#xff0c;面到11月底&#xff0c;三十家公司。我从不打没准…

腾讯面试Android必问11题,我说的,不信就来看看

众所周知兔子啥都会那么一点&#xff0c;不收藏等着干啥呢 1、是否使用过本地广播&#xff0c;和全局广播有什么差别&#xff1f; 引入本地广播的机制是为了解决安全性的问题&#xff1a; 正在发送的广播不会脱离应用程序&#xff0c;比用担心app的数据泄露&#xff1b;其他的…

字节跳动面试官问了我源码,然后......

最近&#xff0c;我的一位朋友在找工作&#xff0c;已经拿到了拼多多、快手等公司的Offer&#xff0c;准备选择其中一家入职了。 后来他又接到了字节跳动的电话&#xff0c;通知他去参加三面。从二面到三面之间隔了挺久的&#xff0c;他都以为没戏了&#xff0c;结果却收到了通…

华为畅享20 pro 和华为畅享Z 的区别 哪个好

为畅享20 Pro的硬件配置和外观设计&#xff0c;似乎与华为畅享Z保持绝对的一致&#xff0c;华为畅享20 Pro的正面配备一块6.5英寸显示屏&#xff0c;由于是LCD的屏幕&#xff0c;因此指纹识别依然放在了侧面&#xff0c;最高支持90Hz的屏幕刷新率和180Hz的触控采样率 华为畅享2…

华为畅享20pro和华为nova7se的区别 哪个好

华为畅享20Pro是畅享系列的第二款5G手机&#xff0c;手机正面配备LCD珍珠全面屏&#xff0c;支持90Hz高刷新率&#xff0c;屏幕的分辨率为2400*1080&#xff0c;机身背部采用了玻璃&#xff0c;手机有星河银、深海蓝、幻夜黑三款配色。 华为畅享20pro更多使用感受和评价&#x…

华为畅享20 Plus和华为畅享20pro 的区别 哪个好

屏幕方面&#xff0c;华为畅享20plus配备6.63英寸的FHD IPS LCD屏&#xff0c;支持90Hz的刷新率以及180Hz的屏幕采样率&#xff0c;采用悬浮式升降摄像头设计&#xff0c;有星河银、樱雪晴空、翡冷翠、幻夜黑四款配色 华为畅享20plus更多使用感受和评价&#xff1a;https://www…