PlayerChannel.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using fis.media.Library.Media.EventArgs;
  2. using fis.media.Library.Media.Members;
  3. using fis.media.Library.Media.Publisher;
  4. using fis.media.Library.Players;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace fis.media.Library.Media.Players
  11. {
  12. public class PlayerChannel
  13. {
  14. private VideoFrameData _currentVideoFrame;
  15. private Task _task;
  16. private ChannelVideoFrame _channelVideoFrame;
  17. /// <summary>
  18. /// 频道名称
  19. /// </summary>
  20. public ChannelNameEnum ChannelName {get;set;}
  21. /// <summary>
  22. /// 成员角色类型
  23. /// </summary>
  24. public MemeberTypeEnum ChannelMemberRoleType { get; set; }
  25. /// <summary>
  26. /// 频道所属成员Id
  27. /// </summary>
  28. public string ChannelMemberId { get; set; }
  29. /// <summary>
  30. /// 是否正在播放
  31. /// </summary>
  32. public bool IsPlaying { get; set; }
  33. /// <summary>
  34. /// 当前视频帧
  35. /// </summary>
  36. public VideoFrameData CurrentVideoFrame => _currentVideoFrame;
  37. /// <summary>
  38. /// 收到画面
  39. /// </summary>
  40. public event EventHandler<ChannelVideoFrame> FrameRecieved;
  41. /// <summary>
  42. /// 错误事件
  43. /// </summary>
  44. public event EventHandler<ErrorArgs> ErrorAccurred;
  45. /// <summary>
  46. /// 状态事件
  47. /// </summary>
  48. public event EventHandler<StatusArgs> StatusChanged;
  49. public void UpdateFrame(VideoFrameData videoFrameData)
  50. {
  51. _currentVideoFrame= videoFrameData;
  52. IsPlaying = true;
  53. if (_channelVideoFrame == null)
  54. {
  55. _channelVideoFrame = new ChannelVideoFrame(videoFrameData, ChannelMemberId, ChannelName,ChannelMemberRoleType);
  56. }
  57. else {
  58. _channelVideoFrame.VideoFrameData = _currentVideoFrame;
  59. }
  60. if (_task == null)
  61. {
  62. _task = new Task(() => FrameRecieved.Invoke(this, _channelVideoFrame));
  63. }
  64. _task.Start();
  65. }
  66. }
  67. }