- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
通过实现用于实时流媒体的 Vitamio 库,努力为 G-Box 获得更好的质量。
代码中使用了具有 .mp4 视频的示例在线视频 URL。但是当我们在下载后在媒体播放器中播放时效果很好,而当我通过在线流媒体尝试时,质量变得很差。
以下是在videoView上播放视频的代码。
public class VideoViewDemo extends Activity {
/**
* TODO: Set the path variable to a streaming video URL or a local media file
* path.
*/
private String path = "";
private VideoView mVideoView;
private ProgressDialog progDailog;
ProgressDialog progressDialog=null;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
if (!LibsChecker.checkVitamioLibs(this))
return;
setContentView(R.layout.videoview);
mVideoView = (VideoView) findViewById(R.id.surface_view);
path = "http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4";
if (path == "") {
// Tell the user to provide a media file URL/path.
Toast.makeText(VideoViewDemo.this, "Please edit
VideoViewDemo Activity, and set path" +
" variable to your media file URL/path", Toast.LENGTH_LONG).show();
return;
} else {
/*
* Alternatively,for streaming media you can use
* mVideoView.setVideoURI(Uri.parse(URLstring));
*/
mVideoView.setVideoPath(path);
mVideoView.setVideoQuality(MediaPlayer.VIDEOQUALITY_HIGH);
mVideoView.setMediaController(new MediaController(this));
mVideoView.requestFocus();
progDailog = ProgressDialog.show(this, "Please wait ...",
"Retrieving data ...", true);
progDailog.setCancelable(true);
mVideoView.setOnPreparedListener(
new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
// optional need Vitamio 4.0
//mediaPlayer.setPlaybackSpeed(1.0f);
progDailog.dismiss();
}
});
mVideoView.setOnBufferingUpdateListener(
new OnBufferingUpdateListener() {
@Override
public void onBufferingUpdate(MediaPlayer arg0, int arg1) {
}
});
//mediaPlayer.setPlaybackSpeed(1.0f);
}
}
@Override
protected void onPause() {
mVideoView.pause();
super.onPause();
}
@Override
protected void onResume() {
mVideoView.resume();
progDailog.show();
super.onResume();
}
}
你的即时回复对我帮助很大
最佳答案
毫无疑问,Vitamio 是一个非常好的库,涵盖了与视频流相关的所有错误。
很抱歉,我对 Vitamio 支持团队感到非常失望。我在论坛上发布了问题,但没有收到和反馈。最后,我通过对提供的源进行矿工更改找到了我的问题的解决方案。
enter code here@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
if (!LibsChecker.checkVitamioLibs(this))
return;
setContentView(R.layout.mediaplayer_2);
mPreview = (SurfaceView) findViewById(R.id.surface);
holder = mPreview.getHolder();
holder.addCallback(this);
//holder.setFormat(PixelFormat.RGBA_8888);
holder.setFormat(PixelFormat.RGBX_8888);
extras = getIntent().getExtras();
}
private void playVideo(Integer Media) {
doCleanUp();
Log.e(TAG, "Value Received: " + Media);
try {
switch (Media) {
case LOCAL_VIDEO:
/*
* TODO: Set the path variable to a local media file path.
*/
path = "";
path = Environment.getExternalStorageDirectory() + "/big_buck_bunny.mp4";
Log.e(TAG, "PATH = : " + path);
if (path == "") {
// Tell the user to provide a media file URL.
Toast.makeText(MediaPlayerDemo_Video.this, "Please edit MediaPlayerDemo_Video
Activity, " + "and set the path variable to your media file path."
+ " Your media file must be stored on sdcard.", Toast.LENGTH_LONG).show();
return;
}
break;
case STREAM_VIDEO:
/*
* TODO: Set path variable to progressive streamable mp4 or
* 3gpp format URL. Http protocol should be used.
* Mediaplayer can only play "progressive streamable
* contents" which basically means: 1. the movie atom has to
* precede all the media data atoms. 2. The clip has to be
* reasonably interleaved.
*
*/
path = "http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4";
if (path == "") {
// Tell the user to provide a media file URL.
Toast.makeText(MediaPlayerDemo_Video.this, "Please edit MediaPlayerDemo_Video
Activity," + " and set the path variable to your media file URL.",
Toast.LENGTH_LONG).show();
return;
}
break;
}
// Create a new media player and set the listeners
mMediaPlayer = new MediaPlayer(this);
mMediaPlayer.setVideoQuality(MediaPlayer.VIDEOQUALITY_HIGH);
mMediaPlayer.setDataSource(path);
mMediaPlayer.setDisplay(holder);
mMediaPlayer.prepare();
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnVideoSizeChangedListener(this);
mMediaPlayer.getMetadata();
setVolumeControlStream
(AudioManager.STREAM_MUSIC);
//mMediaPlayer.setVideoQuality
(io.vov.vitamio.MediaPlayer.VIDEOQUALITY_HIGH);
} catch (Exception e) {
Log.e(TAG, "error: " + e.getMessage(), e);
}
}
示例源中有一个名为“MediaPlayerDemo_Video.java”的文件替换以下行holder.setFormat(PixelFormat.RGBA_8888);
跟随
holder.setFormat(PixelFormat.RGBX_8888);
这将解决整个问题。
关于使用 Vitamio 库的 Android VideoView 质量在电视盒上非常糟糕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19605839/
我使用透视滤镜在视频上放了一张图片。 示例 https://yadi.sk/i/MXtWUArJ3TyWBm 我怎样才能提高质量? 代码 ffmpeg -y -i bg.mp4 -loop 1 -i
我是 Matlab 的新手,虽然我知道一些其他的编程语言,所以如果这很简单,请原谅我。我无法在 StackOverflow 或其他地方找到任何答案。 我使用以下代码生成一个图形: figure(6)
我是 Matlab 的新手,虽然我知道一些其他的编程语言,所以如果这很简单,请原谅我。我无法在 StackOverflow 或其他地方找到任何答案。 我使用以下代码生成一个图形: figure(6)
在包含另一个类时,我总是需要写#include "headername.h"。是否可以在不编写其他类或使用“#include”包含多个类的情况下访问其他类? 最佳答案 什么 #include指令的作用
我有一个 .webm我想加速以延时拍摄的视频。我的原创.webm视频是 1280x720 并且质量非常好,但是当我用 FFMPEG 加速它时质量真的很差(即使分辨率保持不变)。这是我正在使用的命令:
我正在使用以下命令生成缩略图: mogrify -resize 128x128 -quality 75 "some thumb file" 对于示例文件: 如果我不指定质量 75,我会得到一个 40K
我想使用流体库的模型。谁能解释一下(我是建模/模拟的新手):质量/能量/动量平衡的公式:稳态、动态和初始猜测初始固定-->之间有什么区别以及对初始化时间/计算的影响是什么时间;我什么时候需要哪一个。
我通过解析“fmt 流映射”得到流 URL, 问题是如果我的视频时长不到 1 小时,我会得到这个: { "comment_count" = 1; description = ""; "dislikes
我试图根据用户的屏幕高度分辨率显示不同的视频分辨率,我有这段代码,但我不是 javascript 专家。它应该改变 src 属性,如果 res 低于 o 等于 360px 高度,等等。有什么建议吗?
我有播放 HLS 视频的 ExoPlayer,问题是我需要让用户能够更改视频质量(自动/1080/720/480)。 我发现使用 AdaptiveTrackSelection.Factory 确实可以
我的应用程序使用 phpmyadmin 连接到 mysql 中的数据库并将图像存储在数据库中,但我的问题是当我从数据库下载图像并将图像发布到 imageview 上时,图像的质量非常低颜色也受到影响。
大家好,我一直在使用 JavaFx 场景构建器来构建一个包含一些 png 图片的图形用户界面。 到目前为止,我一直在使用标签,然后将它们放大以适合图片(以便图片可见。但是这个解决方案并不令人满意,因为
我注意到,在显示比例为 1:1 的小图片时,它们通常看起来呈 block 状。我可以在使用 时解决问题通过使用更大比例的图像并使用 css 设置所需的大小来标记。 但是,我想用 background
我是自定义 CSS 的新手。我的老板希望我在 Qualtrics 中添加自定义 CSS(在外观/高级下)。在编辑预览窗口中,一切似乎都格式正确,但在实际调查页面上,许多元素的格式并未应用:图像是原始大
所以我尝试使用 CreateFont 尝试创建一种类似于我在 Photoshop 中使用的字体,但如果你仔细观察,Photoshop 中的质量要好得多。 这是我用来创建字体的代码: CreateFon
在自动去歪斜和裁剪之后我得到了下面的图像: 我需要对这张图片进行 OCR。现在 ABBYY Engine SDK 11 For Linux 产生的结果不是很好: IMerasers - www,rai
我目前在我的项目中使用 xorshift128+,我知道它通过了 Big Crush,并且被认为可以根据其速度生成相当高质量的随机数。但是,它会生成 64 位数字,而我需要的绝大多数随机数都是小整数(
我使用 python 以较小的质量保存 jpeg im = Image.open(file) im.save(cached_file, quality=80, optimize=True, progr
我在保存或使用 Gmagick PHP 扩展时找不到任何属性。 http://php.net/manual/en/book.gmagick.php 如何在 Gmagick 中更改 JPEG 质量? 最
youtube视频通常具有多种视频分辨率(质量),例如240p,360p,720p等,我如何检索youtube视频具有的视频分辨率(质量)是否有可以获取此信息的youtube api?Google.A
我是一名优秀的程序员,十分优秀!