标签: mediametadataretriever

MediaExtractor,带有原始/资产文件的MediaMetadataRetriever

我尝试在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)

android mediacodec mediametadataretriever

16
推荐指数
1
解决办法
4893
查看次数

logcat错误:E/ExtMediaPlayer-JNI:env-> IsInstanceOf失败

我正试图在我的音乐播放器应用程序中获取每首歌的专辑封面.但除了黑屏,没有专辑封面,我什么都没得到.似乎代码中没有错误,除了我从未听说过的日志猫错误.

这是包含按钮单击的侦听器的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)

java user-interface android albumart mediametadataretriever

14
推荐指数
1
解决办法
4841
查看次数

MediaMetadataRetriever setDataSource抛出IllegalArgumentException

我正在尝试使用此类获取远程视频的大小,如果视频是远程的,我将收到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)

android mediametadataretriever

13
推荐指数
2
解决办法
2万
查看次数

从视频中获取多个缩略图

我正在使用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 mediametadataretriever android-thumbnail

8
推荐指数
1
解决办法
193
查看次数

MediaMetadataRetrieverJNI:getEmbeddedPicture失败

我正在使用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

java android mediametadataretriever

5
推荐指数
1
解决办法
1605
查看次数

MediaMetadataRetrieverJNI(14060):getFrameAtTime:videoFrame是NULL指针(Android)

我正在使用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 android-videoview mediametadataretriever

5
推荐指数
1
解决办法
7075
查看次数

如何使用MediaMetadataRetriever获取嵌入的章节元数据

有没有办法在Android中使用MediaMetadataRetriever获取mp3/m4a文件中嵌入式章节的元数据?这适用于仅音频文件.我只需要获取章节名称,起始位置和持续时间.嵌入式艺术品很不错但不是必需的.

我尝试过使用FFmpegMediaMetadataRetriever库,但我遇到了API 19的一些问题 .https://github.com/wseemann/FFmpegMediaMetadataRetriever

也许有一个更好的图书馆,我可以使用?

audio android metadata mediametadataretriever

5
推荐指数
1
解决办法
269
查看次数

Android MediaMetadataRetriever错误的视频高度和宽度

我想检索视频的高度和宽度,为此使用了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)

如何获得正确的值?谢谢

android android-view mediametadataretriever

5
推荐指数
1
解决办法
624
查看次数

MediaMetadataRetriever.setDataSource(Native Method)导致RuntimeException:status = 0xFFFFFFEA

我正在使用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)

java android mediametadataretriever react-native

0
推荐指数
1
解决办法
1974
查看次数