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 媒体播放器显示音频但不显示视频 的相关文章

  • 如何在android中实现触摸平滑图像橡皮擦?

    我已经从 API 演示中看到了finturePaint java 我想实现触摸平滑橡皮擦 通过在android中触摸移动来擦除部分图像 FingerPaint 告诉我要实现这个 mPaint setXfermode new PorterDu
  • AdapterContextMenuInfo 始终为 null

    我尝试通过 android 开发文档中的书来做到这一点 this didn t create a menu i don t know why registerForContextMenu getListView setListAdapter
  • Recyclerview 动态部分不使用任何第三个库

    我想将标头添加到 recyclerview 我正在尝试使用来实现它 Override public int getItemViewType int position depends on your problem if position 0
  • Android 初学者:Android gridview 中的触摸事件

    我正在使用以下代码来使用 gridview 执行操作 稍作修改http developer android com resources tutorials views hello gridview html http developer a
  • Dialog.setTitle 不显示标题

    我正在尝试向我的对话框添加自定义标题 但是每当我运行我的应用程序时 它都不会显示标题 我创建对话框的代码是 final Dialog passwordDialog new Dialog this passwordDialog setCont
  • 以编程方式将文本颜色设置为主要 Android 文本视图

    如何设置我的文本颜色TextView to android textColorPrimary以编程方式 我已经尝试了下面的代码 但它将 textColorPrimary 和 textColorPrimary Inverse 的文本颜色始终设
  • ExoPlayer2 - 如何使 HTTP 301 重定向工作?

    我开始使用 ExoPlayer 来传输一些音频 一切都很顺利 直到我遇到一个带有 301 永久移动 重定向的 URL ExoPlayer2 默认情况下不处理该问题 我已经看过这个线程 https github com google ExoP
  • Android Eclipse 上的 Web 服务

    我是 android eclipse java 的新手 事实上这个论坛也是如此 有人遇到过这种情况吗 从用户那里获取输入并通过使用 android eclipse 中的 Web 服务来显示适当的结果 有可用的示例吗 非常感谢 我正在发布教程
  • 对于一个单元格,RecyclerView onBindViewHolder 调用次数过多

    我正在将 RecyclerView 与 GridLayoutManager 一起使用 对于网格中的每个项目 我需要调用 REST api 来检索数据 然后 从远程异步获取数据后 我使用 UIL 加载 显示图像 一切似乎都很好 但我发现 on
  • okhttp 获取失败响应

    我已经在我的 android 客户端中实现了 okhttp 来进行网络调用 当我收到失败响应时 我会收到失败代码以及与该代码相关的文本作为消息 但我没有收到服务器发送给我的自定义失败响应 在我实施的代码中的失败响应中 我收到的消息只是 错误
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • OnLongClickListener 不工作

    我有一个ImageView 我需要使用onLongClickListener对于图像视图 当我使用这段代码时 什么也没有发生 Code gallery Gallery findViewById R id gall1 gallery setA
  • 如何在 Android 中从 WorkManager 取消工作?

    我已经保存了 WorkManagerUUID转换成String在领域数据库中 这是代码 Constraints constraints new Constraints Builder setRequiredNetworkType Netwo
  • 在命令行上卸载 Android SDK 的选定部分

    这与 卸载旧的 Android SDK 版本 https stackoverflow com questions 15182377 uninstall old android sdk versions 除非我想在无头 Linux CI 服务
  • 如何检查 Android 中的同步设置

    我正在构建一个 Android 应用程序 我需要检查设备中注册的每个单独帐户的同步设置 我知道我可以通过 ContentResolver 类来做到这一点 但我遇到了一些问题 我已设法获取设备上所有帐户的列表 但我不知道在运行时从哪里获取特定
  • 没有用于警告的设置器/字段 Firebase 数据库检索数据填充列表视图

    我只是想将 Firebase 数据库中的数据填充到我的列表视图中 日志显示正在检索数据 但适配器不会将值设置为列表中单个列表项中的文本 它只说 没有二传手 场地插入值 这让我觉得我的设置器没有正确制作 但 Android Studio 自动
  • 通过系统应用程序以编程方式静默安装 apk(无需 root)

    我有带有 android sharedUserId android uid system UID 1000 的系统级应用程序 设备未root INSTALL PACKAGES 权限包含在清单中 我可以静默安装下载的 apk 吗 我已经发现这
  • 插件“Android Bundle Support”不兼容

    大家好 自从上次更新以来 当我启动 android studio 时 我遇到了一个非常奇怪的错误 我有这个错误 插件错误 插件 Android Bundle Support 不兼容 直到构建 AI 195 SNAPSHOT 我在网上找不到任
  • 问题:为什么React Native Video不能全屏播放视频?

    我正在react native 0 57 7 中为android和ios创建一个应用程序并使用反应本机视频 https github com react native community react native video播放上传到的视频
  • 没有支持 FEATURE_CAMERA_EXTERNAL 的 Android 设备

    根据this doc https source android com devices camera external usb cameras一些 Android 设备允许使用 Camera2 API 访问外部 USB 摄像头 我检查了大约

随机推荐

  • 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