بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

نمایش thumbnail ویدئو آنلاین در Imageview

مدیریت گفتگو
Hossein Kurd 11 سال پیش
آخرین تغییر: 11 سال پیش

آیا امکان نمایش thumbnail ویدئو آنلاین بدون دانلود وجود داره ؟

MinSDK 10

نظرات

پاسخ‌ها 4

کاشی زاده 11 سال پیش

اگر آنلاین هست که هیچی مستقیم عکس رو از سرور بخونید ولی اگر ویدئو آفلاین هست روش زیر رو پیش بگیرید.

با استفاده از کد زیر آدرس ویدئو رو بهش بدید و Thumbnail رو تحویل بگیرید ، میتونید به یک متد استاتیک در Helper تبدیل کنید .

 

 Bitmap thumb =ThumbnailUtils.createVideoThumbnail(videoPath,MediaStore.Images.Thumbnails.MINI_KIND);

نظرات

Hossein Kurd 11 سال پیش
آنلاین، سرور تصویر نمی ده، اگر تصویر می داد که مشکل نداشتم
Hossein Kurd 11 سال پیش
نمی خوام حجم نرم افزار رو ببرم بالا، یه روش مناسب پیدا کردم
کاشی زاده 11 سال پیش
روشتون رو بگید تا بقیه هم استفاده کنند
Criss 11 سال پیش
این کار تصویر میده < اما روی اندروید 4 به بالا مشکل داره <
کاشی زاده 11 سال پیش
از لایبری که معرفی کردم استفاده کردی ؟
Criss 11 سال پیش
لایبری رو به درستی ایمپورت کردم < اما برنامه تنها باید خط کرش میکنه < اون هم زمانی که یک نمونه از لایبری رو میسازم ! FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever
Criss 11 سال پیش

خب من فکر میکردم اضاف کردن فایل JAR کافی باشه < اما توضیحات که بیشتر خوندم لازم هست که فایل ها و بقیه فولدر ها رو هم له libs اضافه کنیم <

با اضافه کردم بقیه < فولدر ها برنامه دیگه کرش نمیکنه < اما هیچ چیزی رو هم نشون نمیده < ! ، توی بعضی موارد برنامه حتی run نمیشه !

 
FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever();
mmr.setDataSource(path);
mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_ALBUM);
mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_ARTIST);
b = mmr.getFrameAtTime(2000000, FFmpegMediaMetadataRetriever.OPTION_CLOSEST); // frame at 2 seconds
byte[] artwork = mmr.getEmbeddedPicture();

mmr.release();

img.setImageBitmap(b);

فکر کنم با نحوه ی اضاف کردن این لایبری به مشکل برخوردم !

طبق توضیحات که داده شده باید فولدر fmmr-library رو به اکلیپس به عنوان لایبری اضاف کرد ، اما اکلیپس این فولدر رو به عنوان یک پروژه نمیشناسه < حتی فولدر fmmr-demo رو هم به عنوان یک پروژه اندروید نمیشناسه <

 

الان دارم سعی میکنم بصورت دستی fmmr-demo رو وارد کنم <

اگر کسی کد Custom سراغ داره < برای گرفتن ویدئو Thumbnail حتما کمک کنه< کل نت رو زیر رو کردم یا باید از کد محمد حسین بالا استفاده کرد ، که برای اندروید 4 به بالا جواب نمیده < یا باید از این لایبری لاستفاده کرد !

 

نظرات

کاشی زاده 11 سال پیش
ببین شما وقتی که یک ویدئو رو با IDM دانلود میکنی ، میتونید وسط دانلود بخششم بکنی . درواقع باید فریم های سالم رو بکشی بیرون ازش ، انجامش کمی پیچیده هست ولی سرور هایی هستن که این کارو انجام میدن براتون .
Criss 11 سال پیش

خب بلآخره نتیجه داد < البته برای API +10

oncreate {
.
.
.
new MyAsync().execute(path);
.
.
}

  public static Bitmap getVideoFrame(Context context, Uri uri) {
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
retriever.setDataSource(uri.toString(), new HashMap<String, String>());
return retriever.getFrameAtTime();
}
catch (IllegalArgumentException ex) {
ex.printStackTrace();
}
catch (RuntimeException ex) {
ex.printStackTrace();
} finally {
try {
retriever.release();
}
catch (RuntimeException ex) {}
}
return null;
}


public class MyAsync extends AsyncTask<String, Void, Bitmap> {

@Override
protected Bitmap doInBackground(String... objectURL) {
// return ThumbnailUtils.extractThumbnail(ThumbnailUtils.createVideoThumbnail(objectURL[0], Thumbnails.MINI_KIND), 500, 500);
//Uri uri = Uri.parse("http://hw13.asset.aparat.com/aparat-video/ee4f1aae9630ceb091825ad9fb007d3d2911962-360p__83653.mp4");
Uri uri = Uri.parse(objectURL[0]);
return getVideoFrame(getApplicationContext(), uri);
}


@Override
protected void onPostExecute(Bitmap result) {
img.setImageBitmap(result);
}
}

من target پروژه خودم رو 15 کردم < این د بخوبی روی ورژن های 4 به بالا جواب میده

حالا چطور میتونم این رو JAr کنم و توی Jar چک کنم اگر API دستگاه زیر 10 هست از کد زیر استفاده کنه

 Bitmap thumb =ThumbnailUtils.createVideoThumbnail(videoPath,MediaStore.Images.Thumbnails.MINI_KIND);

و اگر Api دستگاه بالا تر از 10 هست از این تیکه کدی که بالا گذاشتم <

 

نظرات

Criss 11 سال پیش
مشکل بدون JAr فایل حل شد < target رو 15 کنید < بعدش SDK رو چک کنید < باتوجه به SDK کد مربوطه رو اجرا کنید
Hossein Kurd 11 سال پیش
این کد روی API 10 کار نمی کنه ؟ Min-SD پروژه 10 هست
Criss 11 سال پیش

باید target رو 10 به بالا بزارید من target=android-15 ست کردم < بعدش دستورات زیر رو

MediaMetadataRetriever که استفاده شده ، توی API 10 وجود داره < لینک

   new MyAsync().execute(path);   //onCreate
} // on create

public class MyAsync extends AsyncTask<String, Void, Bitmap> {

@Override
protected Bitmap doInBackground(String... objectURL) {
int sdk = Integer.parseInt(Build.VERSION.SDK);
if (sdk >= 10) {
Uri uri = Uri.parse(objectURL[0]);
return getVideoFrame(getApplicationContext(), uri);
} else {
return ThumbnailUtils.extractThumbnail(ThumbnailUtils.createVideoThumbnail(objectURL[0], Thumbnails.MINI_KIND), 500, 500);
}
}


@Override
protected void onPostExecute(Bitmap result) {
img.setImageBitmap(result);
}
}


public static Bitmap getVideoFrame(Context context, Uri uri) {
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
retriever.setDataSource(uri.toString(), new HashMap<String, String>());
String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
int intvalue = Integer.parseInt(time);
String str = String.format("%d min, %d sec",
TimeUnit.MILLISECONDS.toMinutes(intvalue),
TimeUnit.MILLISECONDS.toSeconds(intvalue) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(intvalue))
);
Log.i("TIME", "" + str);
return retriever.getFrameAtTime();
}
catch (IllegalArgumentException ex) {
ex.printStackTrace();
}
catch (RuntimeException ex) {
ex.printStackTrace();
} finally {
try {
retriever.release();
}
catch (RuntimeException ex) {}
}
return null;
}

 

نظرات


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .