私は、httpストリームからYouTube動画を再生するソリューションを見つけようとしています。埋め込みプレーヤーまたはウェブサイト経由ではありません。その理由は、埋め込まれることを防ぐアプリ内でローカルにクリップを再生する必要があるからです。 したがって、httpストリームを取得するための最初のタスクは簡単に解決できます。 YouTubeExtractorを使用してください。たとえば、このYouTubeのURLから https://www.youtube.com/watch?v=31crA53Dgu0抽出されたURLからYouTube動画をストリーム
YouTubeExtractorは、動画をダウンロードするためのURLを抽出します。あなたが見ることができるように、具体的な.mp4または.movファイルへのパスはありません。 IPにもバインドされているので、あなたの側でURLは機能しません。その後
private string ExtractVideoUrl(string youtubeUrl)
{
IEnumerable<VideoInfo> videoInfos = DownloadUrlResolver.GetDownloadUrls(youtubeUrl, false);
var video = videoInfos.First();
if (video.RequiresDecryption)
{
DownloadUrlResolver.DecryptDownloadUrl(video);
}
return video.DownloadUrl; // videoInfos.First().DownloadUrl;
}
このlibには以下のコードを使用してビデオをダウンロードします。興味深い瞬間は、ストリームを読んで、YouTubeのビデオの内容をファイルに書き込むことです。
var request = (HttpWebRequest)WebRequest.Create(this.Video.DownloadUrl);
if (this.BytesToDownload.HasValue)
{
request.AddRange(0, this.BytesToDownload.Value - 1);
}
// the following code is alternative, you may implement the function after your needs
using (WebResponse response = request.GetResponse())
{
using (Stream source = response.GetResponseStream())
{
**// HOW to Play source stream???**
using (FileStream target = File.Open(this.SavePath, FileMode.Create, FileAccess.Write))
{
var buffer = new byte[1024];
bool cancel = false;
int bytes;
int copiedBytes = 0;
while (!cancel && (bytes = source.Read(buffer, 0, buffer.Length)) > 0)
{
target.Write(buffer, 0, bytes);
....
一般的な質問は、そのオープンストリームからビデオを再生する方法です。たとえば、Chrome、Firefox、KMPlayerはこれを簡単に実行します。ブラウザはビデオタグで簡単なページを生成するので、JSを通してプレイヤーを管理するのは簡単です。しかし、... WebBrowserの内部コントロールでは、ファイルをダウンロードすることはできません。私はCEFSharp(Chrome埋め込みフレームワーク)を試してみましたが、そこに運がありません。 多分、ストリーミングビデオができる良いビデオプレーヤーWPFライブラリを知っている人はいますか?私もVLC.wpfとShockwave Flashを試しましたが、この抽出されたURLにはまだ不満があります。検索はたくさんありますが、今は不十分です。