如何以编程方式设置媒体播放器卷.我用它来报警.任何帮助都非常感谢,并提前感谢.
我已实现以下代码,以测试通过URL从远程Web服务器播放视频.
videoView = (VideoView)this.findViewById(R.id.videoView);
MediaController mc = new MediaController(this);
videoView.setMediaController(mc);
videoView.setVideoURI(Uri.parse("http://sayedhashimi.com/downloads/android/movie.mp4"));
videoView.requestFocus();
Run Code Online (Sandbox Code Playgroud)
代码工作正常,即使在Android模拟器中也是如此.我只是想知道是否有任何监听器(或处理程序)来检测正在复制的视频的完成情况?
我现在有以下代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.player);
videoView = (VideoView)this.findViewById(R.id.videoView);
playVideo();
// video finish listener
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// not playVideo
// playVideo();
mp.start();
}
});
}
public void playVideo() {
MediaController mc = new MediaController(this);
videoView.setMediaController(mc);
videoView.setVideoURI(Uri.parse("http://sayedhashimi.com/downloads/android/movie.mp4"));
videoView.requestFocus();
}
Run Code Online (Sandbox Code Playgroud)
当刚刚调用该活动时,视频工作正常,但是当视频完成时,我希望它再次播放,但它没有发生.
我正在构建一个Android应用程序,它将从一个拉丁国家流式传输几个广播电台,我知道可以在android中播放10个电台,我从他们那里得到了URL,并且实际上使用了这个教程(链接已删除,因为它已经死了)但我遇到的问题是它会播放几秒钟然后停止它继续加载但不重启流式传输,我的问题是:
我必须在这里遗漏一些明显的东西,但我似乎无法找到任何东西让我确定MediaPlayer何时缓冲音频.我正在播放互联网音频,我想显示一个缓冲指示器,但我尝试过的任何东西都不能让我知道MediaPlayer何时中断音频缓冲,所以我无法正确显示缓冲指示器.有线索吗?
我在Galaxy S3上使用Android 4.1.2.目前android mediaplayer总是尝试RTSP UDP(RTP/AVP/UDP)方法与RTSP服务器连接.
如果Android MediaPlayer没有在其UDP端口上接收数据..超时,然后尝试RTSP TCP交错(RTP/AVP/TCP).这很好,但它引入了10秒左右的延迟.我想避免这种延迟,并强制Android MediaPlayer始终对所有或特定URL使用RTSP TCP交错(RTP/AVP/TCP).
我尝试在Here中给出建议,向SETUP请求发送461或400错误响应代码.但似乎媒体播放器不关心响应,并为两个轨道发送SETUP命令,然后挂起连接.
我该如何解决这个问题?
我正在将一个代码库从本机Holo(Theme.Holo等)移植到appcompat-v7(Theme.AppCompat等等).如果您不想阅读详细信息,最后一部分包含tl; dr.
一切正常,但我有问题复制一个很容易使用旧ActionBar的行为.我有一个视频播放器,在风景中我希望它的行为像YouTube:隐藏(动画)播放器控件,应用栏和状态栏.在用户交互时,UI控件应该保持"熄灯"模式并返回正常状态.如果用户没有触摸屏幕X秒,则计时器将返回到熄灯模式.使用ActionBar的相同代码不能用Toolbar.
所以,我使用的是:
setSystemUiVisibility() 使用以下组合之一:
View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREENView.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLEminSdkVersion 是16岁show()和hide()它Toolbar并添加了一个show()和一个hide()方法来做同样的事情(首先简单地使用setVisibility(),然后使用动画 - 得到相同的结果)在LAYOUT_STABLE做这样的appbar最终会在状态栏的背后,当然是(因为这意味着fitSystemWindows,由于appbar是视图层次结构中的普通视图和喜欢的动作条中,它是由该标志的影响是不是在装修这就是我在屏幕上看到的:

不能立即清楚工具栏界限是什么,因为应用栏在黑暗中是黑暗的,但是你可以看到标题被剪切并且"未对齐".这是因为工具栏的大小正确但位于状态栏后面.我的主要问题是,此时没有公共API来获取状态栏高度,矩形或其他任何内容以垂直移动我的应用栏以显示状态栏下方.
测试主要是在LPX13D上的N5上进行的(在撰写本文时最新的Lollipop公共版本),但在Android 4.4上也可以看到相同的情况.
也就是说,经过相当长的一段时间和一些失败的尝试使其以一种不太苛刻的方式工作(包括我自己试图将其置于装饰中的相当绝望的尝试),我采取了这种令人讨厌的方式使其工作:
在onResume:
a.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE)即使我通常不这样做也会打电话(风景)
b.注册一个OnPreDrawListener
在OnPreDrawListener:
a.使用View root = getRootView().findViewById(R.id.my_root)
b 获取根视图.获取根视图高度:( int rootTop = getAbsoluteViewTop(root) …
android media-player android-appcompat android-support-library android-toolbar
我一直在试图让MediaPlayer类尝试在Android 2.1上播放h.264编码的视频.我的代码很简单:
AssetFileDescriptor fileDescriptor = getResources().openRawResourceFd(R.raw.my_movie);
introMoviePlayer = new MediaPlayer();
introMoviePlayer.setDataSource(fileDescriptor.getFileDescriptor(), fileDescriptor.getStartOffset(), fileDescriptor.getDeclaredLength());
introMoviePlayer.prepare();
Run Code Online (Sandbox Code Playgroud)
这总是会prepare()在文本中引发异常java.io.IOException: Prepare failed.: status=0x1.我通过使用MediaPlayer.create()一个URI 获得了更多的信息,这个URI也会抛出prepare(),实际上是由MediaPlayer.create()消息引起的Command PLAYER_PREPARE completed with an error or info PVMFErrResourceConfiguration.
相同的代码在Froyo(2.2)中完美运行.视频本身在视频播放器应用中播放得很好.有没有人可能有一个有用的提示可能有助于解决这个问题?
编辑:仍然没有解决方案 - 非常令人沮丧的问题.但是,我发现通过创建VideoView和设置原始视频的URI工作.这非常令人费解,因为通过MediaPlayer类发送完全相同的URI将会抛出.
我正在开发一个视频流应用程序,并且在使用FileDescriptor调用set setDataSource时遇到困难.我希望我的应用程序在下载时播放视频,所以一旦我得到最小字节数,我将这些字节移动到另一个文件,这样它就可以在原始文件中下载时在另一个文件中播放.
所以,我检查一下我是否可以像这样启动每个数据包的媒体:
if (mediaPlayer == null) {
// Only create the MediaPlayer once we have the minimum
// buffered data
if (totalKbRead >= INTIAL_KB_BUFFER) {
try {
startMediaPlayer();
} catch (Exception e) {
Log.e(getClass().getName(),
"Error copying buffered conent.", e);
}
}
} else if (mediaPlayer.getDuration()
- mediaPlayer.getCurrentPosition() <= 1000) {
transferBufferToMediaPlayer();
}
}
Run Code Online (Sandbox Code Playgroud)
这是startMediaPlayer方法代码:
private void startMediaPlayer() {
try {
File bufferedFile = new File(context.getCacheDir(), "playingMedia"
+ (counter++) + ".dat");
// bufferedFile is the one that'll be played
moveFile(downloadingMediaFile, …Run Code Online (Sandbox Code Playgroud) 这段代码以前有用.然后,也许我在某处改变了某些东西(或者如果我知道Android正确,则更新会在媒体播放器中引入错误).它停止在某些设备上工作!特别是我的Nexus S(2.3.6).
该test.m4a应用程序下载了该文件(17 775 201字节).为了验证其完整性,我将其复制到SD并在我的PC上播放.没问题!二进制 - 将它与原始文件进行比较,它匹配100%.
try {
_mediaPlayer = new MediaPlayer();
_mediaPlayer.setOnCompletionListener(this);
_mediaPlayer.setOnPreparedListener(this);
_mediaPlayer.setOnSeekCompleteListener(this);
_mediaPlayer.setOnBufferingUpdateListener(this);
_mediaPlayer.setOnInfoListener(this);
_mediaPlayer.setOnErrorListener(this);
// I even tried reading the file from SD card. Same error...
File file = new File("/data/data/com.mycompany.myapp/files/MediaCache/Test.m4a");
// file.isFile() == true
// file.length() == expected value!
FileInputStream is = new FileInputStream(file);
_mediaPlayer.setDataSource(is.getFD()); // Throws!
// If I use the filename as parameter, it throws later when preparing the media player...
_mediaPlayer.prepareAsync();
}
catch (Exception e) {
// …Run Code Online (Sandbox Code Playgroud) 我在res/raw文件夹中有多个音频文件.我显示ListView包含音频文件名称.我想在用户选择时播放相应的音频文件ListView.我已经习惯了setDataSource(path),但是在播放时显示错误.如何直接从该文件夹播放音频文件?或者还有其他方法吗?
android ×10
media-player ×10
java ×2
audio ×1
buffering ×1
eclipse ×1
ioexception ×1
r.java-file ×1
rtsp ×1
rtsp-client ×1