{"id":28394297,"url":"https://github.com/open-android/jiecaovideoplayer","last_synced_at":"2025-06-24T15:10:24.262Z","repository":{"id":55061009,"uuid":"79005503","full_name":"open-android/JieCaoVideoPlayer","owner":"open-android","description":"高仿今日头条ListView视频播放和优酷视频播放悬浮窗","archived":false,"fork":false,"pushed_at":"2017-02-14T09:13:12.000Z","size":456,"stargazers_count":283,"open_issues_count":11,"forks_count":97,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-06-01T05:19:24.577Z","etag":null,"topics":["android","jiecaovideoplayer"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/open-android.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-01-15T06:27:25.000Z","updated_at":"2025-02-27T14:50:55.000Z","dependencies_parsed_at":"2022-08-14T10:40:19.987Z","dependency_job_id":null,"html_url":"https://github.com/open-android/JieCaoVideoPlayer","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/open-android/JieCaoVideoPlayer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-android%2FJieCaoVideoPlayer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-android%2FJieCaoVideoPlayer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-android%2FJieCaoVideoPlayer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-android%2FJieCaoVideoPlayer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/open-android","download_url":"https://codeload.github.com/open-android/JieCaoVideoPlayer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-android%2FJieCaoVideoPlayer/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261700855,"owners_count":23196506,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","jiecaovideoplayer"],"created_at":"2025-05-31T18:08:20.324Z","updated_at":"2025-06-24T15:10:24.250Z","avatar_url":"https://github.com/open-android.png","language":"Java","readme":"\n开源地址：[https://github.com/open-android/JieCaoVideoPlayer](https://github.com/open-android/JieCaoVideoPlayer)\n\n简书：[http://www.jianshu.com/p/618a5820261c](http://www.jianshu.com/p/618a5820261c \"简书地址\")\n\n##主要特点\n\n1. 视频全屏播放和浮层小窗播放\n2. 可以完全自定义UI\n3. 能在`ListView`、`ViewPager`和`ListView`、`ViewPager`和`Fragment`等多重嵌套模式下全屏工作\n4. 手势修改进度和音量\n5. 视频大小的屏幕适配，宽或长至少有两个对边是充满屏幕的，另外两个方向居中\n6. 可以在加载、暂停、播放等各种状态中正常进入全屏和退出全屏\n7. 重力感应自动全屏\n8. WebView嵌套本地视频控件\n9. [支持https和rtsp]{https://developer.android.com/guide/topics/media/media-formats.html}\n10. 小于 100kb\n\n##效果\n\n**[jiecaovideoplayer-5.3.apk](https://github.com/lipangit/JieCaoVideoPlayer/releases/download/v5.3/jiecaovideoplayer-5.3.apk)**\n\n![](http://upload-images.jianshu.io/upload_images/4037105-7a0137a2ca223736.gif?imageMogr2/auto-orient/strip)\n\n* 爱生活,爱学习,更爱做代码的搬运工,分类查找更方便请下载黑马助手app\n\n\n![黑马助手.png](http://upload-images.jianshu.io/upload_images/4037105-f777f1214328dcc4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n\n## 使用步骤\n\n### 1. 在project的build.gradle添加如下代码(如下图)\n\n\tallprojects {\n\t    repositories {\n\t        maven { url \"https://jitpack.io\" }\n\t    }\n\t}\n\n![](http://upload-images.jianshu.io/upload_images/4037105-2faa5daca3bfe8a0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n\t\n\n### 2. 在Module的build.gradle添加依赖\n\n      compile 'com.github.open-android:JieCaoVideoPlayer:0.1.0'\n\n\n\n### 3.添加权限\n\n    \u003cuses-permission android:name=\"android.permission.INTERNET\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\" /\u003e\n\n### 4.在Activity中添加如下代码\n\n    listView = (ListView) findViewById(R.id.listview);\n    adapterVideoList = new VideoListAdapter(this);\n    listView.setAdapter(adapterVideoList);\n    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);\n    sensorEventListener = new JCVideoPlayer.JCAutoFullscreenListener();\n\n### 5.在Activity监听如下生命周期方法\n\n\n    @Override\n    public void onBackPressed() {\n        if (JCVideoPlayer.backPress()) {\n            return;\n        }\n        super.onBackPressed();\n    }\n\n    @Override\n    protected void onResume() {\n        super.onResume();\n        Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);\n        sensorManager.registerListener(sensorEventListener, accelerometerSensor, SensorManager.SENSOR_DELAY_NORMAL);\n    }\n\n    @Override\n    protected void onPause() {\n        super.onPause();\n        sensorManager.unregisterListener(sensorEventListener);\n        JCVideoPlayer.releaseAllVideos();\n    }\n\n\n### 6.新建一个Adapter继承BaseAdapter并且复制如下代码\n\n\n  \n\n    public static final String TAG = \"JieCaoVideoPlayer\";\n\n    int[] videoIndexs = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};\n    Context context;\n    int pager = -1;\n\n    public VideoListAdapter(Context context) {\n        this.context = context;\n    }\n\n    public VideoListAdapter(Context context, int pager) {\n        this.context = context;\n        this.pager = pager;\n    }\n\n    @Override\n    public int getCount() {\n        return pager == -1 ? videoIndexs.length : 4;\n    }\n\n    @Override\n    public Object getItem(int position) {\n        return null;\n    }\n\n    @Override\n    public long getItemId(int position) {\n        return position;\n    }\n\n    @Override\n    public View getView(int position, View convertView, ViewGroup parent) {\n\n        ViewHolder viewHolder;\n        if (null == convertView) {\n            viewHolder = new ViewHolder();\n            LayoutInflater mInflater = LayoutInflater.from(context);\n            convertView = mInflater.inflate(R.layout.item_videoview, null);\n            convertView.setTag(viewHolder);\n        } else {\n            viewHolder = (ViewHolder) convertView.getTag();\n        }\n        viewHolder.jcVideoPlayer = (JCVideoPlayerStandard) convertView.findViewById(R.id.videoplayer);\n        if (pager == -1) {\n            viewHolder.jcVideoPlayer.setUp(\n                    VideoConstant.videoUrls[0][position], JCVideoPlayer.SCREEN_LAYOUT_LIST,\n                    VideoConstant.videoTitles[0][position]);\n            System.out.println(\"fdsfdsfdsfdsfa setup \" + position);\n            Picasso.with(convertView.getContext())\n                    .load(VideoConstant.videoThumbs[0][position])\n                    .into(viewHolder.jcVideoPlayer.thumbImageView);\n        } else {\n            viewHolder.jcVideoPlayer.setUp(\n                    VideoConstant.videoUrls[pager][position], JCVideoPlayer.SCREEN_LAYOUT_LIST,\n                    VideoConstant.videoTitles[pager][position]);\n            Picasso.with(convertView.getContext())\n                    .load(VideoConstant.videoThumbs[pager][position])\n                    .into(viewHolder.jcVideoPlayer.thumbImageView);\n        }\n        return convertView;\n    }\n\n    class ViewHolder {\n        JCVideoPlayerStandard jcVideoPlayer;\n    }\n\n### 7.添加Adapter的item布局R.layout.item_videoview\n\n    \u003cfm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandard\n        android:id=\"@+id/videoplayer\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"200dp\" /\u003e\n\n### 8.在AndroidManifest.xml中\n\n\t\u003cactivity\n\t    android:name=\".MainActivity\"\n\t    android:configChanges=\"orientation|screenSize|keyboardHidden\"\n\t    android:screenOrientation=\"portrait\" /\u003e \u003c!-- or android:screenOrientation=\"landscape\"--\u003e\n\n\n\u003e 完成如上步骤就可以实现今日头条视频播放列表功能 , 更多功能请参考样例工程app\n\n欢迎关注微信公众号\n\n![](http://oi5nqn6ce.bkt.clouddn.com/itheima/booster/code/qrcode.png)\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopen-android%2Fjiecaovideoplayer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopen-android%2Fjiecaovideoplayer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopen-android%2Fjiecaovideoplayer/lists"}