Windows/Android/iOS平臺H265編碼視訊播放器EasyPlayerPro支援高位元速率視訊播放和D3D畫面旋轉程式碼參考
阿新 • • 發佈:2020-11-30
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)函式可以完成很多功能。
typedef enum tagEASY_PARAM_ID { //++ public // duration & position EASY_PARAM_MEDIA_DURATION = 0x1000, EASY_PARAM_MEDIA_POSITION, // media detail info EASY_PARAM_MEDIA_INFO, EASY_PARAM_VIDEO_WIDTH, EASY_PARAM_VIDEO_HEIGHT, // video display mode EASY_PARAM_VIDEO_MODE, // audio volume control EASY_PARAM_AUDIO_VOLUME, // playback speed control EASY_PARAM_PLAY_SPEED, EASY_PARAM_PLAY_SPEED_TYPE, // video decode thread count EASY_PARAM_DECODE_THREAD_COUNT, // visual effect mode EASY_PARAM_VISUAL_EFFECT, // audio/video sync diff EASY_PARAM_AVSYNC_TIME_DIFF, // player event/audio/video callback EASY_PARAM_PLAYER_CALLBACK, // player event/audio/video callback userdata EASY_PARAM_PLAYER_USERDATA, // audio/video stream EASY_PARAM_AUDIO_STREAM_TOTAL, EASY_PARAM_VIDEO_STREAM_TOTAL, EASY_PARAM_SUBTITLE_STREAM_TOTAL, EASY_PARAM_AUDIO_STREAM_CUR, EASY_PARAM_VIDEO_STREAM_CUR, EASY_PARAM_SUBTITLE_STREAM_CUR, //++ for media record EASY_PARAM_RECORD_TIME, EASY_PARAM_RECORD_PIECE_ID, //-- for media record //-- public //++ for audio render type EASY_PARAM_ADEV_RENDER_TYPE = 0x2000, EASY_PARAM_ADEV_GET_CONTEXT, EASY_PARAM_ADEV_MUTE, //-- for audio render type //++ for vdev EASY_PARAM_VDEV_RENDER_TYPE = 0x3000, EASY_PARAM_VDEV_FRAME_RATE, EASY_PARAM_VDEV_GET_CONTEXT, EASY_PARAM_VDEV_POST_SURFACE, EASY_PARAM_VDEV_GET_D3DDEV, EASY_PARAM_VDEV_D3D_ROTATE, EASY_PARAM_VDEV_RENDER_SHOW, //-- for vdev //++ for render EASY_PARAM_RENDER_UPDATE = 0x4000, EASY_PARAM_RENDER_START_PTS, //-- for render }EASY_PARAM_ID;
列舉型別中 EASY_PARAM_VDEV_D3D_ROTATE 為D3D畫面旋轉需要用到的型別,在HandleCommand函式中,如下方法實現旋轉(每次旋轉90度):
case POP_MENU_STREAM_D3D_ROTATE: //d3d視訊旋轉 { int angle = 0; EasyPlayerPro_Getparam(m_pMainDlg->m_hPlayer, EASY_PARAM_VDEV_D3D_ROTATE, &angle); angle += 90; angle %= 360; EasyPlayerPro_Setparam(m_pMainDlg->m_hPlayer, EASY_PARAM_VDEV_D3D_ROTATE, &angle); } break;
下面我們看下實際效果: