Compose 桌面端视频播放器

Compose desktop video player

基于JavaFx组件MediaPlayer开发,独立运行,不依赖任何其它视频播放器

demo1.png
demo2.png

代码示例

var seek by remember { mutableStateOf(0f) }                                                           
var progress by remember { mutableStateOf(Progress.ZERO) }                                            
var showLoading by remember{ mutableStateOf(false) }                                                  
var showErrorHint by remember{ mutableStateOf(false) }                                                
var videoModifier by remember { mutableStateOf(Modifier.size(DpSize.Zero)) }                          
Box(Modifier.fillMaxWidth().weight(1f).background(Color.Black), contentAlignment= Alignment.Center) {  
    progress = VideoPlayer(videoModifier, videoUrl, mediaState, volume, seek).value                   
    if(showLoading){                                                                                  
        CircularProgressIndicator(Modifier.size(80.dp), Color.White, strokeWidth = 6.dp)              
    }                                                                                                 
    if(showErrorHint){                                                                                
        Column(Modifier.clickable {                                                                   
            MainScope().launch {                                                                       
                videoUrl = ""                                                                         
                delay(500)                                                                            
                videoUrl = VIDEO_URL_LIST[videoUrlIndex]                                              
            }                                                                                         
        }, horizontalAlignment = Alignment.CenterHorizontally) {                                       
            Icon(Icons.Default.Refresh, "", Modifier.size(60.dp), tint = Color.White)                 
            Spacer(Modifier.height(16.dp))                                                            
            Text("加载失败", color=Color.White, fontSize = 18.sp)                                         
        }                                                                                             
    }                                                                                                 
}                                                                                                     
......
LaunchedEffect(mediaState.value){                            
    println("out mediaState=${mediaState.value}")           
    when (mediaState.value) {                               
        MediaState.LOADING -> {                             
            showLoading = true                              
            showErrorHint = false                           
            //由于覆盖在JavaFx组件上面的UI无法显示出来,所以先将其尺寸设置为0,等加载完成后恢复 
            videoModifier = Modifier.size(DpSize.Zero)      
        }                                                   
        MediaState.READY -> {                               
            delay(1000)                                     
            showLoading = false                             
            videoModifier = Modifier.fillMaxSize()          
        }                                                   
        MediaState.ERROR -> {                               
            showErrorHint = true                            
            showLoading = false                             
            videoModifier = Modifier.size(DpSize.Zero)      
        }                                                   
        else -> {}                                          
    }                                                       
}                                                           

项目地址:https://github.com/zhzc0x/videoplayer-compose
欢迎大家点赞评论,多提Issues

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 视频播放器介绍文档 目录介绍 01.该视频播放器介绍 02.视频播放器功能 03.视频播放器架构说明 04.视频播...
    杨充211阅读 6,842评论 0 12
  • 03.视频播放器Api说明 目录介绍 01.最简单的播放 02.如何切换视频内核 03.切换视频模式 04.切换视...
    杨充211阅读 7,737评论 0 1
  • 02.视频播放器整体结构 目录介绍 01.视频常见的布局视图 02.后期可能涉及的视图 03.需要达到的目的和效果...
    杨充211阅读 5,293评论 0 3
  • 写在前面: 因项目需要,需要使用到视频播放相关技术,虽然系统提供了播放器VideoView,但由于各种原因无法满足...
    撸代码的皇太极阅读 17,606评论 9 12
  • 05.视频播放器内核切换封装 目录介绍 01.视频播放器内核封装需求 02.播放器内核架构图 03.如何兼容不同内...
    杨充211阅读 5,841评论 0 3

友情链接更多精彩内容