android 媒体播放器显示音频但不显示视频

2023-12-11

我正在使用媒体播放器来播放视频。它只播放音频而不播放视频。有人可以帮忙吗?我的代码如下。

public class VideoViewApplication extends Application {

    @Override
    public void onCreate() {
    }

    @Override
    public void onTerminate() {
    }
}


public class VideoViewDemo extends Activity implements 

    OnErrorListener,OnBufferingUpdateListener, OnCompletionListener,
    MediaPlayer.OnPreparedListener, SurfaceHolder.Callback  {

    private static final String TAG = "VideoViewDemo";

    private MediaPlayer mp;
    private EditText mPath;  
    private SurfaceHolder holder;

    private ImageButton mPlay;
        private ImageButton mPause;
    private ImageButton mReset;
    private ImageButton mStop;
    private String current;
    private SurfaceView mPreview;


    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        mPreview = (SurfaceView) findViewById(R.id.surface);

        mPath = (EditText) findViewById(R.id.path);
        mPath.setText("rtsp://video2.americafree.tv/AFTVHorrorH26496.sdp");

        mPlay = (ImageButton) findViewById(R.id.play);
        mPause = (ImageButton) findViewById(R.id.pause);
        mReset = (ImageButton) findViewById(R.id.reset);
        mStop = (ImageButton) findViewById(R.id.stop);


        mPlay.setOnClickListener(new OnClickListener() {
            public void onClick(View view) {
                playVideo();
            }
        });
        mPause.setOnClickListener(new OnClickListener() {
            public void onClick(View view) {
                if (mp != null) {
                    mp.pause();
                }
            }
        });
        mReset.setOnClickListener(new OnClickListener() {
            public void onClick(View view) {
                if (mp != null) {
                    mp.seekTo(0);
                }
            }
        });
        mStop.setOnClickListener(new OnClickListener() {
            public void onClick(View view) {
                if (mp != null) {
                    current = null;
                    mp.stop();
                    mp.release();
                }
            }
        });

        // getWindow().setFormat(PixelFormat.TRANSPARENT);
        holder = mPreview.getHolder();
        holder.addCallback(this);
        holder.setFixedSize(100, 100);

        runOnUiThread(new Runnable(){
            public void run(){
                playVideo();
            }
        });
    }

    private void playVideo() {
        try {
            final String path = mPath.getText().toString();
            Log.v(TAG, "path: " + path);

            if (path.equals(current) && mp != null) {
                mp.start();
                return;
            }
            current = path;

            mp = new MediaPlayer();
            mp.setOnErrorListener(this);
            mp.setOnBufferingUpdateListener(this);
            mp.setOnCompletionListener(this);
            mp.setOnPreparedListener(this);
            mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mp.setScreenOnWhilePlaying(true);

            mp.setDisplay(mPreview.getHolder());
            mp.setDataSource(path);
            mp.prepare();

            Log.v(TAG, "Duration: ===>" + mp.getDuration());
            mp.start();

        } catch (Exception e) {
            Log.e(TAG, "error: "+ e.getMessage(), e);
            if (mp != null) {
                mp.stop();
                mp.release();
            }
        }
    }

    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
        Log.d(TAG, "surfaceChanged called");
    }

    public void surfaceCreated(SurfaceHolder arg0) {
        Log.d(TAG, "surfaceCreated called");
    }

    public void surfaceDestroyed(SurfaceHolder arg0) {
        Log.d(TAG, "surfaceDestroyed called");
    }

    public void onPrepared(MediaPlayer arg0) {
        Log.d(TAG, "onPrepared called");
    }

    public void onCompletion(MediaPlayer arg0) {
        Log.d(TAG, "onCompletion called");
    }

    public void onBufferingUpdate(MediaPlayer mediaPlayer, int percent) {
        Log.d(TAG, "onBufferingUpdate called --->   percent:" + percent);
    }

    public boolean onError(MediaPlayer mediaPlayer, int what, int extra) {
        Log.e(TAG, "onError---> what:"+what+"   extra:"+extra);
        if (mediaPlayer != null) {
            mediaPlayer.stop();
            mediaPlayer.release();
        }
        return true;
    }


}



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >
    <EditText android:id="@+id/path"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
            />
    <SurfaceView
            android:id="@+id/surface"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
    </SurfaceView>

    <LinearLayout
            android:orientation="horizontal"
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            >
        <ImageButton android:id="@+id/play"
                     android:layout_height="wrap_content"
                     android:layout_width="wrap_content"
                     android:src="@drawable/play"/>
        <ImageButton android:id="@+id/pause"
                     android:layout_height="wrap_content"
                     android:layout_width="wrap_content"
                     android:src="@drawable/pause"/>
        <ImageButton android:id="@+id/reset"
                     android:layout_height="wrap_content"
                     android:layout_width="wrap_content"
                     android:src="@drawable/reset"/>
        <ImageButton android:id="@+id/stop"
                     android:layout_height="wrap_content"
                     android:layout_width="wrap_content"
                     android:src="@drawable/stop"/>
    </LinearLayout>
</LinearLayout>

我遇到了这个问题,并通过使用这种折旧方法设置类型来解决它。

holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

值得一试,如果它有效,您可以调查为什么类型没有按预期自动设置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android 媒体播放器显示音频但不显示视频 的相关文章

随机推荐

  • JPA 和 Bean 验证的唯一约束

    我想要一个 UniqueBean Validation 的约束 但这不是标准提供的 如果我使用 JPA UniqueConstraint我不会有独特的验证和错误报告机制 有没有办法定义 Unique作为 Bean Validation 约束
  • 如何使用AJAX上传大型CSV文件? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我们有一些包含大量记录的 CSV 文件 需要使用 Web 界面将此文件上传到 MySQL 数据库 这些文件是从不同的现场工作中收集的 并通过网络应用程序上传到服务器 Web 应用
  • Android原生webrtc:已连接后添加视频

    我已经使用 Google 代码库中的 libjingle so 和 PeerConnectionClient java 等在我的 Android 应用程序中成功运行 WebRTC 一段时间了 但是 我现在遇到一个问题 用户仅以音频方式启动连
  • 在 Python 2.7 中,如何覆盖单个函数的字符串表示形式?

    如何覆盖 Python 中单个函数的字符串表示形式 我尝试过的 gt gt gt def f pass gt gt gt f
  • 异步 ReadDirectoryChangesW 调用会阻止线程退出

    介绍 我正在编写一个小应用程序 用于监视某个目录中是否有新添加的文件 我想将监控代码放在一个单独的线程中 这样我就可以让主线程自由用于其他事情 并在需要时取消监控线程 相关信息 我在用读取目录更改W进行监控 我正在使用原始 WIN32 AP
  • pandas DataFrame 的反向地理编码

    我们有经度和纬度数据 需要将它们转换为纽约市的邮政编码 有什么方法可以处理 20 000 行的 python 包吗 uszipcode 包可以满足您的需求 from uszipcode import SearchEngine search
  • 动态显示资源/可绘制图像

    我正在尝试将不同的图像 jpg png 动态地放入ListView from res drawable 我从数据库中获取的图像的名称 图像本身位于res drawable folder 这是我已经拥有的 错误为 D 字符串图像名称 gt 数
  • Java 和 C# 中的 getBytes() 等效项

    我想将 Java 中的类转换为 C 大部分更改已经完成 但我对此部分不太确定 我想转换这行代码 byte arrayOfByte1 paramString getBytes 我已经尝试过这个 byte arrayOfByte1 BitCon
  • Angular ui-router 嵌套视图不会刷新 Angular 服务检索到的数据

    我有一个不平凡的 Angular SPA 它使用 ui router 来管理多个视图 其中许多视图同时可见 我需要模型在控制器之间可见 因此我编写了服务 允许控制器拉取已更新的模型数据的新副本 我提前为问题的长度表示歉意 但我会先说明问题
  • 在 Google Maps API v3 中仅打开一个 InfoWindow

    我只需在 Google 地图上打开一个 InfoWindow 在打开新的 InfoWindows 之前 我需要关闭所有其他 InfoWindows 有人可以告诉我该怎么做吗 您只需创建一个InfoWindow对象 保留对其的引用 并为所有标
  • 使用 MVC 和实体框架实施审核日志/更改历史记录

    我正在使用实体框架在我的 MVC 应用程序中构建更改历史记录 审核日志 所以具体在编辑方法中public ActionResult Edit ViewModel vm 我们找到我们正在尝试更新的对象 然后使用TryUpdateModel o
  • 如何让 Homebrew 恢复到之前的状态?

    我删除了一些 rb 文件 cassandra rb 电子邮件受保护 and 电子邮件受保护 从文件夹 usr local Homebrew Library Taps homebrew homebrew core Formula 来自 mac
  • Win32 中的 Sleep() 使程序无响应

    基本上就是标题所说的 我想当用户按下特定按钮时每 1 秒更新一次按钮包含的文本 我注意到 当程序没有焦点时 它可以正常工作并且文本刷新正确 但是当我将鼠标悬停在程序上或尝试单击它的菜单时 Windows 通知我该程序没有响应 并询问我是否我
  • 关于传统解释器、编译器和 JIT 编译器/解释器的澄清

    我正在学习 Java 以下事情对我来说有点困惑 我的理解是 Java编译器 Java 编译器只是转换 java程序进入 class文件 这意味着将我们的源代码转换为字节码 它是虚拟机 JVM 的操作码列表 这使得 Java 平台无关 Jav
  • 这是一个错误的 REST URL 吗?

    我刚刚阅读了有关 REST URL 的内容并看到了以下示例 API 用户 获取用户 现在 如果使用动词 GET 通过 HTTP 进行访问 这不是一个错误的 URL 因为它描述了 URL 中的操作 GET 这更像是一个惯例 而不是硬性规则 但
  • 现在有人可以下载 Eclipse 吗?

    我无法下载 Eclipse 这是Eclipse的问题吗 这是链接https www eclipse org downloads packages 是的 在计划内的维护中断之后 eclipse org 网站是很遗憾无法到达的到目前为止 202
  • 调用未定义的方法 Illuminate\Pagination\Paginator::make()?

    这是我的代码 use Illuminate Support Collection use Illuminate Support Facades Input use Illuminate Pagination Paginator collec
  • CakePHP - 分页和排序二级关联

    我知道这个问题已经被问了 100 000 次 但我几乎阅读了所有 100 000 条回复 但似乎没有一个符合我的要求 我已经尝试了所有可能的组合 显然没有 但我担心我会在如此相对简单的事情上失败 这是我的第二个蛋糕项目 所以我绝不是专家 简
  • 如何绘制混合箱线图:一半箱线图,另一半有抖动点?

    我正在尝试制作与图 2d f 类似的图文章发表在 自然 杂志上今年 它基本上是一半箱线图 另一半是点 有人能给我一些提示吗 非常感谢 这些是我的数据和代码 它们生成了带有点的完整框 require magrittr require tidy
  • android 媒体播放器显示音频但不显示视频

    我正在使用媒体播放器来播放视频 它只播放音频而不播放视频 有人可以帮忙吗 我的代码如下 public class VideoViewApplication extends Application Override public void o