获取虎牙,YY,映客等平台直播源

package com.video.parse;

import cn.hutool.core.text.StrFormatter;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.ReUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONUtil;
import com.video.parse.common.util.Common;
import lombok.extern.slf4j.Slf4j;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

import java.util.HashMap;

@Slf4j
public class LiveResource {

    public static void main(String[] args) {
        yy("54880976");

        huYa("52513");

        yingKe("727419703");
    }

    private static String yingKe(String roomNumber) {
        String interfaceUrl = StrFormatter.format("https://webapi.busi.inke.cn/web/live_share_pc?uid={}", roomNumber);
        String jsonStr = HttpUtil.get(interfaceUrl);
        log.debug(JSONUtil.toJsonPrettyStr(jsonStr));
        JSON json = JSONUtil.parse(jsonStr);
        String hls = JSONUtil.getByPath(json, "data.live_addr[0].hls_stream_addr").toString();
        log.debug("映客直播间: [{}] , 直播源: [{}] ", roomNumber, hls);
        return hls;
    }

    /**
     * 获取虎牙直播间直播源
     *
     * @param roomNumber 直播间号
     * @return
     */
    private static String huYa(String roomNumber) {
        String interfaceUrl = StrFormatter.format("https://m.huya.com/{}", roomNumber);
        String body = HttpUtil.createGet(interfaceUrl).addHeaders(getMobileHeaders()).execute().body();
        String src = ReUtil.findAll("liveLineUrl = \"([\\s\\S]*?)\";", body, 0).get(0);
        String hls = "https:" + StrUtil.subBetween(src, "\"", "\"");
        log.debug("虎牙直播间: [{}] , 直播源: [{}] ", roomNumber, hls);
        return hls;
    }

    /**
     * 获取虎牙直播间直播源
     *
     * @param roomNumber 直播间号
     * @return
     */
    private static String yy(String roomNumber) {
        HashMap<String, String> headers = Common.getMobileHeaders();
        headers.put("referer", StrFormatter.format("http://wap.yy.com/mobileweb/{}", roomNumber));
        String interfaceUrl = StrFormatter.format("http://interface.yy.com/hls/new/get/{}/{}/1200?source=wapyy&callback=jsonp3", roomNumber, roomNumber);
        String body = HttpUtil.createPost(interfaceUrl).addHeaders(headers).execute().body();
        String jsonStr = StrUtil.sub(body, 7, body.length() - 1);
        JSON json = JSONUtil.parse(jsonStr);
        String hls = JSONUtil.getByPath(json, "hls").toString();
        log.debug("YY直播间: [{}] , 直播源: [{}] ", roomNumber, hls);
        return hls;
    }
}
package com.video.parse.common.util;

import cn.hutool.core.lang.PatternPool;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.util.HashMap;

public class Common {

    public static Document jsonpConnect(String url, Boolean isMobile) {
        Document doc = null;
        if (StrUtil.isNotEmpty(url)) {
            try {
                url = ReUtil.get(PatternPool.URL_HTTP, url, 0);
                Connection connect = Jsoup.connect(url);
                if (isMobile) {
                    connect.headers(Common.getMobileHeaders());
                }
                doc = connect.timeout(5000).get();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return doc;
    }

    public static String getLocationUrl(String url) {
        HashMap headers = getMobileHeaders();
        HttpResponse execute = HttpUtil.createGet(url).addHeaders(headers).execute();
        String redirectUrl = execute.header("Location");
        return redirectUrl;
    }

    public static HashMap<String, String> getMobileHeaders() {
        HashMap headers = MapUtil.newHashMap();
        headers.put("User-Agent", "Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Mobile Safari/537.36");
        // headers.put("User-Agent", "Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1");
        // headers.put("User-Agent", "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Mobile Safari/537.36");
        return headers;
    }
}

依赖jsoup 、hutool、lombok工具

概述: iShow是一套基于P2P技术的在线视频直播系统,iShow依存于web网页,无需下载插件,可实现低延时高清的视频语音直播体验。现已广泛应用于教育、娱乐、客服等各个行业,随着国内带宽的提升和各类新技术的加入,视频直播技术已经逐渐成为下一代互联网的主流,多媒体在线直播体验势必将会涵盖各类终端,成为全民参与的新一代互联网主旋律。 随着国家网络带宽的升级,民用宽带的价格逐渐降低以及微博等即时交流的网络媒体的兴盛,视频多媒体将将成为下一代网络的主流力量,iShow作为国内第一个也是唯一一个使用点对点视频技术开发的网站应用,正在引领一股新的流媒体平民化浪潮。 功能列表: 1、即时视频语音直播 2、视频状态检测 3、局域网内的P2P直播,不消耗任何外网带宽 4、可设置的视频清晰度和缓冲时间 5、无延时的即时文字和表情传输 6、礼物/消费/主播结算/房间类型等功能 7、播放录像功能 iShow的技术优势: 1、直播低延时、文本数据即时传输 2、多媒体直播不耗费任何服务器资源,对服务器无负载 3、带宽占用低 4、视频高清,采用高清编码,影响更清晰,传输更流畅 5、无需架设额外的视频流媒体服务器,节省60%~90%的运营开支 6、可扩展,可跨平台同步直播 7、兼容任何开发语言,简单几步可与任何网站进行对接整合 8、智能识别用户的在线状态 9、可脱离动态程序和数据库独立运行,如:无需任何架设,即可直接集成到任何网站,进行直播或文字沟通 目前同行业唯一一款成熟产品,处于行业绝对领跑者
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值