我尝试在raw/assets文件夹中读取视频文件,我尝试了以下方法,但没有一个工作.我正在测试API 16.每种方法,我尝试使用和不使用mp4扩展.我真的很感激有人可以帮助我
所有方法都不会崩溃,MediaMetadataRetriever
可以设置数据源,但不能获取宽度,高度和截图.VideoExtractor
总是回来
06-04 16:44:10.519: E/FileSource(8695): Failed to open file FILE_PATH. (No such file or directory)
06-04 16:44:10.519: E/DecodeActivity(8695): Can't find video info!
Run Code Online (Sandbox Code Playgroud)
方法1:android.resource
String filePath = "android.resource://" + this.activity.getPackageName() + "/raw/green_backhand_slice";
videoExtractor.setDataSource(activity.getApplicationContext(), Uri.parse(filePath), null);
metaRetriever.setDataSource(act.getApplication(), Uri.parse(filePath));
Run Code Online (Sandbox Code Playgroud)
方法2:android_asset
this.filePath = "file:///android_asset/green_backhand_slice";
videoExtractor.setDataSource(activity.getApplicationContext(), Uri.parse(this.filePath), null);
metaRetriever.setDataSource(act.getApplication(), Uri.parse(filePath));
Run Code Online (Sandbox Code Playgroud)
方法3:资产文件描述符
AssetFileDescriptor assetFD = null;
try {
assetFD = getAssets().openFd("green_backhand_slice.mp4");
} catch (IOException e) {
e.printStackTrace();
}
metaRetriever.setDataSource(assetFD.getFileDescriptor());
Run Code Online (Sandbox Code Playgroud) 我正试图在我的音乐播放器应用程序中获取每首歌的专辑封面.但除了黑屏,没有专辑封面,我什么都没得到.似乎代码中没有错误,除了我从未听说过的日志猫错误.
这是包含按钮单击的侦听器的Java文件.一旦我点击按钮在我的应用程序中,我在logcat中得到一个错误:Bacon1.java
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.os.Environment;
import android.support.design.widget.Snackbar;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
public class Bacon1 extends Activity {
private static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 1;
private static int RESULT_LOAD_IMAGE = 1;
public ArrayList<HashMap<String, String>> songsList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bacon1);
Button button4 = (Button) findViewById(R.id.button4);
button4.setOnClickListener(
new Button.OnClickListener()
{
public void …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用此类获取远程视频的大小,如果视频是远程的,我将收到IllegalArgumentException.
视频是存储在一台服务器上的mp4 ......
如果我使用媒体播放器播放视频,视频播放正确,但如果我尝试这样做,则会出错:
try {
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
Bitmap bmp = null;
retriever.setDataSource(context, uri);
bmp = retriever.getFrameAtTime();
videoHeight = (int) (bmp.getHeight()*((float)getIntWidth()/bmp.getWidth()));
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
错误是在这一行引发的:
retriever.setDataSource(context, uri);
Run Code Online (Sandbox Code Playgroud)
和uri包含 Uri.parse("http://www.myweb.com/myvideo.mp4");
代码有什么问题?
12-19 13:38:08.610: W/System.err(13333): java.lang.IllegalArgumentException
12-19 13:38:08.611: W/System.err(13333): at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:175)
Run Code Online (Sandbox Code Playgroud) 我正在使用MediaMetadataRetriever
视频中特定时间检索缩略图.这就是我实现这个目标的方法:
MediaMetadataRetriever metadataRetriever = new MediaMetadataRetriever();
try {
metadataRetriever.setDataSource(MainActivity.this, Uri.parse("android.resource://packageName/raw/"+"test"));
String duration=metadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
long time = Long.valueOf(duration)/3;
Bitmap bitmap1 = metadataRetriever.getFrameAtTime(time,MediaMetadataRetriever.OPTION_CLOSEST_SYNC);
imgone.setImageBitmap(bitmap1);
}catch (Exception ex) {
Toast.makeText(MainActivity.this, String.valueOf(ex), Toast.LENGTH_SHORT).show();
}
Run Code Online (Sandbox Code Playgroud)
这会返回一个预期的位图/缩略图,问题是如果我想在视频中的不同时间获得多个缩略图,如下所示:
MediaMetadataRetriever metadataRetriever = new MediaMetadataRetriever();
try {
metadataRetriever.setDataSource(MainActivity.this, Uri.parse("android.resource://packageName/raw/"+"test"));
String duration=metadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
long time = Long.valueOf(duration)/3;
long time2 = time+time;
long time3 = time+time+time;
Bitmap bitmap1 = metadataRetriever.getFrameAtTime(time,MediaMetadataRetriever.OPTION_CLOSEST_SYNC);
Bitmap bitmap2 = metadataRetriever.getFrameAtTime(time2,MediaMetadataRetriever.OPTION_CLOSEST_SYNC);
Bitmap bitmap3 = metadataRetriever.getFrameAtTime(time3,MediaMetadataRetriever.OPTION_CLOSEST_SYNC);
imgone.setImageBitmap(bitmap1);
imgtwo.setImageBitmap(bitmap2);
imgthree.setImageBitmap(bitmap3);
}catch (Exception ex) {
Toast.makeText(MainActivity.this, String.valueOf(ex), Toast.LENGTH_SHORT).show();
}
Run Code Online (Sandbox Code Playgroud)
然后它仍然只返回相同的缩略图,我不确定它是否是因为只有一个缩略图可用于视频或什么,但我尝试了不同的视频文件具有相同的结果.
我已尝试更改 …
我正在使用android并遍历数百个mediafile,以找到第一张嵌入式图片,效果很好,但在我的logcat中却发了很多错误。
我正在使用此代码:
for (String s : ArrayList <String> paths){
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(path);
byte[] data = mmr.getEmbeddedPicture();
if (data != null) {
...
}
Run Code Online (Sandbox Code Playgroud)
它记录的错误是:
E/MediaMetadataRetrieverJNI? getEmbeddedPicture: Call to getEmbeddedPicture failed.
E/MediaMetadataRetrieverJNI? getEmbeddedPicture: Call to getEmbeddedPicture failed.
E/MediaMetadataRetrieverJNI? getEmbeddedPicture: Call to getEmbeddedPicture failed.
E/MediaMetadataRetrieverJNI? getEmbeddedPicture: Call to getEmbeddedPicture failed.
E/MediaMetadataRetrieverJNI? getEmbeddedPicture: Call to getEmbeddedPicture failed.
E/MediaMetadataRetrieverJNI? getEmbeddedPicture: Call to getEmbeddedPicture failed.
.....
Run Code Online (Sandbox Code Playgroud)
我使用的对吗?如果可以,则可以抑制该错误,这会使调试变得烦人。根据MediaMetadataRetriever,它应该简单地返回null
我正在使用MediaMetadataRetriever通过视频帧创建缩略图,但是我在Logcat中收到此消息:
E / MediaMetadataRetrieverJNI(14060):getFrameAtTime:videoFrame是NULL指针
这是我的代码:
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
Uri videoURI = Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.video_one);
retriever = new MediaMetadataRetriever();
retriever.setDataSource(mContext, videoURI);
Bitmap bitmap = retriever.getFrameAtTime(100000,MediaMetadataRetriever.OPTION_CLOSEST_SYNC );
Drawable drawable = new BitmapDrawable(getResources(), bitmap);
holder.imageView.setImageDrawable(drawable);
holder.progressBar.setVisibility(View.INVISIBLE);
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试了这个FFmpegMediaMetadataRetriever库,但是它在Logcat中产生了这个:
01-19 12:38:33.371: D/dalvikvm(20821): Trying to load lib /data/data/wseemann.media.demo/lib/libavutil.so 0x41733c90
01-19 12:38:33.371: D/dalvikvm(20821): Added shared lib /data/data/wseemann.media.demo/lib/libavutil.so 0x41733c90
01-19 12:38:34.121: W/System.err(20821): java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFFF
01-19 12:38:34.121: W/System.err(20821): at wseemann.media.FFmpegMediaMetadataRetriever.setDataSource(Native Method)
01-19 …
Run Code Online (Sandbox Code Playgroud) 有没有办法在Android中使用MediaMetadataRetriever获取mp3/m4a文件中嵌入式章节的元数据?这适用于仅音频文件.我只需要获取章节名称,起始位置和持续时间.嵌入式艺术品很不错但不是必需的.
我尝试过使用FFmpegMediaMetadataRetriever库,但我遇到了API 19的一些问题 .https://github.com/wseemann/FFmpegMediaMetadataRetriever
也许有一个更好的图书馆,我可以使用?
我想检索视频的高度和宽度,为此使用了MediaMetadataRetriever类。在大多数情况下,它是正确的,但是在少数情况下,高度和宽度可以互换。
我认为这可能是由于方向改变而发生的。
我当前的代码:
MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever();
metaRetriever.setDataSource(videoPath);
videoHeight = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);
videoWidth = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);
Run Code Online (Sandbox Code Playgroud)
如何获得正确的值?谢谢
我正在使用ReactNative构建媒体播放器.为了完成这样的应用程序,我必须导出我为检索音乐元数据(如专辑,艺术家等)以及文件路径而构建的模块.
上面的代码使用jdk1.8.0_112完美地工作,但是因为我更新到jdk1.8.0_144它停止了工作.
在这个例子中,我没有检查不是null,不是空,长度> 0等,但我真的在原来的那个.
try {
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource("Path to the file"); // /storage/337C-1C15/Music/Edguy/Speedhoven.mp3
} catch (RuntimeException ex) {
// java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA
}
Run Code Online (Sandbox Code Playgroud)
我面临两个问题.一方面,我不是一个伟大的Android开发者,所以获得一些线索是一项艰巨的任务.另一方面,错误确实提供了良好的描述.
为了防止你们中的一些人有更好的方法来完成我的尝试,我在这里留下了整个代码:
@ReactMethod
public void getAll(Callback errorCallback, Callback successCallback){
ContentResolver musicResolver = this.getCurrentActivity().getContentResolver();
Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);
if (musicCursor != null && musicCursor.moveToFirst()) {
WritableArray jsonArray = new WritableNativeArray();
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
WritableMap items …
Run Code Online (Sandbox Code Playgroud) android ×9
java ×3
albumart ×1
android-view ×1
audio ×1
mediacodec ×1
metadata ×1
react-native ×1