xhlove / XstreamDL-CLI

命令行版本的HLS/DASH流下载器,支持标准AES-128-CBC解密
GNU Lesser General Public License v2.1
278 stars 67 forks source link

我發現直播有兩種下載模式,而其中一種會錄製失敗。 #57

Closed MAN-GOR closed 1 year ago

MAN-GOR commented 2 years ago

我發現使用同一條命令進行直播錄製,但會有兩種不同的下載模式,使用版本是目前最新的1.4.3:

第一種模式是「即使沒有新的直播片段,程式也會下載之前已下載過的直播片段,最終導致錄製失敗」。 從下圖可見,第1-4次下載都是「3/3」,第4-8次下載都是「4/4」,最終到「5/5」時發生錯誤。 螢幕擷取畫面 2022-09-05 133652 螢幕擷取畫面 2022-09-05 133701

第二種模式是「如果沒有新的直播片段,程式就會略過下載,直到遇到新的直播片段,最後成功錄製並合併」。 從下圖可見,當沒有新的直播片段時,程式只會顯示「download start」,但並沒有顯示下載數量,所以所有直播片段都是只下載了一遍,而最後沒有發生任何錯誤。 螢幕擷取畫面 2022-09-05 133719 螢幕擷取畫面 2022-09-05 133820

xhlove commented 2 years ago

请使用GitHub Action中的最新版进行测试

对于第一种状况,你可以测试一下加上--name-from-url这个选项

另外将--live-refresh-interval调整为MPD中minimumUpdatePeriod的实际值最佳(整数)

另外的注意事项是:

MAN-GOR commented 2 years ago

請使用GitHub Action中的最新版進行測試

對於第一種狀況,你可以測試一下加上--name-from-url這個選項

另外將--live-refresh-interval調整為MPD中minimumUpdatePeriod的實際值最佳(整數)

另外的注意事項是:

  • 確保已經開播再進行下載
  • 顯式指定--live選項

測試版使用以下命令還是有機會觸發兩種下載模式,且第一種還是發生錯誤: XstreamDL-CLI_dev_2022717_205411.exe --name-from-url --select --live --live-duration "00:01:00" --name "1" --key "XXX:YYY" "ZZZ.mpd"

在發現重複下載舊片段有機會發生錯誤後,我已添加上「--live-refresh-interval」了,添加後無發生合併錯誤。 只是好像由於影片檔和音訊檔不是同步下載,有時影片檔是「3/3」,而音訊檔是「4/4」,導致聲畫不同步。 而且添加了之後,輸入串流數字後的首次下載片段還是需要等待對應秒數,能改為第2次及其後下載時才需要等待嗎? 還有「minimumUpdatePeriod」顯示「PT8S」,即是8秒吧?

另外如果沒有添加「--live-refresh-interval」,默認的下載方式可以使用第二種模式嗎,第一種模式會發生錯誤。 而且為什麼默認下載方式會有兩種不同模式的?XD

xhlove commented 2 years ago

你的意思是:同一个命令,有时候是正常的(你说的模式二),又时候是异常的(你说的模式一)

是这样吗?

我注意到你的命令中是ZZZ.mpd,这里需要说明的是,对于直播流必须使用链接而不是mpd文件

如果你说的异常是因为用的是mpd文件的话,那确实会有问题,因为使用文件的时候不知道真实的mpd链接,而为了更新新的直播流分段信息,必须要通过mpd链接来

就我遇到的样本,只有少数是会在mpd中指明mpd链接的

MAN-GOR commented 2 years ago

你的意思是:同一个命令,有时候是正常的(你说的模式二),又时候是异常的(你说的模式一)

是这样吗?

我注意到你的命令中是ZZZ.mpd,这里需要说明的是,对于直播流必须使用链接而不是mpd文件

如果你说的异常是因为用的是mpd文件的话,那确实会有问题,因为使用文件的时候不知道真实的mpd链接,而为了更新新的直播流分段信息,必须要通过mpd链接来

就我遇到的样本,只有少数是会在mpd中指明mpd链接的

是的,同一個命令,有時候是正常的,有時候是異常的。 不過現在大多數也是正常的了,兩小時前大多數是異常的。

抱歉,不太確定鏈接和mpd的分別,因為在我播放直播時,只有mpd檔、影片檔和音訊檔在不斷刷新。 假設你是指影片檔和音訊檔的鏈接的話,那豈不是要影和音分開下載嗎?

值得留意的是,在我刷新網站時,mpd檔是有兩個的,一個是沒有任何回應內容的mpd檔,另一個便是播放時不斷刷新的mpd檔。 我想你所指的「mpd文件」是指沒有任何回應內容的mpd檔? 而我所使用的是播放時不斷刷新的mpd檔鏈接。

xhlove commented 2 years ago

mpd文件 指的是访问mpd链接,将其内容保存为文件

MAN-GOR commented 2 years ago

mpd文件 指的是訪問mpd鏈接,將其內容保存為文件

突然想明白了,哈哈>_< 我所使用的是mpd鏈接而不是mpd文件,就是F12後複製鏈接到命令行的那種。

現在我再測試發現,有時候影片片段下載數是「3/3」,而音訊片段是「4/4」時,就會重複下載影片片段而發生下載失敗。 從下圖可見,第1次和第3次、第4次和第6次都是下載相同的影片片段,而音訊則無重復下載。 螢幕擷取畫面 2022-09-05 225720 反倒是沒有了早上那種「明明影和音都是3/3,但還是會重複下載而導致下載失敗」的情況。

昨天晚上沒有,不過這天早上又出現了「影和音都是3/3,但還是會重複下載」XD 難道是我測試的這個平台很特別嗎? 如果您想測試看看的話,可以試試香港的myTV SUPER裡的「明珠台」,是唯一一個不是回放模式而又免費的。 不過不是每次也會異常…

xhlove commented 2 years ago

我只能找到两个网页,搞了半天也不知道你说的直播应该是什么地址

xhlove commented 2 years ago

不过我又看了下你的错误截图,可能找到原因了,可以测试下下面的版本

MAN-GOR commented 2 years ago

不過我又看了下你的錯誤截圖,可能找到原因了,可以測試下下面的版本

這版本暫時沒再報錯了,辛苦了!

我只能找到兩個網頁,搞了半天也不知道你說的直播應該是什麼地址

至於myTV SUPER是需要登錄和香港IP才看得到,如果您後續需要的話,我有一個香港虛擬手機號註冊的帳號,可以在Discord裡發送給你

MAN-GOR commented 2 years ago

螢幕擷取畫面 2022-09-05 225720

(圖是拿之前留言的,測試版是能正常下載) 不過像是這種影片片段「3/3」,音訊片段「4/4」,是正常的嗎 因為我發現這樣的話,音頻需要提早8秒左右才能對得上影片。而因為提早了8秒的原因,最後8秒是沒有聲音的

xhlove commented 2 years ago

既然ok了那就是修好了

音视频不一定是严格按照时间切片的,所以是正常的

至于你说的这种不同步还是很奇怪的,一般开头的片段应该是同步的,就算有异常也是末尾音频或者视频缺少一点。我也分析不出来原因

nilaoda commented 1 year ago

mytvsuper的录制可以试试 N_m3u8DL-RE ,今天刚支持直播录制,测了一下似乎正常(翡翠台)

演示 ``` N_m3u8DL-RE "http://...mpd" --key kid:key --append-url-params --save-name _test --mp4-real-time-decryption --use-shaka-packager --live-real-time-merge ``` ![image](https://user-images.githubusercontent.com/20772925/190869039-68944ec5-0e4f-4857-8385-3437a8fd5078.png) ![image](https://user-images.githubusercontent.com/20772925/190869089-123eb2a8-3654-479f-8b84-bdb50187b044.png)
MAN-GOR commented 1 year ago

居然會為其他程式宣傳XD 這程式我試了試,發現直播還未支援混流,所以基本上和這程式的下載方法差不多 不過翡翠台是有回放性質的直播,無論哪個程式在錄製時都是錄回放的一開始,而不是目前最新的直播,看來只能等節目播完再下載? 目前免費直播好像只有明珠台才不是回放性質

不過在字幕方面它是比較優勢,畢竟它會把cmft字幕自動轉換為UTF8的vtt格式 而我在這程式下載字幕會轉換為mp4,而且因為myTV SUPER字幕是用ANSI格式儲存,繁體系統開啟字幕會亂碼QAQ

nilaoda commented 1 year ago

@MAN-GOR 程序逻辑是录制最后的分片,应该不会有问题才对,你用最新的版本再试试?

和这个repo的主人是朋友,否则也不会宣传 哈哈

MAN-GOR commented 1 year ago

@MAN-GOR 程序邏輯是錄制最後的分片,應該不會有問題才對,你用最新的版本再試試?

和這個repo的主人是朋友,否則也不會宣傳 哈哈

?.? 所以正常是回放性質的直播也能錄到目前最新正在直播的片段嗎? 因為我之前用你的程式和剛剛用他的最新測試版去錄「翡翠台」,我都是會錄到3小時前的片段(因為3小時是回放極限),而不是目前正在直播的片段

目前網頁版直播跳轉有BUG,可以錄製後用APP版跳轉至3小時前看是不是和自己錄製的一樣節目

nilaoda commented 1 year ago

@MAN-GOR 不清楚了 我手头的翡翠台源特意和电视对比了一下 是实时的 不是三小时前的内容

image

有关我的工具的问题可以到我的repo讨论🥱

MAN-GOR commented 1 year ago

N_m3u8DL-RE "http://...mpd" --key kid:key --append-url-params --save-name _test --mp4-real-time-decryption --use-shaka-packager --live-real-time-merge

搞懂了,是因為myTV SUPER網頁版的mpd連結上會附帶「&mode=admarker%2Cticks」(模式=廣告標記,刻度),把它刪除掉就可以錄製到當前最新的直播片段