V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
xiaocsl
V2EX  ›  分享创造

自动调用本地播放器,观看各大在线视频.理论上 You-Get 支持的都能支持.

  •  1
     
  •   xiaocsl · 2017-01-14 10:41:49 +08:00 · 8402 次点击
    这是一个创建于 2872 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用帮助 简单演示视频

    • 下载 You-Get @You-Get Releases

    • 下载 VLC @videolan.org

    • 下载 exe()>_<|||) @GitHub 并将此 exe 放入 You-Get 根目录

    • 首次打开需点击 写入注册表 按钮

    • 安装 Tampermonkey 并添加脚本


    • JS 代码很简单,根据自己需求添加待匹配网站
    • 推荐设置 VLC 仅允许运行一个实例播放并退出
    • 我用的是 VS 2010

    起因

    最开始是因为每次下载视频时都要手动输入各种参数,控制台操作复制粘贴也不方便.

    所以想用 C# 拖了个 GUI 直接调用 cmd.exe 参数配置不用管,还可以根据域名来自动选择是否使用代理.

    没几行代码的事,立刻准备动手.刚才 VS 里新建项目突然想起来 You-Get 能直接调用播放器,干脆写成浏览器打开视频网址后直接用 VLC 播放算了,不光不用忍受 Flash 这渣渣,~~(还能去广告)~~

    思路

    • C# 主要就通过调用 CMD 来执行 You-Get
    • 在注册表里添加一个 URI Scheme ,注册表结构如下:
    HKEY_CLASSES_ROOT
       ygtxxx
          URL Protocol = ""
          shell
             open
                command
                   (Default) = "{Path}\YouGet.exe" "%1"
    
    • 通过 Tampermonkey 脚本,来匹配在线播放链接,并发出请求.

    You-Get + VLC 的各种小问题

    • 优酷视频分割太多
    • 爱奇艺不显示时间
    • 搜狐 TV 无法快进
    • 部分网站缓冲速度太慢
    • 等等.........

    Tampermonkey

    • 只包含了几个自己常用的网站,可自行添加,只要 You-Get 支持即可.
    • 实际上就一行代码,前面的只是为了转换成 You-Get 支持的微博视频地址.
    // ==UserScript==
    // @name         You-Get Tool
    // @namespace    http://tampermonkey.net/
    // @version      0.1
    // @description  try to take over the world!
    // @author       You
    // @include      http://www.iqiyi.com/v_*
    // @include      http://v.youku.com/v_show/id_*
    // @include      http://video.sina.com.cn/*
    // @include      http://weibo.com/tv/v/*
    // @include      http://tv.sohu.com/*html*
    // @include      http://www.tudou.com/*html*
    // @grant        none
    // @require      https://cdn.staticfile.org/jquery/3.1.1/jquery.min.js
    // ==/UserScript==
    
    (function() {
        'use strict';
        var openUrl = window.location.toString();
        //取 Url 参数
        function getUrlParam(name) {
            var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
            var r = window.location.search.substr(1).match(reg);
            if (r != null) return unescape(r[2]); return null;
        }
        //微博视频需转换 Url 格式
        if(openUrl.indexOf("/weibo.com/tv/v") != -1){
            var tempFid = getUrlParam("fid");
            if(tempFid == null){
                return;
            }
            openUrl = "http://video.weibo.com/show?fid=" + tempFid;
        }
        //移除页面中的 flash 元素
        $("#flash,#player,#myflashBox,#playerRoom").remove();
        //请求应用程序
        window.location.href = "ygtxxx:sendmsg?url=" + openUrl;
        //关闭页面
        setTimeout("window.close()",100);
    })();
    

    PS

    所有的算下来没几行代码,但是效果很给力,各种感谢 @You-Get

    很少用 C# ,大部分代码都是搜出来的.各种感谢 @Google

    代码很烂,各种感谢 @吃瓜群众

    其实我最好奇的是 OS X 平台上为什么没人写一个类似的呢.随便想了下就有好多解决方案.

    对 MacBook 来说,收益更大.也希望这个小软件给大家提了个小思路.

    自己最常用的播放器是 PotPlayer ,但是 You-Get 调用时传的参数不对人家胃口,分段的视频只能添加第一段到播放列表.有能力的可以自己改一下 You-Get 哈.

    斗鱼等直播平台也完全没问题,需要的自己在脚本里匹配网址即可

    本来 exe 只有 10kb 左右,添了俩图标变好大,而且自己不会删好尴尬...

    21 条回复    2017-07-11 20:41:59 +08:00
    shoaly
        1
    shoaly  
       2017-01-14 11:04:24 +08:00
    http://oss.1024it.cn/section1/20170114/png/ce9c53676bbaa77c6bf8042dd911caf9.png
    这种是我自用的, 没做楼主那么复杂, c#那个 form 只响应 ctrl+v 和 直接拖拽 url 的事件, 然后调用 you-get..
    所以比楼主的多一步拖拽, 不用点进详情页面那一下 :)
    shoaly
        2
    shoaly  
       2017-01-14 11:08:51 +08:00
    目前 you-get 看视频有 2 个问题
    1 youku 那边 6 分钟就会拆出来一段, 所以我看一些美剧长短的片子的时候, 经常播放列表到了 第 3 4 个的时候就会中断
    2 即便是短的视频, 每次切换播放列表的时候会卡那么 1 2 秒(根据网速而定), 这地方要是能自动缓存下一个就好了
    xiaocsl
        3
    xiaocsl  
    OP
       2017-01-14 11:08:55 +08:00
    @shoaly 稍微改一下脚本,也完全可以不进入详情页.操作更隐式.都有优缺点哈.
    ashfinal
        4
    ashfinal  
       2017-01-14 13:08:49 +08:00
    macOS 上不几行就可以撸个 workflow ,不过我调的 youtube-dl , you-get 问题是不会自动分段组合。
    使用时直接按 cmd+u ,回车了事了。自己在用,没发出来。
    czmecho
        5
    czmecho  
       2017-01-14 13:12:27 +08:00
    有意思,鉴于优酷作为国内几乎是体验最垃圾的视频网站,用这方法确实不错。
    JackBlack2006
        6
    JackBlack2006  
       2017-01-14 13:17:19 +08:00   ❤️ 1
    @xiaocsl 我用的这个方法 http://www.jianshu.com/p/a4dddbd39d4d?nomobile=yes 不过不知道 Chrome 系能不能用,也许楼主的可以

    @ashfinal 能不能分享 workflow 看看, open with 在 OS X 下面只能支持.app , automator 我也没成功过
    xiaocsl
        7
    xiaocsl  
    OP
       2017-01-14 13:37:10 +08:00
    @JackBlack2006 更简洁的办法哈.看了下发现自己还有个逗逼的地方,哈哈.好尴尬.不过我这个扩展性更高哈 >_<|||
    JackBlack2006
        8
    JackBlack2006  
       2017-01-14 13:40:54 +08:00
    @xiaocsl 我看了代码和演示视频,很不错,但是在哪儿可以自己改成 mpv 呢?
    leafleave
        9
    leafleave  
       2017-01-14 13:44:49 +08:00 via Android
    同常用 potplayer ,但小白不会改-_-||,养肥了再用
    Haiwx
        10
    Haiwx  
       2017-01-14 13:58:59 +08:00
    OpenWith +1
    zhangfei
        12
    zhangfei  
       2017-01-15 19:23:05 +08:00   ❤️ 2
    @shoaly 如果是 mpv 的话,可以加参数
    you-get -p "mpv --cache-seek-min=300 --merge-files" http://www.acfun.cn/v/ac3262317
    这样会同时下载所有分段,播放下一个分段时不会卡一下
    nidhogger
        13
    nidhogger  
       2017-01-17 19:22:00 +08:00
    win10 64bit chrome ,打开页面一闪而过,无法调出 vlc,请问通常是什么问题?
    单独用 you-get 可以调用 vlc 播放 youku 视频。
    nidhogger
        14
    nidhogger  
       2017-01-17 22:10:42 +08:00
    @shoaly 可否共享一下,一直想找类似的护理,没有找到过
    xiaocsl
        15
    xiaocsl  
    OP
       2017-01-19 00:21:04 +08:00
    @nidhogger 注释掉 Tampermonkey 脚本里的最后一行
    setTimeout("window.close()",100);
    然后再执行,弹出是否打开软件时.勾选记录.之后应该就正常了.就可以取消掉最后一行的注释了.

    另外 vlc 的环境变量记得自己添加.
    ixinshang
        16
    ixinshang  
       2017-01-20 12:00:03 +08:00 via Android
    -x 无法使用袋里下载油管视频 现在在外面,没法详细说😓
    lantianqiren
        17
    lantianqiren  
       2017-07-11 19:30:23 +08:00
    @xiaocsl 大神你好,最近也在折腾这个调用本地播放器,
    您的软件打开后,写入注册表,我点写入毫无反应,

    我按照步骤,点开网页视频,你那个软件有提示,但是仍然无法调用出 VLC 播放器,
    但是单独用 youget 是可以用 VLC 播放的
    是不是因为注册表没写入进去的原因?有手工添加进去注册表的方法么?
    xiaocsl
        18
    xiaocsl  
    OP
       2017-07-11 19:47:55 +08:00
    lantianqiren
        19
    lantianqiren  
       2017-07-11 19:48:50 +08:00
    github.com 在您上面留言啦
    lantianqiren
        20
    lantianqiren  
       2017-07-11 19:59:52 +08:00
    @xiaocsl 很尴尬,本人小白,折腾好几天了,没弄好
    1.能帮忙改一下 PotPlayer 然后打包成 exe 么?

    还有你那个写入注册表的工具 我点写入注册表 没反应!各种折腾还是没反应!
    请问有手动导入的方法么?

    就是最后一步调不出播放器来

    http://i2.kiimg.com/1949/34f810da4edb7725.png

    一开始这个工具也没显示的

    我把 Tampermonkey 脚本里最后一行 setTimeout ( “ window.close ()”,100 ); 去掉了

    就可以弹出来了,只是会出来一个什么不能为空的提示 倒是不到影响点


    还有爱奇艺 貌似失效了 不会弹出窗口了

    --
    虽然对您来说是很简单的代码,可是对很多人来说是很需要的,麻烦您如果有时间可以更新一下额

    谢谢了
    lantianqiren
        21
    lantianqiren  
       2017-07-11 20:41:59 +08:00
    @xiaocsl 还写了点文字发到您的 github 上了,有时间您看看吧,
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5969 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 03:16 · PVG 11:16 · LAX 19:16 · JFK 22:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.