斗鱼直播源解析工具

博主分享斗鱼直播源抓取与解析方法。先用手机端X浏览器(通过PC端安卓模拟器)抓取,用Java写程序解析,多数直播间有效;还可用Chrome或Firefox浏览器F12抓源。工具支持两种格式解析,解析后的直播源可在Potplayer播放,后续会根据新解析方式更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前天在网上搜抓取斗鱼直播源的时候,搜到了一个帖子(点击进入原贴).我按照楼主的方法试了一下用手机端X浏览器抓取直播源(用pc端的安卓模拟器实现的),然后按照楼主的思路解析了一下地址,发现大部分直播间还是有效果的,然后就用java写了个小程序,实现了这个简单的功能。

另外,除了楼主说的这种抓取方式,还可以用chrome或者firefox浏览器的F12抓源,以chrome为例,把调试终端调成手机模式,在network里 把size降序排列,那个一直在返回响应不断增大的就是直播源,测试了好多次,斗鱼的直播源很怪,有时候抓取到的是可以直接在potplayer里播放的,但绝大多数是加密的,而且加密的形式也有区别,这个工具目前只支持两种格式的解析,这两种已经能支持多数直播间了,但部分直播间的地址还是无法正确解析。
另外,某些直播间利用chrome的12直接抓取获取到的源后缀是.xs的,这种有的也是可以直接播放的.

利用这个工具解析得到的直播源,可以直接在potplayer里播放,不用再看直播间里乱七八糟的广告、弹幕、礼物啦。

第一种能解析的格式:上述帖子楼主说的,形如http://hls1a.douyucdn.cn/live/1525851rffvVYsm7_2200/playlist.m3u8?wsSecret=0a0646be9c7bfed2b222bfff0652de51&wsTime=1557997214&token=h5-douyu-0-1525851-f16629cd8a409e970ca6c948ef2144ce&did=eefe85593b4a4e28b8983f1700061531,这种,利用手机端(或者安卓模拟器)的X浏览器嗅探到的直播源地址。

第二种能解析的格式:利用chrome浏览器抓取到的,形如https://3graurmtigrzdnctzfa5dy.ourdvsss.com/hdls3a.douyucdn.cn/live/5160335rggibOFpp_4000p.flv?wsAuth=25f9545a530998a7c43dc628e2c48c90&token=web-h5-1402795-5160335-77e1ef2c8c3e412411ae6de16b779de76539f3a62efd0510&logo=0&expire=0&did=371a20aa30732e582f3fbb9300071501&ver=Douyu_219051755&pt=2&st=0&mix=0&isp=&wshc_tag=0&wsts_tag=5cde9fff&wsid_tag=b7e959de&wsiphost=ipdbm的格式

通过测试,抓取的直播源的格式各种各样的都有,所以解析方式肯定也各不相同,如果大家发现了其他的解析方式,可以在本贴下留言,我也会及时更新工具的解析方法。

下面附上下载:

链接:https://pan.baidu.com/s/1w9OXikdYP19_lX0cdOOb8A
提取码:al2l

源码:

public class Test implements ActionListener {
    private  JButton btn1 ;//开始解析按钮
    private  JButton btn2 ;//退出程序按钮
    private TextField url1;//输入解析文本框
    private  TextField result;//输出解析地址文本框

    //程序运行入口
    public static void main(String[] args) {
        new Test();
    }
    public Test(){
        //界面设置
        JFrame frame = new JFrame();
        frame.setVisible(true);
        frame.setTitle("斗鱼直播源解析 by故事而已");
        frame.setLocation(700,400);
        frame.setSize(400,200);

        //生成容器
        Container con = frame.getContentPane();//生成容器
        con.setLayout(new GridLayout(3,1));

        //版面设置
        JPanel pan1 = new JPanel();//生成一个新的版面
        JLabel urlStr = new JLabel("解析");
        pan1.add(urlStr);
        url1 = new TextField(40);
        url1.setText("在此输入需要解析的直播源地址");
        pan1.add(url1);
        con.add(pan1);

        JPanel pan2 = new JPanel();//版面2
        JLabel urlResult = new JLabel("解析结果");
        pan2.add(urlResult);
        result = new TextField(40);
        pan2.add(result);
        con.add(pan2);

        JPanel pan3 = new JPanel();//版面3
        btn1 = new JButton("开始解析");
        btn2 = new JButton("退出");
        btn1.addActionListener(this);//绑定监听
        btn2.addActionListener(this);//绑定监听
        pan3.add(btn1);
        pan3.add(btn2);
        con.add(pan3);
        //关闭窗口事件
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
    //按钮事件
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==btn1){
            method();//点击开始解析按钮,调用解析方法
        }else if(e.getSource()==btn2){
            System.exit(1);//点击关闭按钮,退出程序
        }
    }
    //解析地址的方法
    private void method() {
        try {

            //x浏览器嗅探到直播源解析
            String url = url1.getText();
            if(url.startsWith("http://")){
                //解析方案1
                String[] split = url.split("\\?");
                String sub = split[0].substring(split[0].indexOf("."));
                String source = "http://tx2play1"+sub+"?"+split[1].substring(split[1].indexOf("token"));
                source = source.replace("/playlist.m3u8",".flv");
                //输出解析地址
                result.setText(source);
            }
            //chrome获取到的直播源解析
            if(url.startsWith("https://")){
                //解析方案2
                String regex = "\\.flv";
                String[] split = url.split(regex);
                String part1 = split[0].substring(split[0].lastIndexOf("/"));
                String part2 = split[1].substring(split[1].indexOf("token"));
                String source = "https://tx2play1.douyucdn.cn/live"+part1+".flv?"+part2;
                result.setText(source);
            }
        } catch (Exception e) {
            result.setText("该地址暂时无法解析");//输出异常信息
        }
    }
}

其实这个实现很简单,就是对加密的直播源url进行还原,变成未加密的状态,但是斗鱼的加密形式很多,目前我只发现了这两种。后续如果再有新的发现,我会继续更新本工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值