Drive Man نشر 18 يوليو 2023 أرسل تقرير نشر 18 يوليو 2023 public class uploadved extends AppCompatActivity implements difroved.ExampleDialogeListener{ TextView uploader; RoundedImageView geter; VideoView vedgetr; MediaController mc; File file; private static final int SELECT_VIDEO_REQUEST = 0; public Uri videoUri; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_uploadved); geter = findViewById(R.id.geter); uploader = findViewById(R.id.uploader); vedgetr = findViewById(R.id.vedgetr); mc = new MediaController(uploadved.this); vedgetr.setMediaController(mc); geter.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { selectVideo(); } }); private void selectVideo() { Intent intent = new Intent(); intent.setType("video/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Select Video"), SELECT_VIDEO_REQUEST); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == SELECT_VIDEO_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) { videoUri = data.getData(); vedgetr.setVideoURI(videoUri); vedgetr.start(); file=new File(Environment.getExternalStorageDirectory() .getAbsolutePath()); float size1=file.length()/1024; long size = file.length(); MediaPlayer mp = MediaPlayer.create(this, videoUri); new Compressvedio().execute("false",videoUri.toString(),file.getPath()); int duration = mp.getDuration(); mp.release(); String durationStr = String.format("%d", TimeUnit.MILLISECONDS.toSeconds(duration) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(duration))); String durationStr2 = String.format("%d", TimeUnit.MILLISECONDS.toMinutes(duration)); } } /////////////////////////on COMPROSSER////////////// private class Compressvedio extends AsyncTask<String, String, String> { Dialog dialogo; @Override protected void onPreExecute() { super.onPreExecute(); dialogo = ProgressDialog.show(uploadved.this, "برجاء الانتظار", "جارى تجهيز الفيديو"); } @Override protected String doInBackground(String... strings) { String vediopath = null; // Get the video URI. Uri uritoup = Uri.parse(strings[1]); // Compress the video. try { vediopath = SiliCompressor.with(uploadved.this).compressVideo(uritoup, strings[2]); } catch (URISyntaxException e) { throw new RuntimeException(e); } return vediopath; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); dialogo.dismiss(); // Get the compressed video file. File filea = new File(s); // Get the file size in kilobytes. float size2 = filea.length() / 1024f; // Log the file size. Log.d("sizs", String.format("Size : %.2f kB", size2)); // Set the display name of the compressed video file. displayName = String.valueOf(Calendar.getInstance().getTimeInMillis() + ".mp4"); } } اقتباس
0 Mustafa Suleiman نشر 18 يوليو 2023 أرسل تقرير نشر 18 يوليو 2023 تحتاج إلى تنفيذ طريقة onPostExecute في Compressvedio لتنفيذ الإجراءات المطلوبة بعد الانتهاء من ضغط الفيديوK ,إضافة رمز الإرسال إلى السيرفر في تلك الطريقة. تحتاج أيضًا إلى تمرير المسار الذي تم ضغطه للدالة Compressvedio().execute() في onActivityResult()، وأنت تمرر file.getPath() ولكن ذلك غير صحيح، فيجب عليك تمرير مسار الملف الذي تم ضغطه من خلال vediopath في doInBackground(). أي في onActivityResult(): قم بتعيين vediopath إلى القيمة المسترجعة من Compressvedio().execute() بدلاً من file.getPath(). قبل التعديل: new Compressvedio().execute("false", videoUri.toString(), file.getPath()); بعد التعديل: new Compressvedio().execute("false", videoUri.toString(), vediopath); وفي Compressvedio، قم بتنفيذ الإجراءات اللازمة بعد الانتهاء من ضغط الفيديو داخل onPostExecute(). @Override protected void onPostExecute(String s) { super.onPostExecute(s); dialogo.dismiss(); // Get the compressed video file. File filea = new File(s); // Get the file size in kilobytes. float size2 = filea.length() / 1024f; // Log the file size. Log.d("sizs", String.format("Size : %.2f kB", size2)); // Set the display name of the compressed video file. displayName = String.valueOf(Calendar.getInstance().getTimeInMillis() + ".mp4"); // Perform further actions here, such as uploading the compressed video to the server. } وتأكد من إضافة الكود اللازم لرفع الملف المضغوط إلى السيرفر في المكان المناسب داخل onPostExecute(). اقتباس
0 عبدالباسط ابراهيم نشر 18 يوليو 2023 أرسل تقرير نشر 18 يوليو 2023 الرمز الذي قدمته يبدو أنه يحاول ضغط ملف فيديو قبل تحميله إلى الخادم. ومع ذلك، هناك مشكلة في التعليمات البرمجية في فئة Compressvedio. لا تُرجع طريقة doInBackground() مسار ملف الفيديو المضغوط. هذا يعني أن طريقة onPostExecute() لن تتمكن من الحصول على ملف الفيديو المضغوط وتسجيل حجمه. لإصلاح هذه المشكلة، تحتاج إلى تعديل طريقة doInBackground() لإرجاع مسار ملف الفيديو المضغوط. يمكنك القيام بذلك عن طريق إضافة التعليمات البرمجية التالية إلى الطريقة: String vediopath = SiliCompressor.with(uploadved.this).compressVideo(uritoup, strings[2]); return vediopath; بمجرد إجراء هذه التغييرات، يجب أن يكون الرمز قادرًا على ضغط ملف الفيديو وتسجيل حجمه. إليك الكود الكامل لفئة Compressvedio: public class Compressvedio extends AsyncTask<String, String, String> { Dialog dialogo; @Override protected void onPreExecute() { super.onPreExecute(); dialogo = ProgressDialog.show(uploadved.this, "برجاء الانتظار", "جارى تجهيز الفيديو"); } @Override protected String doInBackground(String... strings) { String vediopath = null; // Get the video URI. Uri uritoup = Uri.parse(strings[1]); // Compress the video. try { vediopath = SiliCompressor.with(uploadved.this).compressVideo(uritoup, strings[2]); } catch (URISyntaxException e) { throw new RuntimeException(e); } return vediopath; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); dialogo.dismiss(); // Get the compressed video file. File filea = new File(s); // Get the file size in kilobytes. float size2 = filea.length() / 1024f; // Log the file size. Log.d("sizs", String.format("Size : %.2f kB", size2)); // Set the display name of the compressed video file. displayName = String.valueOf(Calendar.getInstance().getTimeInMillis() + ".mp4"); } } اقتباس
0 Hessen Nasser نشر 18 يوليو 2023 أرسل تقرير نشر 18 يوليو 2023 يبدو أن لديك بعض المشاكل في كودك. هنا بعض الأمور التي يجب أن تلاحظها: يجب عليك إغلاق الأقواس الناقصة في طريقة onCreate() الخاصة بك. يجب إضافة السطر } قبل طريقة selectVideo(). قمت بتعريف متغير file كـ File جديد، ولكن لم تقم بتعيين مسار الملف. يبدو أنه يجب تعيين مسار الملف المستهدف في هذا المتغير قبل استخدامه في طريقة Compressvedio. يجب تمرير المعلمات الصحيحة إلى طريقة Compressvedio. يجب أن يكون لديك 3 معاملات: strings[0] يحتوي على القيمة "false"، strings[1] يحتوي على سلسلة URI لمقطع الفيديو، و strings[2] يحتوي على مسار الملف الذي سيتم حفظ المقطع المضغوط فيه. تأكد من تمرير هذه المعاملات بالترتيب الصحيح في الدالة execute(). في طريقة Compressvedio.onPostExecute() ، يجب استخدام المتغير size2 للإشارة إلى الحجم بدلاً من المتغير size1. بعد أن تقوم بإصلاح هذه المشاكل المحددة، قد تستمر في وجود مشاكل أخرى. في حال حدوث أي مشكلة إضافية، يرجى تقديم معلومات إضافية حول الخطأ الذي تواجهه وأية رسائل خطأ تظهر في وحدة التحكم. 1 اقتباس
0 Hessen Nasser نشر 18 يوليو 2023 أرسل تقرير نشر 18 يوليو 2023 بتاريخ 5 دقائق مضت قال Drive Man: هل يمكنك اعطائى الكود كامل تفضل هذا الكود بعد حل المشكلات المذكوره سابقا تمت إضافة getFilePathFromUri() كدالة مساعدة للحصول على مسار الملف من URI المستخدمة في selectVideo(). هذا يساعد في الحصول على المسار الصحيح للملف الذي تم تحديده من قبل المستخدم. أيضًا، تم إضافة تعليقات توضيحية لأجزاء محددة من الكود. يمكنك استخدام هذا الكود كنقطة بداية لإجراء التعديلات اللازمة حسب احتياجاتك. public class UploadVideoActivity extends AppCompatActivity implements difroved.ExampleDialogeListener { TextView uploader; RoundedImageView geter; VideoView vedgetr; MediaController mc; File file; private static final int SELECT_VIDEO_REQUEST = 0; public Uri videoUri; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_uploadved); geter = findViewById(R.id.geter); uploader = findViewById(R.id.uploader); vedgetr = findViewById(R.id.vedgetr); mc = new MediaController(uploadved.this); vedgetr.setMediaController(mc); geter.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { selectVideo(); } }); } private void selectVideo() { Intent intent = new Intent(); intent.setType("video/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Select Video"), SELECT_VIDEO_REQUEST); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == SELECT_VIDEO_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) { videoUri = data.getData(); vedgetr.setVideoURI(videoUri); vedgetr.start(); // Get the file path from the video URI String filePath = getFilePathFromUri(videoUri); file = new File(filePath); float size1 = file.length() / 1024f; long size = file.length(); MediaPlayer mp = MediaPlayer.create(this, videoUri); // Compress the video in the background new CompressVideoTask().execute("false", videoUri.toString(), file.getPath()); int duration = mp.getDuration(); mp.release(); String durationStr = String.format("%d", TimeUnit.MILLISECONDS.toSeconds(duration) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(duration))); String durationStr2 = String.format("%d", TimeUnit.MILLISECONDS.toMinutes(duration)); } } // Helper method to get the file path from the URI private String getFilePathFromUri(Uri uri) { String filePath = ""; String[] projection = {MediaStore.Video.Media.DATA}; Cursor cursor = getContentResolver().query(uri, projection, null, null, null); if (cursor != null && cursor.moveToFirst()) { int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA); filePath = cursor.getString(columnIndex); cursor.close(); } return filePath; } private class CompressVideoTask extends AsyncTask<String, String, String> { Dialog dialogo; @Override protected void onPreExecute() { super.onPreExecute(); dialogo = ProgressDialog.show(uploadved.this, "برجاء الانتظار", "جاري تجهيز الفيديو"); } @Override protected String doInBackground(String... strings) { String vediopath = null; // Get the video URI. Uri uritoup = Uri.parse(strings[1]); // Compress the video. try { vediopath = SiliCompressor.with(uploadved.this).compressVideo(uritoup, strings[2]); } catch (URISyntaxException e) { throw new RuntimeException(e); } return vediopath; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); dialogo.dismiss(); // Get the compressed video file. File filea = new File(s); // Get the file size in kilobytes. float size2 = filea.length() / 1024f; // Log the file size. Log.d("sizs", String.format("Size : %.2f kB", size2)); // Set the display name of the compressed video file. String displayName = String.valueOf(Calendar.getInstance().getTimeInMillis() + ".mp4"); } } } اقتباس
0 Drive Man نشر 18 يوليو 2023 الكاتب أرسل تقرير نشر 18 يوليو 2023 فى مشكلة فى الكود ودى رسالة الخطأ اقتباس
السؤال
Drive Man
6 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.