آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

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

Hossein Kurd  10 سال پیش  10 سال پیش
+1 0

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

MinSDK 10

 برای این سوال 4 پاسخ وجود دارد.
پاسخ به سوال 
کاشی زاده  10 سال پیش
+1 0

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

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

 

 Bitmap thumb =ThumbnailUtils.createVideoThumbnail(videoPath,MediaStore.Images.Thumbnails.MINI_KIND);
0 0
آنلاین، سرور تصویر نمی ده، اگر تصویر می داد که مشکل نداشتم (10 سال پیش)
0 0
میتونید از این روش برید لینک یا از این کتابخونه استفاده کنید لینک این هم نمونه برنامه هست لینک (10 سال پیش)
+1 0
نمی خوام حجم نرم افزار رو ببرم بالا، یه روش مناسب پیدا کردم (10 سال پیش)
0 0
روشتون رو بگید تا بقیه هم استفاده کنند (10 سال پیش)
0 0
این کار تصویر میده < اما روی اندروید 4 به بالا مشکل داره < (10 سال پیش)
+1 0
از لایبری که معرفی کردم استفاده کردی ؟ (10 سال پیش)
0 0
لایبری رو به درستی ایمپورت کردم < اما برنامه تنها باید خط کرش میکنه < اون هم زمانی که یک نمونه از لایبری رو میسازم ! FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever (10 سال پیش)
پاسخ به سوال 
Criss  10 سال پیش
+1 0

خب من فکر میکردم اضاف کردن فایل 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 به بالا جواب نمیده < یا باید از این لایبری لاستفاده کرد !

 

+1 0
ببین شما وقتی که یک ویدئو رو با IDM دانلود میکنی ، میتونید وسط دانلود بخششم بکنی . درواقع باید فریم های سالم رو بکشی بیرون ازش ، انجامش کمی پیچیده هست ولی سرور هایی هستن که این کارو انجام میدن براتون . (10 سال پیش)
پاسخ به سوال 
Criss  10 سال پیش
+2 0

خب بلآخره نتیجه داد < البته برای 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 هست از این تیکه کدی که بالا گذاشتم <

 

0 0
مشکل بدون JAr فایل حل شد < target رو 15 کنید < بعدش SDK رو چک کنید < باتوجه به SDK کد مربوطه رو اجرا کنید (10 سال پیش)
0 0
این کد روی API 10 کار نمی کنه ؟ Min-SD پروژه 10 هست (10 سال پیش)
پاسخ به سوال 
Criss  10 سال پیش
+1 0

باید 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;
}

 


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