• 网页flv下载探索_1


    初始想法

    最近看了一个优酷视频(非优酷网站,最终地址指向优酷),用chrome开发者工具,可找到flv地址如下,简单摘录如下:

    http://27.221.100.104/657D4D2878C3382C78116A3BA7/0300011D10570ECAA905BE2D9B7D2F338C9CFD-A474-20BA-9114-E91A51D93FA9.flv.ts?ts_start=200&ts_end=204&ts_seg_no=345&ts_keyframe=0


    http://27.221.35.80/69810A0728A23382C6B5ABA374C/0300011D11570ECAA905BE2D9B7D2F338C9CFD-A474-20BA-9114-E91A51D93FA9.flv.ts?ts_start=30&ts_end=40&ts_seg_no=349&ts_keyframe=0
    http://27.221.35.80/69810A0728A23382C6B5ABA374C/0300011D11570ECAA905BE2D9B7D2F338C9CFD-A474-20BA-9114-E91A51D93FA9.flv.ts?ts_start=40&ts_end=50&ts_seg_no=350&ts_keyframe=0
    http://27.221.35.80/69810A0728A23382C6B5ABA374C/0300011D11570ECAA905BE2D9B7D2F338C9CFD-A474-20BA-9114-E91A51D93FA9.flv.ts?ts_start=50&ts_end=60&ts_seg_no=351&ts_keyframe=0


    http://27.221.100.83/65811F4F673C4C842B413F84911/0300011D17570ECAA905BE2D9B7D2F338C9CFD-A474-20BA-9114-E91A51D93FA9.flv.ts?ts_start=70&ts_end=80&ts_seg_no=471&ts_keyframe=0
    http://27.221.100.83/65811F4F673C4C842B413F84911/0300011D17570ECAA905BE2D9B7D2F338C9CFD-A474-20BA-9114-E91A51D93FA9.flv.ts?ts_start=70&ts_end=80&ts_seg_no=471&ts_keyframe=0

    http://182.118.58.54/698169CC4CB53C81CB279BF392A/0300011D1A570ECAA905BE2D9B7D2F338C9CFD-A474-20BA-9114-E91A51D93FA9.flv.ts?ts_start=90&ts_end=100&ts_seg_no=533&ts_keyframe=0

    可得出如下结果:

    1. 每一地址下有单独一段flv,直接在网页中输入网址(截止flv.ts),可直接下载整个flv视屏。后边的ts_start/ts_end/ts_seg_no只是http申请一个数据帧。

    http://182.118.58.54/698169CC4CB53C81CB279BF392A/0300011D1A570ECAA905BE2D9B7D2F338C9CFD-A474-20BA-9114-E91A51D93FA9.flv.ts

    2. flv的名字有‘Dxx’决定,适配到另一IP不能找到文件。

    3. 每段flv完成后,都会有一申请网页crossdomain.xml。

    网页视频就是一个一个flv组成的,可通过网页直接下载单个flv,然后用软件组合成一个完整视频,以加快速度。

    现在难点:

    1. 怎样获取详细flv地址,以加以下载。

    2. 查看到flv地址通过chrome开发工具,怎样通过数据包查看到数据内容呢?

    注:网络上都提到“硕鼠”,但其仅支持大的视频网站,怎样能达到全部视频呢?

    后思:怎样获取网页视频地址呢?

    1. 直接从网页中提取网页视频地址,直接用浏览器文本查看可获取视频地址。

    2. 若视频由多个下载地址组成,则只能下载一次视频,记录下所有地址,放到数据库中。当要获取地址时,直接从数据库中获取;若有变动,直接在云端下载视频测试,然后给出地址,此方法应该不常用,因为给出的地址即使无效也没有关系。

    迅雷之所以下载快,是因为获取了视频的多个地址,然后保存到迅雷数据库中,当要下载时,开多个进程从多个地址下载,这个速度更快。之所以有些地址不能用,原因一地址无效(服务器地址主动改变,或迅雷服务器地址未更新)或地址主机已停机(下载当时)。我想这也是所有下载工具通用的方法:数据库记录可下载地址,匹配文件名或视频文件头找到地址,多进程从不同地址下载视频,然后合成视频。

    视频格式及协议

    视频直播有两个协议:RTMP和HLS。参考:流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)

    RTMP协议用于播放.flv视频,adobe开发。参考:RTMP流媒体播放过程

    HLS协议HTTP Live Streaming用于播放.ts视频,apple开发。关键组成有m3u8和多个视频分片.ts,其中m3u8指定视频分片的地址。参考:

    HLS协议介绍   

    HLS-m3u8播放列表和ts切片

    hls之m3u8、ts流格式详解

    m3u8插件使用示例

    跨域问题

    上面提到文件crossdomain.xml是跨域策略文件。Web站点通过crossdomain.xml文件配置提供允许的域跨域访问本域内容的权限。是adobe flashplayer的运行策略。

    这是Flash安全沙盒机制:在Flash跨域访问时——比如www.ddonwi.com/loader.swf文件要加载hi.ddonwi.com/beauty1.swf文件,就属于跨域(名)访问——Flash要求通过如下的策略来确定信任关系:

    1、被访问域名下的crossdomain.xml文件

    以之前提的例子为例:loader.swf文件要加载beauty1.swf文件时,会先拉取hi.ddonwi.com/crossdomain.xml文件,这个文件里会列出允许访问的域名,比如hi.ddonwi.com/crossdomain.xml文件的格式可能如下:

    <?xml version="1.0"?>
    <cross-domain-policy>
    <allow-access-from domain="www.ddonwi.com" />
    </cross-domain-policy>

    它说明了www.ddonwi.com是可信任的域名。

    如果访问者的域名不在再被访者的crossdomain.xml的信任名单内,Flash就不会去加载文件。

    2、不仅如此,Flash还有进一步的保护措施,被拉取的swf文件中还需要调用Security.allowInsecureDomain()声明允许的访问者的域名。如果被访者没有写这个信任策略,swf文件可以被下载,但不能被执行。

    参考:关于跨域策略文件crossdomain.xml文件  Cross-domain 策略文件详解_Flash教程

  • 相关阅读:
    集合框架
    hashtable
    测试3
    opcache的威力
    信息的信息
    php blog to explore
    BEHAT安装
    Failed to start: SocketListener0@0.0.0.0:4444
    模板方法设计模式
    mysqldump
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/6260757.html
Copyright © 2020-2023  润新知