飞道的博客

Windows/Android/iOS平台H265编码视频播放器EasyPlayerPro支持高码率视频播放和D3D画面旋转代码参考

477人阅读  评论(0)

EasyPlayerPro是一款全功能的流媒体播放器,支持RTSP、RTMP、HTTP、HLS、UDP、RTP、File等多种流媒体协议播放、支持本地文件播放,支持本地抓拍、本地录像、播放旋转、多屏播放等多种功能特性,核心基于ffmpeg,稳定、高效、可靠,支持Windows、Android、iOS三个平台,EasyPlayerPro播放器可广泛应用于流媒体客户端、互联网直播、在线教育、IPTV、赛事直播、本地视频文件播放等项目中。

我们今天介绍一下EasyPlayerPro-win版的D3D画面旋转实现方法,可以从 https://github.com/tsingsee/EasyPlayerPro-Win 下载到工程代码。

其中定义的tagEASY_PARAM_ID枚举和EasyPlayerPro_Setparam(Easy_PlayerPro_Handle player, EASY_PARAM_ID param_id, EASY_HANDLE param)函数可以完成很多功能。


  
  1. typedef enum tagEASY_PARAM_ID
  2. {
  3. //++ public
  4. // duration & position
  5. EASY_PARAM_MEDIA_DURATION = 0x1000,
  6. EASY_PARAM_MEDIA_POSITION,
  7. // media detail info
  8. EASY_PARAM_MEDIA_INFO,
  9. EASY_PARAM_VIDEO_WIDTH,
  10. EASY_PARAM_VIDEO_HEIGHT,
  11. // video display mode
  12. EASY_PARAM_VIDEO_MODE,
  13. // audio volume control
  14. EASY_PARAM_AUDIO_VOLUME,
  15. // playback speed control
  16. EASY_PARAM_PLAY_SPEED,
  17. EASY_PARAM_PLAY_SPEED_TYPE,
  18. // video decode thread count
  19. EASY_PARAM_DECODE_THREAD_COUNT,
  20. // visual effect mode
  21. EASY_PARAM_VISUAL_EFFECT,
  22. // audio/video sync diff
  23. EASY_PARAM_AVSYNC_TIME_DIFF,
  24. // player event/audio/video callback
  25. EASY_PARAM_PLAYER_CALLBACK,
  26. // player event/audio/video callback userdata
  27. EASY_PARAM_PLAYER_USERDATA,
  28. // audio/video stream
  29. EASY_PARAM_AUDIO_STREAM_TOTAL,
  30. EASY_PARAM_VIDEO_STREAM_TOTAL,
  31. EASY_PARAM_SUBTITLE_STREAM_TOTAL,
  32. EASY_PARAM_AUDIO_STREAM_CUR,
  33. EASY_PARAM_VIDEO_STREAM_CUR,
  34. EASY_PARAM_SUBTITLE_STREAM_CUR,
  35. //++ for media record
  36. EASY_PARAM_RECORD_TIME,
  37. EASY_PARAM_RECORD_PIECE_ID,
  38. //-- for media record
  39. //-- public
  40. //++ for audio render type
  41. EASY_PARAM_ADEV_RENDER_TYPE = 0x2000,
  42. EASY_PARAM_ADEV_GET_CONTEXT,
  43. EASY_PARAM_ADEV_MUTE,
  44. //-- for audio render type
  45. //++ for vdev
  46. EASY_PARAM_VDEV_RENDER_TYPE = 0x3000,
  47. EASY_PARAM_VDEV_FRAME_RATE,
  48. EASY_PARAM_VDEV_GET_CONTEXT,
  49. EASY_PARAM_VDEV_POST_SURFACE,
  50. EASY_PARAM_VDEV_GET_D3DDEV,
  51. EASY_PARAM_VDEV_D3D_ROTATE,
  52. EASY_PARAM_VDEV_RENDER_SHOW,
  53. //-- for vdev
  54. //++ for render
  55. EASY_PARAM_RENDER_UPDATE = 0x4000,
  56. EASY_PARAM_RENDER_START_PTS,
  57. //-- for render
  58. }EASY_PARAM_ID;

枚举类型中 EASY_PARAM_VDEV_D3D_ROTATE 为D3D画面旋转需要用到的类型,在HandleCommand函数中,如下方法实现旋转(每次旋转90度):


  
  1. case POP_MENU_STREAM_D3D_ROTATE: //d3d视频旋转
  2. {
  3. int angle = 0;
  4. EasyPlayerPro_Getparam(m_pMainDlg->m_hPlayer, EASY_PARAM_VDEV_D3D_ROTATE, &angle);
  5. angle += 90; angle %= 360;
  6. EasyPlayerPro_Setparam(m_pMainDlg->m_hPlayer, EASY_PARAM_VDEV_D3D_ROTATE, &angle);
  7. }
  8. break;

下面我们看下实际效果:

 


转载:https://blog.csdn.net/TsingSee/article/details/110229372
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场