using EC.Entity.Video;
using EC.Onvif;
using LibVLCSharp.Shared;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace ECMonitor.UC.Videos
{
///
/// UCRtspVlcVideo.xaml 的交互逻辑
///
public partial class UCRtspVlcVideo : UserControl,IUCPlayer
{
LibVLC _libVLC;
MediaPlayer _mediaPlayer;
public string Message { get; set; }
public MonitorCamera Camera { get; set; }
private OnvifClient _onvifClient { get; set; }
public int VideoType { get; set; }
///
/// 更新时间
///
private DateTime upDateTime;
public UCRtspVlcVideo(double width, double height, int index, string aspectRatio = "4:3")
{
this.Width = width;
this.Height = height;
InitializeComponent();
this.Name = "UCVideoPlay" +index;
// "--no-audio" 没有声音
_libVLC = new LibVLC(enableDebugLogs: true, "--rtsp-frame-buffer-size=0", "--no-audio", "--quiet-synchro");
_mediaPlayer = new MediaPlayer(_libVLC);
_mediaPlayer.AspectRatio = aspectRatio;
videoView1.MediaPlayer = _mediaPlayer;
}
public void ReSetSize(double width, double height)
{
Width = width;
Height = height;
}
///
/// 播放
///
/// IP地址
/// 用户
/// 密码
//public void Play(string ip,string userName,string passWord)
//{
// this.Ip = ip;
// string url = string.Format(RTSPUrlFormat, userName, passWord, ip);
// Play(url);
//}
public bool Play(MonitorCamera camera)
{
if (IsPlaying())
{
Stop();
}
Camera = camera;
if (Camera == null)
{
return false;
}
videoView1.Height = this.ActualHeight - 3;
videoView1.Width = this.ActualWidth - 3;
string url = Camera.RtspURL();
var media = new Media(_libVLC, new Uri(url), "--newwork-caching=0", "--rtsp-frame-buffer-size=0", "--no-audio");
bool play= _mediaPlayer.Play(media);
//_mediaPlayer.ToggleFullscreen();
return play;
}
public bool Play()
{
if (Camera == null)
{
return false;
}
bool play = _mediaPlayer.Play();
_mediaPlayer.ToggleFullscreen();
return play;
}
public void Stop()
{
_mediaPlayer?.Stop();
}
public void UPDateTime()
{
upDateTime = new DateTime();
}
///
/// 判断预警是否接触
///
///
public bool IsTimeOut()
{
DateTime now = new DateTime();
double difSeconds = DateUnit.DateDiffSeconds(upDateTime, now);
return difSeconds > 30;
}
public string GetCameraIp() {
if (Camera != null)
{
return Camera.Ip;
}
return "";
}
///
/// 播放器类型
///
///
public int GetPlayerType()
{
return VideoType;
}
///
/// 相机
///
///
public MonitorCamera GetCamera()
{
return Camera;
}
public OnvifClient GetOnvifClient()
{
return _onvifClient;
}
public UserControl GetControl()
{
return this;
}
public string GetMessage()
{
return Message;
}
public string GetName()
{
return this.Name;
}
///
/// 是否是空播放器
///
///
public bool IsNullPlay()
{
return Camera == null;
}
///
/// 是否正在播放
///
///
public bool IsPlaying()
{
if (Camera == null|| _mediaPlayer==null)
{
return false;
}
return _mediaPlayer.IsPlaying;
}
private int listIndex = 0;
public int GetIndex()
{
return listIndex;
}
public void SetIndex(int index)
{
listIndex = index;
}
///
/// 是否显示
///
private bool IsShow = false;
public event EventHandler PlayerMouseDown;
public event EventHandler PlayerMouseDoubleClick;
public event EventHandler OnFromClose;
public bool GetIsShow()
{
return IsShow;
}
public void SetIsShow(bool isShow)
{
IsShow = isShow;
}
///
/// 设置窗体大小
///
///
///
public void SetSize(double videoWidth, double videoHeight)
{
this.Width = videoWidth;
this.Height = videoHeight;
}
private void btnClose_Click(object sender, RoutedEventArgs e)
{
Stop();
}
private void btnPlay_Click(object sender, RoutedEventArgs e)
{
}
public void SetSelected(bool selected)
{
throw new NotImplementedException();
}
public bool Play(MonitorCamera camera, bool replay = false)
{
throw new NotImplementedException();
}
public bool SetMaximized(double width, double height)
{
throw new NotImplementedException();
}
public bool IxMaximized()
{
throw new NotImplementedException();
}
public void ShowMsg(string message)
{
throw new NotImplementedException();
}
}
}