国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python爬取m3u8格式的視頻

這篇具有很好參考價值的文章主要介紹了Python爬取m3u8格式的視頻。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

聲明:本文只作學習研究,禁止用于非法用途,否則后果自負,如有侵權,請告知刪除,謝謝!

背景

在某一天,群友分享了一些小視頻,手機端可以正常觀看,但是到了電腦上,輸入網址之后會下載下來一個m3u8格式的文件,這就讓我犯了難。所以我就研究了一下,并使用Python來將該文件爬取了下來。
參考文章如下:
西北亂跑娃 — python m3u8庫
Python 手把手實現M3U8視頻抓取
python實戰(zhàn)案例:解析m3u8視頻文件
python爬取m3u8視頻教程

1.文件信息

鏈接圖如下
Python爬取m3u8格式的視頻
下載下來呢,也是m3u8文件,一種非常特殊的文件。我們點擊查看,就可以查看到
3u8的一些信息
我在這里屏蔽了網址,免得暴露我在下載什么hhhhh

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:2
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="https://h09.t*********wc.com/20220703/9K***sCCV/30**0kb/hls/key.key"
#EXTINF:1.16,
https://h09.*********.com/20220703/9K***V/300**b/hls/Foszl**SV.ts
#EXTINF:1.2,
https://h09.**********.com/20220703/9KR**CV/30**kb/hls/b7tCBoOu.ts

經過查閱資料,該文件的我信息大致如下

# EXTM3U:.m3u8文件的格式定義
# EXT-X-KEY: 密鑰的信息
# METHOD: 加密的方法,這里采用的是AES-128的加密方式
# URI: 密鑰的地址,需要獲取訪問得到密鑰的信息
# IV: 偏移量,AES加密的方法,通過這個密鑰就可以解密,獲取正確的視頻信息

那什么是m3u8呢?

M3U8 是 Unicode 版本的 M3U,用 UTF-8 編碼?!癕3U” 和 “M3U8” 文件都是蘋果公司使用的 HTTP Live
Streaming(HLS) 協議格式的基礎,這種協議格式可以在 iPhone 和 Macbook 等設備播放。

通俗點可以理解為,一個視頻文件拆分為多個.ts片段的視頻文件,然后將所有的ts合成MP4文件就可以播放了。但是為什么有些在線或者m3u8的播放器會用不了呢?由于大部門的m3u8生成的結果不太一致,與該播放器的解密格式不一樣,所以導致打開。

一般來說,在m3u8文件中都會有key以及AES的偏移量IV,我們根據其中的URL來獲取他們,之后我們根據m3u8文件中的.ts的文件URL來下載視頻片段,解密之后拼接成mp4的文件就行了。

2.構造請求獲得m3u8文件

我們已經有了m3u8文件的URL,因此免去了抓包這一項工作。我們直接構造response即可

def get_file(url,count):
    resp=requests.request('GET',url)
    # print(resp.content)
    with open('./m3u8_link/'+str(count)+'.m3u8','wb') as f:
        f.write(resp.content)

3.獲得m3u8文件中的key以及偏移量IV

根據我們上一步獲得的文件內容,這里我選擇使用正則來匹配出來key以及IV對應的URL,之后在構造resp即可獲得其內容。
這里要說明一下,我們的m3u8文件中AES加密的時候是沒有使用IV的,所以使用時實際上令IV=Key
.*?,經典的正則在爬蟲中的使用了。

def get_key(path):
    with open(path, 'rb') as f:
        file_content=str(f.read())
    print(file_content)
    key_link = re.search('URI=\"(.*?)\"', file_content).group(1)
    key=requests.request('GET',key_link).content
    return key

4.獲取.ts文件鏈接

其實這一步也可以使用正則來繼續(xù)匹配,但是我偷了一點小懶,使用了m3u8庫來進行匹配。

import m3u8
def get_ts_list(path):
    m3u8_obj = m3u8.load(path)
    ts_urls = []
    for i, seg in enumerate(m3u8_obj.segments):
        # if i<=100:
            ts_urls.append(seg.uri)
    # print(ts_urls)
    return ts_urls

經過這一步之后,我們就獲得了m3u8文件中整個.ts文件對應的URL,接下來只要根據.ts文件對應的URL來獲取視頻片段,解密之后拼接就可以了。

5.進行解密

解密的庫 pip install pycryptodome
就是一些常規(guī)的AES解密操作了,我們獲得的m3u8文件中沒有IV偏移量,這里用使iv=key即可。注意,AES要補0的,補字節(jié)0到16的倍數。

from Crypto.Cipher import AES
sprytor = AES.new(key, AES.MODE_CBC,iv)
# 獲取ts文件二進制數據
ts = requests.get(ts_url).content
# 密文長度不為16的倍數,則添加b"0"直到長度為16的倍數
# decrypt方法的參數需要為16的倍數,如果不是,需要在后面補二進制"0"
while len(ts) % 16 != 0:
    ts += b"0"
with open(name, "ab") as file:
    file.write(sprytor.decrypt(ts))

6.下載拼接

之后下載以字節(jié)流的形式進行拼接就可以了。

def download(ts_urls,key,iv,count,path):
    name=path
    print("視頻",count,"需要下載的文件長度為", len(ts_urls))
    for i in range(len(ts_urls)):
        ts_url=ts_urls[i]
        if i%10==0:
            print("視頻",count,"當前下載進度:",str(i/len(ts_urls)*100)[:4],'%')
        # 如果連接末尾沒有.ts手動加上
        ts_name = ts_url.split("/")[-1] + '.ts'  # ts文件名
        # 解密,new有三個參數,
        # 第一個是秘鑰(key)的二進制數據,
        # 第二個使用下面這個就好
        # 第三個IV在m3u8文件里URI后面會給出,如果沒有,可以嘗試把秘鑰(key)賦值給IV
        sprytor = AES.new(key, AES.MODE_CBC,iv)
        # 獲取ts文件二進制數據
        ts = requests.get(ts_url).content
        # 密文長度不為16的倍數,則添加b"0"直到長度為16的倍數
        while len(ts) % 16 != 0:
            ts += b"0"
        # 寫入mp4文件
        with open(name, "ab") as file:
            # # decrypt方法的參數需要為16的倍數,如果不是,需要在后面補二進制"0"
            file.write(sprytor.decrypt(ts))
    print(name, "下載完成")

其實還可以使用多線程優(yōu)化,完整項目請見本人的github。文章來源地址http://www.zghlxwxcb.cn/news/detail-412529.html

到了這里,關于Python爬取m3u8格式的視頻的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • vue項目如何播放m3u8格式視頻

    vue項目如何播放m3u8格式視頻

    在node_modeols里面找到@easydarwin下的dist/compent/EasyPlayer-lib.min.js和EasyPlayer.wasm兩個文件復制到pubilc目錄下 引入 在components中 在模板中

    2024年02月15日
    瀏覽(23)
  • 原生小程序實現視頻監(jiān)控(m3u8格式)

    本文主要實現實時播放監(jiān)控視頻,基于原生微信小程序實現 1、在.wxml文件代碼,視頻一定要寫寬高,不然可能顯示不出來,以下屬性介紹 src:視頻地址, controls:是否顯示默認播放控件(播放/暫停按鈕、播放進度、時間) binderror:?視頻播放出錯時觸發(fā) show-center-play-btn:是

    2023年04月08日
    瀏覽(23)
  • video插件播放m3u8格式視頻(存原生)

    這里使用原生的javascript實現m3u8格式視頻播放。 使用了包括video.min.js庫和HLS插件。 在上面代碼中,首先引入了video.min.js庫和對應的播放器樣式video-js.css,還引入了videojs-contrib-hls.min.js庫(引入順序考慮優(yōu)先放到頁面加載之前)。 之后,創(chuàng)建一個video標簽,并指定source的src屬性為

    2024年02月13日
    瀏覽(27)
  • 視頻爬蟲:解析m3u8文件 python m3u8庫,m3u8文件中.ts視頻流的解密下載

    視頻爬蟲:解析m3u8文件 python m3u8庫,m3u8文件中.ts視頻流的解密下載

    這里需要引用的庫是: from Crypto.Cipher import AES 有坑哈, python3.0 之后直接安裝crypto你會發(fā)現不管怎么著都會報錯。 經過查找資料找到了原因,原來是20年之后crypto已經被pycryptohome替換掉啦, 如果之前安裝過crypyo 活pycrypto需要先卸載 然后再安裝 pycryptohome 就可以啦 首先我們需

    2024年02月14日
    瀏覽(30)
  • Uniapp H5 播放m3u8、flv格式視頻

    Uniapp H5 播放m3u8、flv格式視頻

    簡述一下業(yè)務需求,僅僅是需要在H5頁面播放m3u8格式的視頻,但是Uniapp官方提供的video組件在H5端不支持m3u8格式的視頻播放,所以需要使用第三方庫來播放,這里我使用的是MuiPlayer,但是貌似MuiPlayer的官方文檔沒有過多提及UniApp的用法,由于MuiPlayer默認支持mp4格式播放,所以

    2024年04月15日
    瀏覽(29)
  • vue項目中使用m3u8格式播放大視頻

    vue項目中使用m3u8格式播放大視頻

    網站中播放大視頻時經??D,無法順利播放,在查找解決方案時發(fā)現很多文章建議使用m3u8流媒體播放代替MP4播放,做了下測試,現總結記錄下測試過程中遇到的問題與解決辦法。 1.使用ffmpeg做視頻轉換 1)下載ffmpeg ?FFmpeg github 2)在環(huán)境變量path中加入配置,以便在控制臺使

    2024年02月09日
    瀏覽(32)
  • 使用ffmpeg將視頻轉成HLS(m3u8)格式

    ??HLS (HTTP Live Streaming)是蘋果推出的視頻流協議,HLS格式的視頻包含一個m3u8文本文件,以及眾多的.ts的視頻片段,而m3u8文本文件的作用就是將這些ts片段索引起來。 因為HLS協議是將視頻切分成很多小的ts片段,這些小片段很適合放到cdn上,有很多視頻文章都使用了hls格式傳

    2024年02月13日
    瀏覽(23)
  • 在vue中使用dplayer播放hls m3u8格式視頻

    在vue中使用dplayer播放hls m3u8格式視頻

    Dplayer 官方文檔地址 Dplayer官方地址 雖然在vue中有vue-dplayer但卻沒有對hls進行很好的支持 所以建議還是使用Dplayer 在組件中引入 播放m3u8格式的視頻需要框選部分 – 建議查看官方文檔MSE支持 切換視頻 切換視頻需要用到 switchVideo() api 方便大家復制 部分片段

    2024年02月13日
    瀏覽(21)
  • vue使用video.js實現播放m3u8格式的視頻

    vue使用video.js實現播放m3u8格式的視頻

    我使用的video.js版本如下: 在components下新建一個VideoPlayer文件夾 index如下: ?直接把地址傳給sourceUrl即可

    2024年02月12日
    瀏覽(25)
  • 【vue】前端頁面點擊按鈕彈窗播放m3u8格式視頻

    【vue】前端頁面點擊按鈕彈窗播放m3u8格式視頻

    最終效果: 1.表格操作列 2.initVideo方法 3.彈出層代碼 4.showAll_dialog樣式 5.第2步跳轉的video.html頁面代碼,用dplayer播放的,放在項目根目錄的public文件夾即可

    2024年02月04日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包