相关文章推荐
无邪的橡皮擦  ·  5-9 ...·  6 月前    · 
含蓄的手套  ·  YUV 格式与 RGB ...·  11 月前    · 
苦恼的伤痕  ·  c# - ...·  1 年前    · 

在用SurfaceView播放视频时,如果处理不当,会出现有声音无图像的问题,主要的原因是,在调用MediaPlayer开始播放视频时,SurfaceView却还未创建成功,解决办法是判断SurfaceView创建成功后再调用MediaPlayer的播放,通过surfaceHolder的addCallBack()方法来监听surfaceCreated。

以下是2段源码,第1段有声音无图像,第2段有声音有图像

源码1:有声音无图像

import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class MainActivity extends Activity
	private SurfaceView surfaceView = null ;
    private SurfaceHolder surfaceHolder = null ;
    private MediaPlayer mp = null ;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)  
        super.onCreate(savedInstanceState);
        surfaceView = new SurfaceView(this);
                    在用SurfaceView播放视频时,如果处理不当,会出现有声音无图像的问题,主要的原因是,在调用MediaPlayer开始播放视频时,SurfaceView却还未创建成功,解决办法是判断SurfaceView创建成功后再调用MediaPlayer的播放,通过surfaceHolder的addCallBack()方法来监听surfaceCreated。 以下是2段源码,第1段有声音无图像,
				
使用VideoView播放视频简单、方便,但有些早期的开发者还是更喜欢使用MediaPlayer来播放视频,但由于MediaPlayer主要用于播放音频,因此它没有提供图像输出界面,此时就需要借助于SurfaceView来显示MediaPlayer播放的图像输出。 使用MediaPlayer播放视频的步骤如下: Step1:创建MediaPlayer对象,并让它加载指定的视频文件; Step2:在界面布局文件中定义SurfaceView控件,或在程序中创建SurfaceView控件,并为SurfaceView的SurfaceHolder添加Callback监听器; Step3:调用MediaPlayer对象的setDisney(SurfaceHolder sh)方法将所播放的视频图像输出到指定的SurfaceView控制; Step4:调用MediaPlayer的start()、stop()、pause()方法来控制视频播放。
android 播放视频时可能出现只有视频声音没有图像的现象,出现这种情况一般有一下几种可能: 1.视频本身问题。换个视频看看结果。 2.分辨率设置问题。holder.setFixedSize(width,heigh); 设置分辨率的方法应通过handler 在主线程设置。 3.没有设置MediaPlayer.setDisplay(SurfaceHolder sh)方法,或设置位置错误,
<application android:hardwareAccelerated="true"> <activity ... /> <activity android:hardwareAccelerated="false&am
在使用uniapp的video组件的时候,遇到进入页面播放正常,但再次进入重新加载页面后,会出现黑屏但有声音问题。 因为需求是要在离开页面后不再播放视频,所以这里在onShow时绑定视频组件,并开始播放: <video id="myVideo" :src="videosrc" object-fit="cover" :autoplay="true" loop="true" controls="false" custom-cache="false" enable-play-gesture="false"
这个视频格式是flv,推流走的是rmtp,是这个问题的解决我开始是直接百度了下,很多资料显示需要下载安装ubuntu后重新编译,感觉有点麻烦,找github上的issue,发现设置 android:hardwareAccelerated="true"
我理解您的问题是关于SurfaceView和SurfaceFlinger的区别和联系。 SurfaceViewAndroid提供的一个视图控件,它可以在一个独立的线程中绘制图形,而不会阻塞主线程。它通常用于需要高性能、流畅的图形绘制的场景,比如视频播放、游戏等。SurfaceView内部使用了Surface来管理图形缓冲区,这使得它可以更加高效地绘制图形。 SurfaceFlinger是Android系统中的一个系统服务,它负责管理屏幕显示。它从各个应用中收集图形数据,并将它们组合成最终的图像,然后再显示到屏幕上。SurfaceFlinger使用OpenGL ES来进行图形渲染,它支持硬件加速,可以提高图形渲染的性能。 在Android中,SurfaceView和SurfaceFlinger是紧密相关的。当一个应用使用SurfaceView进行图形绘制时,SurfaceView内部会创建一个Surface,然后将它交给SurfaceFlinger来进行显示。SurfaceView通过SurfaceHolder类来管理Surface的生命周期和状态,比如创建、销毁、显示等。SurfaceFlinger会根据SurfaceView传递过来的Surface信息,将对应的图像进行组合和渲染,最终显示到屏幕上。 总之,SurfaceView和SurfaceFlinger都是Android中用于图形处理和显示的重要组件。它们的结合使得Android应用能够更加高效地进行图形绘制和显示。