VLC Media Player是一款非常强大的播放器,基本上支持绝大部分的解码器,但是源代码编译难度很大,所以还是使用编译好的库吧。
好,接下来进入正题
libvlc_event_manager_t* vlc_media_event_mng = libvlc_media_event_manager(vlc_media);
libvlc_event_attach(vlc_media_event_mng, libvlc_MediaParsedChanged, event_callback, nullptr);libvlc_event_attach(vlc_media_event_mng, libvlc_MediaDurationChanged, event_callback, nullptr);
3.开始异步解析本地媒体
libvlc_media_parse_with_options(vlc_media, libvlc_media_parse_local,-1);
event_callback:
说明:事件回调函数
参数event:事件类型
参数userData:自定义数据类型,可为Null
void event_callback(const libvlc_event_t *event, void *userData)
{switch (event->type){case libvlc_MediaParsedChanged:{//在该事件中获取帧率fpslibvlc_media_track_t **ppTracks = nullptr;int uiStreamCount = libvlc_media_tracks_get(g_vlcModel->m_media, &ppTracks);for (unsigned i = 0; i < uiStreamCount; i++){libvlc_media_track_t* pTrack = ppTracks[i];if (pTrack && libvlc_track_video == pTrack->i_type){libvlc_video_track_t* pVideoTrack = pTrack->video;int fps = pVideoTrack->i_frame_rate_num / (float)pVideoTrack->i_frame_rate_den;break;}}if(ppTracks)libvlc_media_tracks_release(ppTracks, uiStreamCount);break;}case libvlc_MediaDurationChanged:{//获取总时长int_t duration = event->u.media_duration_changed.new_duration;break;}case libvlc_MediaPlayerPositionChanged:{//获取当前播放进度float pos = event->u.media_player_position_changed.new_position;break;}}
}libvlc_instance_t *vlc_inst= nullptr;
libvlc_media_t *vlc_media = nullptr;
libvlc_media_player_t *vlc_player = nullptr;
libvlc_event_manager_t *vlc_media_event_mng = nullptr;
libvlc_event_manager_t *vlc_player_event_mng = nullptr;vlc_inst = libvlc_new(0, NULL);
if (vlc_inst)
{vlc_media = libvlc_media_new_path(vlc_inst ,"D:\\box.mp4");if (vlc_media){//创建事件管理器vlc__media_event_mng = libvlc_media_event_manager(vlc_media);//订阅指定事件(视频解析,视频总时长,当前播放进度)libvlc_event_attach(vlc__media_event_mng, libvlc_MediaParsedChanged, event_callback, nullptr);libvlc_event_attach(vlc__media_event_mng, libvlc_MediaDurationChanged, event_callback, nullptr);libvlc_event_attach(vlc__media_event_mng, libvlc_MediaPlayerPositionChanged, event_callback, nullptr);//异步解析本地媒体libvlc_media_parse_with_options(vlc_media, libvlc_media_parse_local,-1);vlc_player = libvlc_media_player_new_from_media(vlc_media);if (vlc_player){vlc__player_event_mng = libvlc_media_player_event_manager(vlc__player);libvlc_event_attach(vlc__player_event_mng, libvlc_MediaPlayerPositionChanged, event_callback, nullptr);auto imgBuffer = malloc(480 * 480* 4);libvlc_video_set_callbacks(vlc_player, [imgBuffer](void** pBuffer) -> void* {std::cout << "Lock" << std::endl;*pBuffer = imgBuffer;return NULL;}, [](void*, void*const*) {std::cout << "unlock" << std::endl;}, nullptr, param);libvlc_video_set_format(vlc_player, "RGBA", 450, 450, 450* 4);}}
}
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(Qt实战项目,C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- bangwoyixia.com 版权所有 湘ICP备2023022004号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务