当前位置: 首页 > news >正文

Android之播放本地视频和Url视频方法

一、播放本地视频文件

根据文件路径在浏览器中播放,可用于视频预览等场景

效果:

用浏览器播放本地视频

文件路径例子:
/storage/emulated/0/Android/data/com.custom.jfrb/files/Movies/1697687179497.mp4

File file = new File("文件路径");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.putExtra("oneshot", 0);
intent.putExtra("configchange", 0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        Uri contentUri = FileProvider.getUriForFile(UploadVideoActivity.this, getContext().getPackageName() + ".provider", file);
        intent.setDataAndType(contentUri, "video/*");
} else {
        intent.setDataAndType(Uri.fromFile(file), "video/*");
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
startActivity(intent);

二、播放Url视频(GSYVideoPlayer类的使用)

效果:

播放Url视频

1、导入依赖

implementation 'com.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer:v8.1.7-release-jitpack'

2、xml文件

<com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
            android:id="@+id/video_player"
            android:layout_width="match_parent"
            android:layout_height="220dp" />

3、Activity中调用

(1) 绑定控件

@InjectView(id = R.id.video_player)
StandardGSYVideoPlayer mVideoPlayer;

(2)播放视频
视频Url例子:https://recordcdn-qk.jfdaily.com/upload/vod/user1694515885005019/1697678251135382/preview/video.mp4

//播放横屏视频
 boolean setUp = mVideoPlayer.setUp("视频Url", true, "名字");
//设置封面
//        if (setUp) {
//            Glide.with(this).load(productItem.getCapture()).into((ImageView) mVideoPlayer.getThumbImageView());
//        }
//隐藏自带的标题和返回键
mVideoPlayer.getTitleTextView().setVisibility(View.GONE);
 mVideoPlayer.getBackButton().setVisibility(View.GONE);
 
//全屏按键
mVideoPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
             mVideoPlayer.startWindowFullscreen(ProductDetailActivity.this,false,true);
       }
});
GSYVideoType.setShowType(GSYVideoType.SCREEN_TYPE_DEFAULT);
//根据视频尺寸,自动选择竖屏全屏或者横屏全屏
mVideoPlayer.setAutoFullWithSize(true);
//全屏动画
mVideoPlayer.setShowFullAnimation(true);
//开始播放
mVideoPlayer.startPlayLogic();

(3)相关生命周期中添加操作

@Override
    public void onBackPressed() {
        if (GSYVideoManager.backFromWindowFull(this)){
            return;
        }
        super.onBackPressed();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mVideoPlayer.onVideoResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mVideoPlayer.onVideoPause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        GSYVideoADManager.releaseAllVideos();
    }

三、持续更新中…

相关文章:

  • Kotlin中的选择结构语句
  • BC v1.2充电规范
  • 缩短cin时间
  • 【Linux】进程概念与进程状态
  • C进阶-语言文件操作
  • 购药不烦恼:线上购药小程序的快捷方式
  • uniapp(uncloud) 使用生态开发接口详情2(使用 schema创建数据, schema2code创建页面, iconfont 引入项目)
  • 百度OCR识别图片文本字符串——物联网上位机软件
  • Hadoop3教程(十六):MapReduce中的OutputFormat
  • 亚马逊云科技多项新功能与服务,助力各种规模的组织拥抱生成式 AI
  • 网络解析(二)
  • 京东店铺公司名爬虫
  • WebGPU-初识各名词概念Adapters与Device
  • Pytest测试框架搭建的关键6个知识点(建议收藏)
  • CronJob运行自动化任务
  • 驱动day2 字符设备驱动 LED亮灯
  • 2022年亚太杯APMCM数学建模大赛A题结晶器熔剂熔融结晶过程序列图像特征提取及建模分析求解全过程文档及程序
  • Netty入门指南之基础介绍
  • Next.js和sharp实现占位图片生成工具
  • Flutter 填坑录 (不定时更新)
  • 王毅谈金砖国家反恐和网络安全合作
  • 空调+零食助顶级赛马备战,上海环球马术冠军赛将焕新登场
  • 十四届全国人大常委会举行第四十四次委员长会议
  • 气候资讯|4月全球前沿气候科学研究&极端天气气候事件
  • 遭遇大规模停电,西班牙内政部宣布进入国家紧急状态
  • 俄乌战火不熄,特朗普在梵蒂冈与泽连斯基会晤后口风突变