我可以从网络摄像头流式传输WPF应用程序中的实时视频吗?如果是,那怎么样?
在c#/ wpf中,我在窗口中添加了一个进度条和媒体元素.我们的想法是,进度条显示媒体元素的播放量.
我尝试使用以下xaml:
<Window x:Class="TestApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="627" Width="889">
<Grid>
<MediaElement Margin="152,8,140,41" Name="mediaElement1" MediaEnded="mediaElement1_MediaEnded" Visibility="Hidden" />
<ProgressBar Height="23" Margin="152,8,10,0" Name="mp3PlayingProgressBar" VerticalAlignment="Top" Foreground="DarkBlue" Maximum="{Binding Path=NaturalDuration.TimeSpan.TotalSeconds, Mode=OneWay, ElementName=mediaElement1}" Value="{Binding Path=Position.TotalSeconds, Mode=OneWay, ElementName=mediaElement1}" />
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
我试图将Maximum和Value属性绑定到mediaelement.但是当我将mp3加载到mediaelement时,进度条没有任何反应.(音乐正在播放,因此mp3已加载并正常播放).
我更喜欢用绑定来做这件事.
我在这做错了什么?
我在WPF播放一个视频.我希望它循环播放所以我所做的是当媒体事件发生时,我播放我的视频.所以这会给我一个循环.问题是为什么ui必须再次创造新的来源?为什么我不能称之为"玩"?
出于某种原因,我不想在XAML中这样做.
看看我的代码片段:
string startPath System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);
public Window1()
{
InitializeComponent();
media.Source = new Uri(startPath + @"playlist.wpl");
media.play();
}
private void Media_Ended(object sender, EventArgs e)
{
media.Source = new Uri(startPath + @"playlist.wpl"); //if i dont put this line, video wont play..seems like it cant get the source
media.Play();
}
Run Code Online (Sandbox Code Playgroud)
或者有没有一种正确的方法来循环NOT在XAML中,但在这里.cs文件?
我在我的网站上使用最新的mediaelement.js播放html5视频.Google Chrome中有一些奇怪的东西.他播放一个视频,但不想播放mp4格式的其他视频,也不想回到webm.两个视频都使用ffmpeg转换为这个参数:
ffmpeg -i input.mov -acodec libfaac -ab 96k -vcodec libx264 -vpre slower -vpre main -level 21 -refs 2 -b 345k -bt 345k -threads 0 -s 640x360 output.mp4
Run Code Online (Sandbox Code Playgroud)
此外,第一个视频正常播放,不使用mp4格式的mediaelement.js库,第二个视频转为webm格式.
样本页面来自http://random.net.ua/video_test/
:
http://random.net.ua/video_test/video1.html
(好)http://random.net.ua/video_test/video2.html
(好)http://random.net.ua/video_test/video1-mediaelement.html
(好)http://random.net.ua/video_test/video2-mediaelement.html
(失败)有没有一种方法,使MediaElement
支持更多视频编解码器一样mkv
,flv
,mov
等?如果没有,是否有任何其他控件支持更多的视频编解码器?
我尝试在WPF中使用MediaElement显示MP4-Video.播放视频效果很好.但是,白色显示为灰色.当我在其他视频播放器中打开视频文件时,会显示白色.还有其他人经历过这个吗?
<MediaElement LoadedBehavior="Play"
Source="Resources/Videos/TestVideo.mp4" />
Run Code Online (Sandbox Code Playgroud)
我试图找出是否可以从仍在下载的流中播放MediaElement中的视频,而不是等待它完成?我已经非常彻底地研究了这个主题,但没有找到明确的答案.
我正在尝试按需实现播放.我目前正在播放视频,将uri分配给MediaElement的Source,这是有效的.我想通过在Stream中打开uri并使用SetSource将Stream分配给MediaElement来更改此功能.
我编写了代码来获取uri,创建WebClient,并使用OpenReadAsync开始从中读取.我已经将AllowReadStreamBuffering设置为false,以允许我一旦可用就从OpenReadComplete获取流(而不是等待它完成下载).只要我有Stream的句柄,我就将它分配给MediaElement并尝试播放.
这当前导致System.Exception:2210错误.据我所知,资源存在且可读,我不知道这是我的代码是错误的,或者是否根本不可能从不完整的流中回放MediaElement.
如果使用SetSource和Stream无法做到这一点,是否可以使用SetSource和MediaStreamSource类?我确实看过MediaStreamSource这个任务,但它似乎要求我编写解析传入流的代码并一次从中提取一个帧,这听起来很痛苦.
iOS Safari 需要触摸事件来播放/暂停媒体元素。没有的话,你会得到:
NotAllowedError:当前上下文中的用户代理或平台不允许该请求,可能是因为用户拒绝了权限。捕获 PromiseReaction 错误消息。
问题是“如何延迟 <MediaElement>.play() 调用而不丢失触摸事件上下文?”
我试图在点击后延迟播放媒体元素,但在我提出的两种方法(Promise 和 setTimeout)中,它们都失去了与触摸事件的连接,并且由于以下原因我收到了 NotAllowedError 错误<MediaElement>.play() 调用的范围更改。正如预期的那样,两者都适用于除 iOS Safari 之外的所有 ES6 设备/浏览器。
请随意在codepen 上使用它。
const delay = ms => new Promise(res => setTimeout(res, ms));
const video = document.querySelector('video'),
button = document.querySelector('button')
const playVideoSyncDelay = async e => {
document.body.classList.add('blackground')
await delay(3000)
video.play()
.then( e => video.onended = e => document.body.classList.remove('blackground', 'playing') )
.then( e => document.body.classList.add('playing') )
.catch( e => console.error('Oops:', e) )
}
const playVideoTimeoutDelay = e => {
document.body.classList.add('blackground') …
Run Code Online (Sandbox Code Playgroud) mediaelement ×10
c# ×5
wpf ×5
.net ×2
html5 ×2
javascript ×2
video ×2
events ×1
html ×1
ios ×1
jquery ×1
mp4 ×1
progress-bar ×1
safari ×1
silverlight ×1
stream ×1
streaming ×1
vb.net ×1
webcam ×1
xaml ×1