Drive Man نشر 11 أغسطس 2023 أرسل تقرير نشر 11 أغسطس 2023 package com.tocrest.a2crest.vedio; import android.Manifest; import android.app.Dialog; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.res.Resources; import android.graphics.Bitmap; import android.media.MediaCodec; import android.media.MediaFormat; import android.media.MediaMetadataRetriever; import android.media.MediaMuxer; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.EditText; import android.widget.ImageView; import android.widget.MediaController; import android.widget.ProgressBar; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import android.widget.VideoView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import com.android.volley.AuthFailureError; import com.android.volley.DefaultRetryPolicy; import com.android.volley.NetworkResponse; import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.Volley; import com.bumptech.glide.Glide; import com.google.android.material.bottomsheet.BottomSheetBehavior; import com.google.android.material.bottomsheet.BottomSheetDialog; import com.makeramen.roundedimageview.RoundedImageView; import com.tocrest.a2crest.Dialog.difroved; import com.tocrest.a2crest.R; import com.tocrest.a2crest.shall; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.nio.ByteBuffer; import java.util.Calendar; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; @SuppressWarnings("ALL") public class uploadved extends AppCompatActivity implements difroved.ExampleDialogeListener { TextView uploader; RoundedImageView geter; VideoView vedgetr; MediaController mc; File file; String wasfst; String realPath; String mohtst; String qul; int progstat = 0; int w; int h; TextView shertved; ImageView ext, imgvedto; EditText edtanwan, edtwasf; Spinner spmraddafo; BottomSheetDialog bottomSheetDialog; private RequestQueue rQueue; private static final int SELECT_VIDEO_REQUEST = 0; public Uri videoUri; String displayName; String Path; ExecutorService service; String enwanvido; int fileLength; Context context; boolean check = true; public Bitmap bitmap; ImageView trimVideo, slowmotion; TextView slowmotiontext; private ProgressBar progressBar; Dialog dila; Uri uritoupload; ////////////////ROTH test ///////////////////// int videoResolution; Uri inputPath ; String outputPath; int width = 576; int height = 1024; private static final int REQUEST_FOR_VIDEO_FILE = 1000; private TextView tv_input, tv_output, tv_indicator, tv_progress; private String outputDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath(); private String inputPath2; private ProgressBar pb_compress; private long startTime, endTime; @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) { if (ContextCompat.checkSelfPermission(uploadved.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { selectVideo(); } else { ActivityCompat.requestPermissions(uploadved.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); } } }); private void selectVideo() { Intent intent = new Intent(Intent.ACTION_PICK,MediaStore.Video.Media.EXTERNAL_CONTENT_URI); intent.setType("video/*"); // intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult( Intent.createChooser(intent, "Select Video"), SELECT_VIDEO_REQUEST); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult( requestCode, permissions, grantResults); // check condition if (requestCode == 1 && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { selectVideo(); } else { Toast.makeText(getApplicationContext(), "Permission Denied !", Toast.LENGTH_SHORT).show(); } } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == SELECT_VIDEO_REQUEST && resultCode == RESULT_OK && data != null) { videoUri = data.getData(); displayName = String.valueOf(Calendar.getInstance().getTimeInMillis()); MediaPlayer mp = MediaPlayer.create(this, videoUri); Log.e("tyyyyy", "viduritost"+"="+videoUri.toString()); Log.e("tyyyyy", "viduripathtost"+"="+videoUri.getPath().toString()); file=new File(videoUri.getPath()); realPath =data.getDataString(); Log.e("tyyyyy", "videopath"+realPath); 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)); try { convert3(); } catch (IOException e) { throw new RuntimeException(e); } outputPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/" + "compressed_video.mp4"; width = 576; height = 1024; file=new File(videoUri.getPath()); String filePath = file.getAbsolutePath().toString(); inputPath=videoUri; Path=filePath; Log.d("tyyyyy","PATH URI IS ="+videoUri.getPath().toString()); } } public void convert3() throws IOException { dila = ProgressDialog.show(uploadved.this, "برجاء الانتظار", "جاري تجهيز الفيديو"); MediaMetadataRetriever retriever = new MediaMetadataRetriever(); retriever.setDataSource(uploadved.this, videoUri); String height = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT); String width = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH); int w = Integer.parseInt(width); int h = Integer.parseInt(height); int quality = w*h/1024*1024; String qul = String.valueOf(quality); Log.e("tyyyyy", "videoResolution = " + qul); Log.e("tyyyyy", "hi = " +height); Log.e("tyyyyy", "wi = " +width); retriever.release(); if (h > 1024) { try { File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), displayName + ".mp4"); String outputPath = file.getPath(); String rettopatha=videoUri.getPath().toString(); Log.d("tyyyyy","rettopath"+"="+rettopatha); Bitmap bmp = retriever.getFrameAtTime(); int newWidth = 576; int newHeight = 1024; Bitmap resizedBmp = Bitmap.createScaledBitmap(bmp, newWidth, newHeight, true); retriever.release(); MediaMuxer muxer = new MediaMuxer(outputPath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4); // Add the video track int videoTrackIndex = muxer.addTrack(MediaFormat.createVideoFormat(MediaFormat.MIMETYPE_VIDEO_AVC, newWidth, newHeight)); Log.e("tyyyyy", "videoResolution = " + videoTrackIndex); // Add the audio track int audioTrackIndex = muxer.addTrack(MediaFormat.createAudioFormat(MediaFormat.MIMETYPE_AUDIO_AAC, 44100, 2)); Log.e("tyyyyy", "audioTrackIndex = " + audioTrackIndex); muxer.start(); // Write the video frames to the muxer ByteBuffer buffer = ByteBuffer.allocateDirect(resizedBmp.getByteCount()); resizedBmp.copyPixelsToBuffer(buffer); buffer.flip(); MediaCodec.BufferInfo info = new MediaCodec.BufferInfo(); info.flags = MediaCodec.BUFFER_FLAG_KEY_FRAME; info.offset = 0; muxer.writeSampleData(videoTrackIndex, buffer, info); // Write the audio samples to the muxer short[] samples = new short[resizedBmp.getWidth() * resizedBmp.getHeight()]; buffer.clear(); buffer.asShortBuffer().put(samples); buffer.flip(); info = new MediaCodec.BufferInfo(); info.offset = 0; info.size = buffer.remaining(); muxer.writeSampleData(audioTrackIndex, buffer, info); muxer.stop(); muxer.release(); Uri uritoupload = Uri.parse(outputPath); vedgetr.setMediaController(new MediaController(this)); dila.dismiss(); vedgetr.setVideoURI(uritoupload); vedgetr.start(); } catch (IOException e) { Log.e("tyyyyy", "catch: " + e.getMessage()); } } else if (w > 576) { try { File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), displayName + ".mp4"); String outputPath = file.getPath(); File filea=new File(videoUri.getPath()); retriever.setDataSource(outputPath); Bitmap bmp = retriever.getFrameAtTime(); int newWidth = 576; int newHeight = 1024; Bitmap resizedBmp = Bitmap.createScaledBitmap(bmp, newWidth, newHeight, true); retriever.release(); MediaMuxer muxer = new MediaMuxer(outputPath, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4); // Add the video track int videoTrackIndex = muxer.addTrack(MediaFormat.createVideoFormat(MediaFormat.MIMETYPE_VIDEO_AVC, newWidth, newHeight)); Log.e("tyyyyy", "videoResolution = " + videoTrackIndex); // Add the audio track int audioTrackIndex = muxer.addTrack(MediaFormat.createAudioFormat(MediaFormat.MIMETYPE_AUDIO_AAC, 44100, 2)); Log.e("tyyyyy", "audioTrackIndex = " + audioTrackIndex); muxer.start(); // Write the video frames to the muxer ByteBuffer buffer = ByteBuffer.allocateDirect(resizedBmp.getByteCount()); resizedBmp.copyPixelsToBuffer(buffer); buffer.flip(); MediaCodec.BufferInfo info = new MediaCodec.BufferInfo(); info.flags = MediaCodec.BUFFER_FLAG_KEY_FRAME; info.offset = 0; muxer.writeSampleData(videoTrackIndex, buffer, info); // Write the audio samples to the muxer short[] samples = new short[resizedBmp.getWidth() * resizedBmp.getHeight()]; buffer.clear(); buffer.asShortBuffer().put(samples); buffer.flip(); info = new MediaCodec.BufferInfo(); info.offset = 0; info.size = buffer.remaining(); muxer.writeSampleData(audioTrackIndex, buffer, info); muxer.stop(); muxer.release(); Uri uritoupload = Uri.parse(outputPath); vedgetr.setMediaController(new MediaController(this)); dila.dismiss(); vedgetr.setVideoURI(uritoupload); vedgetr.start(); } catch (IOException e) { Log.e("tyyyyy", "catch: " + e.getMessage()); } } else { dila.dismiss(); vedgetr.setVideoURI(videoUri); vedgetr.start(); Toast.makeText(this, "try", Toast.LENGTH_SHORT).show(); } } } اقتباس
السؤال
Drive Man
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.