簡體   English   中英

CefSharp 獲取 Header 對 .m3 文件的響應

[英]CefSharp get Header Response for .m3 file

我正在通過 *.m3u4 或 8 擴展名查找視頻文件,但我從未獲得擴展名?

在此處輸入圖像描述

Func<NameValueCollection, bool> headersProcessingFunc = new Func<NameValueCollection, bool>(ProcessHeaders);

chromiumWebBrowser1.RequestHandler = new HeadersProcessingRequestHandler(headersProcessingFunc);

private static bool ProcessHeaders(NameValueCollection headers)
{

foreach(string header in headers)
if (headers[header].Contains(".m3"))
MessageBox.Show(header + "\r\n" + headers[header]);
return true;
}

我確實得到了其他文件,“內容”等等:

alt-svc
cf-cache-status
cf-ray
content-encoding
content-type
date
nel
report-to
server
vary
x-frame-options

我知道這可能有點爭議,這篇文章,但是嘿,這是一個技術問題,它是有效的,人們應該了解這類事情,並且能夠使用它:我知道你需要 CefSharp 來擁有編解碼器已啟用: 123

當然,重點是能夠使用 ffmpeg 獲取鏈接並下載視頻或音頻。

您想要掛鈎對有趣請求的響應返回的事件。 首先定義處理程序以查看每個請求並決定是否應將其響應流式傳輸到您的自定義處理程序:

    public class MyRequestHandler : CefSharp.Handler.RequestHandler
    {
        protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
        {
            if (request.Url.EndsWith(".m3u4"))
            {
                return new MyResourceRequestHandler();
            }
            return null;
        }
    }

然后附加到您的瀏覽器:

chromiumWebBrowser1.RequestHandler = new MyRequestHandler();

您可能需要一組更復雜的規則來匹配,但如果您可以識別要攔截和下載的所需資源,則只會為這些調用 MyResourceRequestHandler。

然后調用自定義資源請求處理程序的代碼以獲得有趣的響應。 如果您希望數據流式傳輸給您,請添加一個過濾器,然后在響應完成后獲取 stream。

    public class MyResourceRequestHandler : CefSharp.Handler.ResourceRequestHandler
    {
        private readonly System.IO.MemoryStream responseData = new System.IO.MemoryStream();

        protected override IResponseFilter GetResourceResponseFilter(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response)
        {
            return new CefSharp.ResponseFilter.StreamResponseFilter(responseData);
        }
        
        protected override void OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength)
        {
            var bytes = responseData.ToArray();
            Console.WriteLine("Got {0} for {1}", responseData.Length, request.Url);
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM