zoukankan      html  css  js  c++  java
  • 聊聊视频播放那些事1

    问题:

    头条西瓜视频等app从视频列表到详情页,所播放的视频无逢连继播放?怎么做的?

    不知道怎么做的,不想反编,也看不懂。

    先来看一下这段话:

    “碎片(Fragment)是一种可以嵌入在活动当中的UI片段”

    Fragment 不光是可以给一个Activity用的这大家都知道。

    好吧,把activity1在播的fragment直接塞到activity2。

    这么做可以吗?不可以吗?到底可以吗?自已试吧。,以我的知识判断是可以的。就不试验了。

    我做个更离奇的事。我从Activity1,摘一个view,然后放到Activity2去用!!!

    我从Activity1,摘一个view,然后放到Activity2去用!!!

    我从Activity1,摘一个view,然后放到Activity2去用!!!

    重要的说三遍。

    可以吗?fragment可以。View也是可以的。

    上代码。

    Activity1:如下

    package com.example.administrator.videotest;
    
    import android.annotation.SuppressLint;
    import android.content.Intent;
    import android.content.res.AssetFileDescriptor;
    import android.graphics.SurfaceTexture;
    import android.media.MediaPlayer;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.Surface;
    import android.view.TextureView;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    
    public class Main2Activity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
            StaticHolder.textureView = findViewById(R.id.tv);
            StaticHolder.textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
                @Override
                public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
                    initMediaPlayer(new Surface(surface));
                }
    
                @Override
                public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
    
                }
    
                @Override
                public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
                    return false;
                }
    
                @Override
                public void onSurfaceTextureUpdated(SurfaceTexture surface) {
    
                }
            });
    
    
            Button button = findViewById(R.id.bt);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent i = new Intent(Main2Activity.this, Main3Activity.class);
                    startActivity(i);
                    ((ViewGroup) StaticHolder.textureView.getParent()).removeView(StaticHolder.textureView);
                }
            });
        }
    
        MediaPlayer mediaPlayer;
    
        @SuppressLint("NewApi")
        public void initMediaPlayer(Surface surface) {
            try {
                mediaPlayer = MediaPlyerHelper.getMediaPlayer();
                mediaPlayer.setSurface(surface);
                mediaPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
                    @Override
                    public void onBufferingUpdate(MediaPlayer mp, int percent) {
    
                    }
                });
                mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mp) {
                        mp.start();
                    }
                });
                mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
                    @Override
                    public boolean onError(MediaPlayer mp, int what, int extra) {
                        return false;
                    }
                });
    
                AssetFileDescriptor fileDescriptor = getAssets().openFd("sample.mp4");
                mediaPlayer.setDataSource(fileDescriptor);
                mediaPlayer.prepare();
                mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        mp.start();
                    }
                });
    
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    }
    package com.example.administrator.videotest;
    
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.RelativeLayout;
    
    public class Main3Activity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main3);
            RelativeLayout rl = findViewById(R.id.rl);
            rl.addView(StaticHolder.textureView);
        }
    }

    代码很简单,不会看不懂吧。不解释了。

    看到效果了,可以的哦。既然可以,那么可以做的事就多了。

    先到这儿,下篇接聊无缝播放。

  • 相关阅读:
    模式识别之svm()---支持向量机svm 简介1995
    机器视觉之相关资源--- 计算机视觉相关的部分测试数据集和源码站点
    包的引入,不要引入自己目录下的。
    内省对象 用的少,被BeanUtils代替
    使用增强for循环遍历集合的时候操作集合的问题?
    Integer 内部实现
    eclipse常用快捷键
    java 运行时环境和编译器环境
    js 随机变换图片
    js 事件点击 显示 隐藏
  • 原文地址:https://www.cnblogs.com/mamamia/p/9476719.html
Copyright © 2011-2022 走看看