Articles of android mediaplayer

打盹模式和前台服务

检查我的应用程序在M预览设备上的行为,它的前景(带有活动通知)服务播放音乐似乎不受打盹模式的影响。 但阅读文档似乎只有AppStandby才能免除前台服务。 什么是真正的规则?

如何在Android中的不同视图中并排在一个布局中同时播放多个video文件

在Android中,我创建了一个并排有三个表面视图的布局,我想同时播放一个带有不同媒体播放器的video文件。 但是我遇到的一个问题是,三个人都不能同时播放该video。 其中一两个人停下了显示器。 如果我直接使用video视图而不是Media Player类,但问题仍然存在。 请任何人都可以提供帮助。 问题是什么? 它给错误表面创建失败原生错误。 我尝试了不同的组合,例如3个不同视图中的一个文件,三个不同视图中的三个文件,但问题尚未解决。 其他网站上的一些回复说它取决于内核版本。 如果它取决于内核版本,请你在android网站上给我任何android文档链接,它取决于内核版本。 或者可以玩,请给我代码的步骤。 这是错误日志 – 04-10 19:23:37.995: E/ANDROID_DRM_TEST(2573): Client::notify In 04-10 19:23:37.995: V/AudioPolicyManager(2573): startOutput() output 1, stream 3, session 131 04-10 19:23:37.995: V/AudioPolicyManager(2573): getDeviceForStrategy() from cache strategy 0, device 2 04-10 19:23:37.995: V/AudioPolicyManager(2573): getNewDevice() selected device 2 04-10 19:23:37.995: V/AudioPolicyManager(2573): setOutputDevice() output 1 device 2 delayMs […]

在旋转时更改MediaController位置

我正在尝试在方向更改时动态更改MediaController的锚点。 经过我的所有尝试后,这根本不能正常工作。 也许你可以指出我的错误。 简单来说: 肖像模式: weightSum = 1。 SurfaceView重量:0.4 MediaController和HorizontalScrollView权重:0.6 MediaController始终可见而不是隐藏 景观模式: SurfaceView重量:0.0(全屏) MediaControlls = View.Gone (我需要将其锚点更改为SurfaceView 。并popuponTouch。但是如何?) 代码: player.xml: 转换代码: @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (Global.getScreenOrientation(this) == Configuration.ORIENTATION_LANDSCAPE) { //hide action bar getSupportActionBar().hide(); if (myGallery != null) { //hide HorizontalScrollView myGallery.setVisibility(View.GONE); } //make surface fullscreen surfaceWrapper.setLayoutParams(new LinearLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT, 0f)); controlsWrapper.setLayoutParams(new LinearLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, […]

访问媒体播放器缓存

一旦完全加载,我想将逐步流式传输的mp3文件移动到SD卡。 有没有办法实现这一目标。 我已经看到MediaPlayer完全下载整个文件,而渐进式流媒体,然后我们可以寻找文件的任何部分。 我想将完全流式文件移动到外部存储器,以便将来播放不会浪费数据和电池。

当我尝试将显示设置为MediaPlayer时,表面已被释放

我的xml文件: 我的setDisplayfunction: public void playVideo() { MediaPlayer mp = new MediaPlayer(); SurfaceView sv = (SurfaceView) this.findViewById(R.id.surfaceView); try { mp.setDataSource(“sdcard/test/a.3gp”); SurfaceHolder sh = sv.getHolder(); mp.setDisplay(sh);***—-the exception occured here*** mp.prepare(); mp.start(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } […]

使用ExoPlayer重现加密video

我在Android中使用ExoPlayer ,我正在尝试重现本地存储的加密video。 ExoPlayer的模块化允许创建可以在ExoPlayer中注入的自定义组件,这似乎就是这种情况。 实际上,经过一些研究后我意识到,为了实现这个任务,我可以创建一个自定义DataSource并覆盖open() , read()和close() 。 我也find了这个解决方案 ,但实际上这里整个文件只需一步解密并存储在一个清晰的输入流中。 在许多情况下这可能是好的。 但是,如果我需要重现大文件怎么办? 所以问题是:如何在ExoPlayer中重现加密video,“在线”解密内容(不解密整个文件)? 这有可能吗? 我尝试创建一个具有open()方法的自定义DataSource: @Override public long open(DataSpec dataSpec) throws FileDataSourceException { try { File file = new File(dataSpec.uri.getPath()); clearInputStream = new CipherInputStream(new FileInputStream(file), mCipher); long skipped = clearInputStream.skip(dataSpec.position); if (skipped < dataSpec.position) { throw new EOFException(); } if (dataSpec.length != C.LENGTH_UNBOUNDED) { bytesRemaining = […]

如何在mediaplayer中更改字幕

我可以分配一次字幕,但之后如果我试图改变字幕。 它不接受新的,它每次都显示前一个。 下面的代码我用来改变字幕。 MediaPlayer mediaPlayer; public void changeSubtitle() { //disable subtitle if it has if(textTrackIndex!=0){ mediaPlayer.deselectTrack(textTrackIndex); textTrackIndex=0; mediaPlayer.setOnTimedTextListener(null); } //try to asssign new subtitle mediaPlayer .addTimedTextSource( (Environment.getExternalStorageDirectory() .getPath() + “/”+”filename”, MediaPlayer.MEDIA_MIMETYPE_TEXT_SUBRIP); int textTrackIndex = findTrackIndexFor(TrackInfo.MEDIA_TRACK_TYPE_TIMEDTEXT,mediaPlayer.getTrackInfo()); if (textTrackIndex >= 0) { mediaPlayer.selectTrack(textTrackIndex); } else { Log.w(TAG, “Cannot find text track!”); } mediaPlayer.setOnTimedTextListener(this); } private int findTrackIndexFor(int […]

Android:无法findQCMediaPlayer

我有一个媒体播放器的问题,因为我在我的lg智能手机上将我的android -version更新为5.0.2。 我有一个独立的课程来播放音乐 public class MediaPlayerService { public static MediaPlayer mediaPlayer; private static SoundPool soundPool; public static boolean isplayingAudio = false; static int soundID; public static enum State { Stopped, Playing, } static State mState = State.Stopped; public static void playAudioFromMediaPlayer(Context c) { mediaPlayer = new MediaPlayer(); mediaPlayer = MediaPlayer.create(c, R.raw.hooray); if (!mState.equals(State.Stopped)) { mediaPlayer.start(); […]

任何人都有MediaPlayer使用ParcelFileDescriptor和createPipe()?

与我最近关于MediaRecorder和createPipe()的问题以及对另一个SO问题中的createPipe()技术的讨论有关 ,我现在试图让MediaPlayer通过ParcelFileDescriptor和createPipe()由ContentProvider提供的内容。 这个示例项目是我迄今为止的工作。 它基于较早的示例,该示例播放存储为原始资源的OGG剪辑 。 因此,我知道我的剪辑很好。 我已将我的MediaPlayer设置更改为: private void loadClip() { try { mp=new MediaPlayer(); mp.setDataSource(this, PipeProvider.CONTENT_URI.buildUpon() .appendPath(“clip.ogg”) .build()); mp.setOnCompletionListener(this); mp.prepare(); } catch (Exception e) { goBlooey(e); } } 通过登录PipeProvider ,我看到我的Uri正在构建中。 PipeProvider与此示例项目中的相同,后者适用于将PDF提供给Adobe Reader,这限制了我的代码的使用方式。 🙂 具体来说, openFile()从ParcelFileDescriptor创建一个管道: @Override public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { ParcelFileDescriptor[] pipe=null; try { pipe=ParcelFileDescriptor.createPipe(); AssetManager assets=getContext().getResources().getAssets(); new TransferTask(assets.open(uri.getLastPathSegment()), […]

使用Android L Notification.MediaStyle添加终止播放按钮

我想使用新的Android L MediaStyle模板创建媒体播放通知。 现在,我成功完成了前一个,播放,暂停,下一个操作(通过使用addAction() ,但我找不到像Android Notifications Documentation屏幕截图中添加“关闭”按钮的方法: 有没有一种巧妙的方法来实现这一目标? 我希望“关闭”按钮终止当前正在播放的播放,清除播放通知,并按照附带的屏幕截图进行定位。