- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 WPF 应用程序中的多个实例中使用 LibVLC 播放 YouTube。这可能在 75% 的时间里工作正常,但流会卡住一两秒钟,而在另外 25% 的时间里会被像素化。这似乎是随机的。
这是我的代码:
public async void PlayUri(string path, bool isMuted, bool repeat)
{
await Dispatcher.InvokeAsync(new Action(async () =>
{
Core.Initialize();
using (LibVLC libVLC = new LibVLC(MediaOptions(repeat)))
{
using (var media = new Media(libVLC, path, FromType.FromLocation))
{
await media.Parse(MediaParseOptions.ParseNetwork);
vlcPlayer = new MediaPlayer(media.SubItems.FirstOrDefault());
if (!repeat)
vlcPlayer.EndReached += (sender, args) => ThreadPool.QueueUserWorkItem(_ => waitHandle.Set());
VideoView.MediaPlayer = vlcPlayer;
VideoView.MediaPlayer.Play();
}
// Set the sound and audio output device
SetAudioToDirectsound(isMuted);
}
}));
}
MediaOptions 只是传递一个字符串[]
mediaOptions = new[]
{
"--input-repeat=5",
"--sout-mux-caching=12000"
};
并且(为了完整性)SetAudioToDirectSount(bool)
var directsound = VideoView.MediaPlayer.SetAudioOutput("directsound");
IsMuted = isMuted;
这个“--sout-mux-caching=12000”选项应该缓存接下来的 12 秒视频。
这是正确的吗,我还需要其他选择吗?我查看了所有 cmd 行选项,似乎找不到任何明显的东西。
阅读最佳实践here , 它提到
“VLC 核心开发人员建议在应用程序的生命周期中只创建一个 LibVLC 类型的实例。您可以根据需要从单个 LibVLC 对象创建任意数量的 MediaPlayer 对象。”
在我的例子中,它嵌套在一个 using 语句中,所以我似乎没有遵循最佳实践。所以我应该声明:
Core.Initialize();
public LibVLC libVLC {get; set; } = new LibVLC();
只有一次,并且只在卸载时处理 MediaPlayer?
最小测试解决方案
名为 VLCStream 的新 WPF 项目
NuGet 安装:
主窗口.xaml
<Window x:Class="VLCStream.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vlc="clr-namespace:LibVLCSharp.WPF;assembly=LibVLCSharp.WPF"
xmlns:local="clr-namespace:VLCStream"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800"
Loaded="Window_Loaded">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="40" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Button Content="Play" Click="Button_Click" />
<vlc:VideoView x:Name="VideoView" Grid.Row="1" />
</Grid>
</Window>
MainWindow.xaml.cs
using LibVLCSharp.Shared;
using LibVLCSharp.WPF;
using System;
using System.Linq;
using System.Windows;
namespace VLCStream
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Dispatcher.InvokeAsync(new Action(async () =>
{
using (LibVLC libVLC = new LibVLC("--sout-mux-caching=12000"))
{
using (var media = new Media(libVLC, "https://youtu.be/pW-iVG0_D34", FromType.FromLocation))
{
await media.Parse(MediaParseOptions.ParseNetwork);
MediaPlayer vlcPlayer = new MediaPlayer(media.SubItems.FirstOrDefault());
VideoView.MediaPlayer = vlcPlayer;
VideoView.MediaPlayer.Play();
}
}
}));
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Core.Initialize();
}
}
}
问题似乎是随机的,需要不止 1 次运行。
最佳答案
对您的代码的一般反馈。
现在,在打开日志的情况下在 VLC 桌面应用程序中播放您的流将提供一些见解:
main error: ES_OUT_SET_(GROUP_)PCR is called too late (pts_delay increased to 2926 ms)
main debug: Received first picture
main error: Timestamp conversion failed for 9480001: no reference clock
main error: Could not convert timestamp 0 for FFmpeg
main debug: Buffering 0%
main debug: Buffering 8%
main debug: Buffering 17%
main debug: Buffering 25%
main debug: Buffering 34%
main debug: Buffering 42%
main debug: Buffering 51%
main debug: Buffering 59%
main debug: Buffering 68%
main debug: Buffering 76%
main debug: Buffering 85%
main debug: Buffering 93%
main debug: Stream buffering done (3000 ms in 7056 ms)
main debug: Decoder wait done in 0 ms
main debug: inserting 307 zeroes
mmdevice debug: state changed: 1
main warning: buffer too late (-217851 us): dropped
main warning: buffer too late (-194631 us): dropped
main error: ES_OUT_SET_(GROUP_)PCR is called too late (pts_delay increased to 3774 ms)
main debug: ES_OUT_RESET_PCR called
main warning: buffer too late (-171411 us): dropped
main debug: Received first picture
main error: Timestamp conversion failed for 15800001: no reference clock
main error: Could not convert timestamp 0 for FFmpeg
mmdevice debug: state changed: 0
这看起来不太好。也许 YouTube 对视频编码不当?或者更可能是 LibVLC 的问题?我不确定。
关于播放 YouTube 的 C# LibVLCSharp 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69445725/
是否有任何解决方案来禁用右键单击选项并从 Youtube 视频中删除右下角水印 Logo ?我在搜索 GOOGLE 后尝试过。谁能告诉我? 谢谢你。 最佳答案 试试 modestbranding范围:
我想使用 YouTube API (v3) 来启用仅音乐轨道的搜索(没有猫或藤蔓或任何其他非音乐视频)。我查看了 API Explorer 和文档以获取有关该问题的任何指示,但找不到任何有用的信息。
我需要为网站使用YouTube视频缩略图的maxresdefault版本,但是在开发实现此目的的代码后,我发现并非所有视频都具有这些缩略图,尽管这些视频均为1080p。 有没有一种方法可以自动为我的所
我想通过“iframe”嵌入youtube视频,但YouTube在我国禁止使用,建议我如何在我的网站上嵌入视频! [1]:以下图片显示了在我的国家/地区无法访问youtube 最佳答案 该视频将被嵌入
我正在为myBB使用一个名为Profile Music Plugin的插件,可以在此处找到http://community.mybb.com/mods.php?action=view&pid=75 我
Youtube IFRAME API中是否有可以执行命令的功能,例如在播放的视频结尾处打开网站? (我相信有一个功能可以在旧的Java API下执行此操作,但该功能已于去年弃用。) 最佳答案 您可以引
我试图在Videos.insert和Videos.update查询中设置3d尺寸标志。但是标志不会改变。 更新查询示例: 请求: PUT https://www.googleapis.com/yout
使用此获取评论 评论主题:列表 GET https://www.googleapis.com/youtube/v3/commentThreads?part=snippet { "error": {
最近,我尝试使用OEmbed服务通过播放列表查询参数获取视频网址的iframe代码,但是OEmbed为我们提供了与我要求的视频不同的iframe代码。 这是带有播放列表查询参数的视频网址: https
我正在使用此代码: https://www.googleapis.com/youtube/v3/search?q=global+warming&part=id&maxResults=50&key=MY
我有一个LiveBroadcast,并且将来会添加一个scheduledStartTime。据我所知,这次测试不会对LiveBroadcast的整体状态产生影响,即广播是否具有准备就绪/测试的life
YouTube API是否支持在特定时间后关闭浏览器的参数? 这需要使用链接在不同位置共享来推广促销视频。视频播放结束后关闭浏览器。 最佳答案 您可以使用Youtube API监控视频是否播放完毕,然
如果没有表单上的透明面板,YouTube Player将可以正常播放视频,或者可以全屏播放视频,透明面板中有一些图像没有什么特别的。如果我取出透明面板,则YouTube播放器会按需工作,并嵌入到应用程
我正在通过Google进行身份验证,以尝试获取YouTube分析数据,但我的问题是我不知道在查询YouTube时如何向您填充参数 在这里,我正在提供一项新服务:然后尝试查询它 我不确定要在“ids”参
我想添加youtube视频列表,但不添加视频播放器。所以我需要的是 视频标题 视频缩略图 视频时长 我以某种方式设法通过使用此http://img.youtube.com/vi/4wew2uWoARw
我正在使用youtube api和python库gdata 我遵循了文档,但似乎没有出路。 问题是 - How do i get the size of the youtube video fil
使用Youtube API,我如何获得评论或顶过youtube视频的用户ID /处理列表? 提前致谢 最佳答案 在这里,您可以了解如何使用YouTube API v2(v3尚不支持此注释)获取评论:h
我正在为所有相关数据构建一个仪表板(以php为单位),我还想在YouTube“稍后观看”播放列表中显示我的商品数量。 我知道无法使用YouTube API来解决这个问题,但是也许有人想出一种解决方法?
我尝试使用YouTube API,但存在引号问题。 SearchResource.ListRequest searchListRequest = yt.Search.List("sni
我想为我的Android应用程序的用户构建视频推荐器。我有Google OAuth可以登录我的应用程序。我可以获取有关我的应用程序用户在YouTube上观看的视频的数据吗? 最佳答案 v3 API分为
我是一名优秀的程序员,十分优秀!