背景
近幾年直播行業快速發展,門檻也越來越低,越來越的人涌入直播大軍。不得不說,直播不僅帶來了更多的娛樂消遣,還提供了一個新型的就業方式。
說起直播的類型,有一個非常小眾的娛樂直播,沒有主播,全靠觀眾的彈幕互動。比如:直播修仙,觀眾發彈幕進入修仙,就可以看到自己的打坐小人,然后屏幕各種隨機事件,送主播禮物可以獲取各種道具。近期在微信刷視頻號的時候,發現了好多類似的互動直播,有云蹦迪和各種互動游戲。
今天我們只聊技術,互動直播平臺沒有提供相關的 API 如何通過觀眾的評論來互動的?
實現原理
這里以微信視頻號直播為例,介紹一種獲取直播事件消息的方法,當然方法也適用于類似的其他平臺。
視頻號開啟直播的時候在視頻號的 Web 管理后臺,會同時看到觀眾發送的評論和產生的其他互動。那么只需要通過開發一個瀏覽器插件就可以實現實時獲取評論信息。這里我們 通過 WebView2 來獲取請求評論的響應內容來實現。
實現步驟
首先創建一個 WPF 應用,添加?Microsoft.Web.WebView2
?包,然后頁面添加WebView2
組件,首頁直接為視頻號管理后臺。
<Grid><Wpf:WebView2 Source="https://channels.weixin.qq.com/platform/live/liveBuild" MinWidth="800" MinHeight="500" Name="webView"/>
</Grid>
在WebView2
初始化完成后綁定WebResourceResponseReceived
事件。此事件可以獲取到所有請求的內容,這里只需要獲取/mmfinderassistant-bin/live/msg
的鏈接請求即可,然后獲取請求返回的內容。
public MainWindow()
{InitializeComponent();webView.CoreWebView2InitializationCompleted += WebView_CoreWebView2InitializationCompleted;
}private void WebView_CoreWebView2InitializationCompleted(object? sender, Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs e)
{webView.CoreWebView2.WebResourceResponseReceived += CoreWebView2_WebResourceResponseReceivedAsync;
}private async void CoreWebView2_WebResourceResponseReceivedAsync(object? sender, CoreWebView2WebResourceResponseReceivedEventArgs e)
{if (e.Request.Uri.EndsWith("/mmfinderassistant-bin/live/msg") && e.Response != null && e.Response.StatusCode==200){Stream content = await e.Response.GetContentAsync();string jsonText = new StreamReader(content).ReadToEnd();var list = ToLiveMsg(jsonText);}
}
以下是內容的處理。
public List<LiveMsg> ToLiveMsg(string str) {JsonNode jsonNode = JsonNode.Parse(str)!;var res = new List<LiveMsg>();var dataInfo = jsonNode["data"];if (dataInfo is null) return res;if (dataInfo["msgList"] is null) return res;foreach (var item in dataInfo["msgList"]!.AsArray()){var msg = JsonSerializer.Deserialize<LiveMsg>(item);Debug.Print(msg.ToString());res.Add(msg!);}return res;
}/// <summary>
/// 直播互動消息內容
/// </summary>
/// <param name="nickname">昵稱</param>
/// <param name="headUrl">頭像URL</param>
/// <param name="content">消息內容</param>
/// <param name="type">消息類型</param>
/// <param name="username">用戶ID</param>
/// <param name="clientMsgId">消息ID</param>
public record LiveMsg(string nickname,string headUrl,string content,int type,string username,string clientMsgId);
最后
這里介紹了評論的獲取方式,點贊和禮物的消息,可以通過類似的方式審查請求獲取到對應的內容。本文雖以互動直播為例,但主要為介紹如何使用.NET 的 WebView2 獲取請求的響應內容。如果你對這種互動直播感興趣可以通過 .NET 技術自己開發一個新的互動直播模式。