dailymotion.lua
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:4k
源码类别:

midi

开发平台:

Unix_Linux

  1. --[[
  2.     Translate Daily Motion video webpages URLs to the corresponding
  3.     FLV URL.
  4.  $Id$
  5.  Copyright © 2007 the VideoLAN team
  6.  This program is free software; you can redistribute it and/or modify
  7.  it under the terms of the GNU General Public License as published by
  8.  the Free Software Foundation; either version 2 of the License, or
  9.  (at your option) any later version.
  10.  This program is distributed in the hope that it will be useful,
  11.  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  GNU General Public License for more details.
  14.  You should have received a copy of the GNU General Public License
  15.  along with this program; if not, write to the Free Software
  16.  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  17. --]]
  18. -- Probe function.
  19. function probe()
  20.     return vlc.access == "http"
  21.         and string.match( vlc.path, "dailymotion." ) 
  22.         and string.match( vlc.peek( 2048 ), "<!DOCTYPE.*video_type" )
  23. end
  24. function find( haystack, needle )
  25.     local _,_,ret = string.find( haystack, needle )
  26.     return ret
  27. end
  28. -- Parse function.
  29. function parse()
  30.     while true
  31.     do 
  32.         line = vlc.readline()
  33.         if not line then break end
  34.         if string.match( line, "param name="flashvars" value=".*video=" )
  35.         then
  36.             arturl = find( line, "param name="flashvars" value=".*preview=([^&]*)" )
  37.             videos = vlc.strings.decode_uri( find( line, "param name="flashvars" value=".*video=([^&]*)" ) )
  38.        --[[ we get a list of different streams available, at various codecs
  39.             and resolutions:
  40.             /A@@spark||/B@@spark-mini||/C@@vp6-hd||/D@@vp6||/E@@h264
  41.             Not everybody can decode HD, not everybody has a 80x60 screen,
  42.             H264/MP4 is buggy , so i choose VP6 as the highest priority
  43.             Ideally, VLC would propose the different streams available, codecs
  44.             and resolutions (the resolutions are part of the URL)
  45.             For now we just built a list of preferred codecs : lowest value
  46.             means highest priority
  47.          ]]
  48.             local pref = { ["vp6"]=0, ["spark"]=1, ["h264"]=2, ["vp6-hd"]=3, ["spark-mini"]=4 }
  49.             local available = {}
  50.             for n in string.gmatch(videos, "[^|]+") do
  51.                 i = string.find(n, "@@")
  52.                 if i then
  53.                     available[string.sub(n, i+2)] = string.sub(n, 0, i-1)
  54.                 end
  55.             end
  56.             local score = 666
  57.             local bestcodec
  58.             for codec,_ in pairs(available) do
  59.                 if pref[codec] == nil then
  60.                     vlc.msg.warn( "Unknown codec: " .. codec )
  61.                     pref[codec] = 42 -- try the 1st unknown codec if other fail
  62.                 end
  63.                 if pref[codec] < score then
  64.                     bestcodec = codec
  65.                     score = pref[codec]
  66.                 end
  67.             end
  68.             if bestcodec then
  69.                 path = "http://dailymotion.com" .. available[bestcodec]
  70.             end
  71.         end
  72.         if string.match( line, "<meta name="title"" )
  73.         then
  74.             name = vlc.strings.resolve_xml_special_chars( find( line, "name="title" content="(.-)"" ) )
  75.         end
  76.         if string.match( line, "<meta name="description"" )
  77.         then
  78.             description = vlc.strings.resolve_xml_special_chars( vlc.strings.resolve_xml_special_chars( find( line, "name="description" lang=".-" content="(.-)"" ) ) )
  79.         end
  80.         if path and name and description and arturl then break end
  81.     end
  82.     return { { path = path; name = name; description = description; url = vlc.path; arturl = arturl } }
  83. end