zoukankan      html  css  js  c++  java
  • 利用VLC解码youtube视频链接

    一、需求

    现在有youtube视频播放链接(I),需要得到可以直接播放的视频链接(O)。

    输入链接(I):

    https://www.youtube.com/watch?v=xAsjRRMMg_Q

    输出链接(O):

    http://r14---sn-a5m7ln76.googlevideo.com/videoplayback?ip=199.231.215.246&key=yt5&expire=1425392524&mt=1425370849&mv=m&ms=au&sparams=cnrycms%2Cdur%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Cmime%2Cmm%2Cms%2Cmv%2Cpl%2Cratebypass%2Csource%2Cupn%2Cexpire&id=o-APmt7eobtj9jn-nwJYcAfq33J8Hdpa1kJ61DKySGOmbQ&upn=NS5UYm0pT40&dur=60.116&itag=22&pl=24&source=youtube&fexp=905657%2C907263%2C917000%2C927622%2C930811%2C936100%2C9406921%2C9407524%2C943917%2C947225%2C947240%2C948124%2C951703%2C952302%2C952612%2C952901%2C955301%2C957201%2C958504%2C959701&mime=video%2Fmp4&signature=30CDD93C439D1674F444A45E7C4ADD1838D229CA.91BE6B1991640088E635B379664F4E7EF3DF6662&mm=31&sver=3&ratebypass=yes&cnrycms=yes&ipbits=0&initcwndbps=13583750

    因为开源播放器VLC中有播放youtube视频的相关实现,因此希望直接利用VLC实现youtube的视频解码。

    二、分析

    VLC版本:vlc-2.1.5。

    VLC通过lua脚本实现youtube视频解码,具体文件是/vlc-2.1.5/share/lua/playlist/youtube.lua。

    而youtube.lua的相关解析函数和结果由VLC的lua模块通过demux.c文件调用。

    因此思路便是在VLC的入口函数/vlc-2.1.5/bin/vlc.c中引入输入链接,将其传递给youtube.lua和demux.c实现解析,然后将解析结果从demux.c传回入口函数vlc.c,从而获得我们需要的youtube视频播放链接。

    三、实现

    改动了VLC的4个文件

    /vlc-2.1.5/share/lua/playlist/youtube.lua
    /vlc-2.1.5/modules/lua/demux.c
    /vlc-2.1.5/bin/vlc.c
    /vlc-2.1.5/bin/Makefile

    新添加了7个依赖软件包

    lua-5.1.5
    gmp-4.3.1
    gnupg-2.0.26
    nettle-2.7.1
    gnutls-3.3.12
    libgcrypt-1.6.2
    libgpg-error-1.17

    四、流程

    1、在VLC入口函数中添加输入链接,利用已有实例libvlc_instance_t *vlc,调用input_item_New 和 playlist_AddInput 将输入链接引入VLC;

    2、VLC运行后,会在youtube.lua中得到视频链接的解析结果,将结果赋值给新添加的全局变量path_v;

    3、在demux.c中利用C和lua混合编程提取出youtube.lua的path_v;

    4、因为VLC的主线程与和demux模块分属不同的线程,因此在这里选择使用消息队列传递链接,在demux.c中建立消息队列,压入path_v值;

    5、在vlc.c中使用与demux.c相同的消息队列获取path_v值,从而将最终结果返回至入口函数。

    6、需要修改Makefile文件通过编译。

  • 相关阅读:
    [HAOI2006] 旅行
    Vue 2 --v-model、局部组件和全局组件、父子组件传值、平行组件传值
    Flume简介及安装
    MySQL数据目录更改及相关问题解决方案
    更换gcc工具链
    支持多种类型的数据集合作为数据源
    23种设计模式--中介者模式-Mediator Pattern
    PID算法原理 一图看懂PID的三个参数
    内存四区
    趣味算法讲解
  • 原文地址:https://www.cnblogs.com/siikee/p/4311535.html
Copyright © 2011-2022 走看看