Skip to content

Commit

Permalink
add transcoder
Browse files Browse the repository at this point in the history
  • Loading branch information
steadymoka committed Dec 2, 2021
1 parent b99a9b3 commit 5f0534a
Show file tree
Hide file tree
Showing 63 changed files with 4,212 additions and 374 deletions.
2 changes: 1 addition & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ dependencies {
implementation(project(":fileutil"))
implementation(project(":permissionmanager"))
implementation(project(":adhelper"))
implementation(project(":transcoder"))

/* Kotlin & Coroutine */
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version")
Expand Down Expand Up @@ -120,5 +121,4 @@ dependencies {

implementation("com.facebook.stetho:stetho:1.5.1")
implementation("com.facebook.stetho:stetho-okhttp3:1.5.1")

}
1 change: 1 addition & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
package="moka.land">

<uses-permission android:name="android.permission.INTERNET" />
<uses-sdk tools:overrideLibrary="net.ypresto.androidtranscoder" />

<application
android:name="._Application"
Expand Down
6 changes: 6 additions & 0 deletions app/src/main/java/moka/land/ui/home/HomeLayout.kt
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,12 @@ class HomeLayout : Fragment() {
nav.navigate(R.id.goAdHelperSample)
}
}

_view.textViewEncoding.setOnClickListener {
if (nav.currentDestination?.label == "start") {
nav.navigate(R.id.goEncodingSample)
}
}
}

}
131 changes: 131 additions & 0 deletions app/src/main/java/moka/land/ui/samples/EncodingSampleLayout.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
package moka.land.ui.samples

import android.graphics.Bitmap
import android.media.MediaMetadataRetriever
import android.media.ThumbnailUtils
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.ParcelFileDescriptor
import android.provider.MediaStore
import android.util.Base64
import android.util.Log
import android.util.Size
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import com.apollographql.apollo.ApolloClient
import com.apollographql.apollo.api.FileUpload
import com.bumptech.glide.Glide
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import kotlinx.coroutines.launch
import moka.land.R
import moka.land.base.log
import moka.land.databinding.LayoutEncodingSampleBinding
import moka.land.imagehelper.picker.builder.ImagePicker
import moka.land.imagehelper.picker.type.MediaType
import moka.land.imagehelper.viewer.ImageViewer
import moka.land.modules.awaitEnqueue
import moka.land.transcoder.MediaTranscoder
import moka.land.transcoder.format.MediaFormatStrategyPresets
import moka.land.transcoder.utils.Thumbnail
import moka.land.util.load
import org.koin.android.ext.android.inject
import java.io.ByteArrayOutputStream
import java.io.File
import java.io.FileNotFoundException
import java.util.concurrent.Future


class EncodingSampleLayout : Fragment() {

private val _view by lazy { LayoutEncodingSampleBinding.inflate(layoutInflater) }
private val apolloClient by inject<ApolloClient>()

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
initView()
bindEvent()
return _view.root
}

private fun initView() {
}

/*
트랜스코더 https://pyxispub.uzuki.live/?p=174
*/
private fun bindEvent() {
_view.imageViewBack.setOnClickListener {
findNavController().navigateUp()
}

_view.textViewTestButton.setOnClickListener {
ImagePicker
.with(this)
.setConfig {
mediaType = MediaType.VIDEO_ONLY
implicit = true
}
.showSingle { uri ->
log("uri: ${uri}")
Thumbnail.createBase64Thumbnail(uri)
transcode(uri)
}
}

_view.imageViewTarget.isEnabled = false
_view.imageViewTarget.setOnClickListener {
ImageViewer
.with(activity!!)
.show(arrayListOf(Uri.fromFile(file!!)))
}
}

private var transcoderFuture: Future<Void>? = null
private var file: File? = null

private fun transcode(uri: Uri) {
val parcelFileDescriptor = try {
requireActivity().contentResolver.openFileDescriptor(uri, "r")!!
} catch (e: FileNotFoundException) {
Toast.makeText(this@EncodingSampleLayout.requireContext(), "File not found.", Toast.LENGTH_LONG).show()
return
}
val fileDescriptor = parcelFileDescriptor.fileDescriptor

val outputDir = File(requireActivity().getExternalFilesDir(null), "outputs")
outputDir.mkdir()
file = File.createTempFile("transcode_test", ".mp4", outputDir)

transcoderFuture = MediaTranscoder
.getInstance()
.transcodeVideo(
fileDescriptor,
file!!.absolutePath,
MediaFormatStrategyPresets.createAndroid720pStrategy(),
object : MediaTranscoder.Listener {
override fun onTranscodeProgress(progress: Double) {
log("progress: ${progress}")
}

override fun onTranscodeCompleted() {
log("onTranscodeCompleted is called")
_view.imageViewTarget.load(requireActivity(), file)
_view.imageViewTarget.isEnabled = true
}

override fun onTranscodeCanceled() {
}

override fun onTranscodeFailed(exception: Exception?) {
log("onTranscodeFailed is called / ${exception?.message}")
}
}
)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,13 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.net.toFile
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import io.moka.fileutil.FileUtil
import kotlinx.coroutines.launch
import moka.land.R
import moka.land.base.log
import moka.land.databinding.LayoutImagePickerSampleBinding
import moka.land.imagehelper.picker.builder.ImagePicker
import moka.land.imagehelper.picker.util.MediaLoader
import moka.land.util.TakePictureUtil
import moka.land.util.load
import java.io.File

class ImagePickerSampleLayout : Fragment() {

Expand Down Expand Up @@ -50,7 +43,7 @@ class ImagePickerSampleLayout : Fragment() {
.showCamera {
lifecycleScope.launch {
// val uri = TakePictureUtil.save([email protected]!!, it)
FileUtil.save(this@ImagePickerSampleLayout.activity!!, MediaLoader.getFile(this@ImagePickerSampleLayout.activity!!, it))
// FileUtil.save([email protected]!!, MediaLoader.getFile([email protected]!!, it))
// _view.imageViewTarget.load([email protected]!!, uri)
}
}
Expand Down
19 changes: 16 additions & 3 deletions app/src/main/java/moka/land/ui/samples/ImageViewerSampleLayout.kt
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,25 @@ class ImageViewerSampleLayout : Fragment() {
.with(this)
.setConfig {
indicatorColorRes = R.color.colorAccent
mediaType = MediaType.IMAGE_ONLY
showFullscreenButton = false
mediaType = MediaType.VIDEO_ONLY
implicit = true
}
.showMulti { uris ->
uris.forEach { log("uri: ${it}") }
uris.forEach {
log("uri: ${it}")
log("it.host: ${it.host}")
log("it.path: ${it.path}")
log("it.authority: ${it.authority}")
log("-- -- -- --")
}
/*
uri: content://media/external/images/media/111
uri: content://media/external/images/media/110
uri: content://media/external/images/media/106
uri: content://com.google.android.apps.photos.contentprovider/-1/2/content%3A%2F%2Fmedia%2Fexternal%2Fvideo%2Fmedia%2F115/ORIGINAL/NONE/video%2Fmp4/428788901
uri: file:///storage/emulated/0/Android/data/moka.land/cache/tempFile_1638432658870.jpg
*/
adapter.setItems(uris.map { ImageAdapter.Data(it) }.toMutableList())
}
}
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/moka/land/util/ImageLoadUtil.kt
Original file line number Diff line number Diff line change
Expand Up @@ -187,4 +187,4 @@ private fun ImageView._radius(context: Context, url: String?, resId: Int?, radiu
.load(url ?: resId)
.transform(RoundedCorners(radius))
.into(this)
}
}
71 changes: 71 additions & 0 deletions app/src/main/res/layout/layout_encoding_sample.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white_01">

<ImageView
android:id="@+id/imageViewBack"
android:layout_width="?attr/actionBarSize"
android:layout_height="?attr/actionBarSize"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="18dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/mk_vc_left_arrow" />

<TextView
android:id="@+id/textViewTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="24dp"
android:layout_marginTop="60dp"
android:text="Video encoding test :)"
android:textColor="@color/black_02"
android:textSize="28dp"
android:textStyle="bold"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Libraries Samples" />

<TextView
android:id="@+id/textViewTestButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="24dp"
android:layout_marginTop="22dp"
android:layout_marginRight="24dp"
android:background="@color/white_02"
android:elevation="2dp"
android:foreground="?attr/selectableItemBackground"
android:gravity="center"
android:paddingLeft="24dp"
android:paddingTop="16dp"
android:paddingRight="24dp"
android:paddingBottom="16dp"
android:text="Video picker"
android:textColor="@color/black_04"
android:textSize="14dp"
android:textStyle="bold"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textViewTitle"
tools:text="Libraries Samples" />

<ImageView
android:id="@+id/imageViewTarget"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginLeft="24dp"
android:layout_marginTop="22dp"
android:layout_marginRight="24dp"
android:background="@color/black_10"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textViewTestButton" />

</androidx.constraintlayout.widget.ConstraintLayout>
16 changes: 16 additions & 0 deletions app/src/main/res/layout/layout_home.xml
Original file line number Diff line number Diff line change
Expand Up @@ -85,4 +85,20 @@
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textViewDialogs" />

<TextView
android:id="@+id/textViewEncoding"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:paddingLeft="24dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:text="📌 Encoding"
android:textColor="@color/black_04"
android:textSize="14dp"
android:textStyle="bold"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textViewAdHelper" />

</androidx.constraintlayout.widget.ConstraintLayout>
29 changes: 17 additions & 12 deletions app/src/main/res/navigation/graph_main.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
<navigation
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:startDestination="@id/start">

Expand Down Expand Up @@ -36,6 +37,13 @@
app:launchSingleTop="true"
app:popExitAnim="@animator/slide_out_right" />

<action
android:id="@+id/goEncodingSample"
app:destination="@id/encodingSample"
app:enterAnim="@anim/slide_in_right"
app:launchSingleTop="true"
app:popExitAnim="@animator/slide_out_right" />

<action
android:id="@+id/goRepository"
app:destination="@id/repository"
Expand All @@ -50,30 +58,27 @@
<fragment
android:id="@+id/imagePickerSample"
android:name="moka.land.ui.samples.ImagePickerSampleLayout"
android:label="imagePickerSample">

</fragment>
android:label="imagePickerSample"></fragment>

<fragment
android:id="@+id/imageViewerSample"
android:name="moka.land.ui.samples.ImageViewerSampleLayout"
android:label="imageViewerSample">

</fragment>
android:label="imageViewerSample"></fragment>

<fragment
android:id="@+id/dialogsSample"
android:name="moka.land.ui.samples.DialogsSampleLayout"
android:label="dialogsSample">

</fragment>
android:label="dialogsSample"></fragment>

<fragment
android:id="@+id/adHelperSample"
android:name="moka.land.ui.samples.AdHelperSampleLayout"
android:label="AdHelperSample">
android:label="AdHelperSample"></fragment>

</fragment>
<fragment
android:id="@+id/encodingSample"
android:name="moka.land.ui.samples.EncodingSampleLayout"
android:label="EncodingSample"></fragment>

<fragment
android:id="@+id/repository"
Expand Down
2 changes: 1 addition & 1 deletion dialog/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="moka.moka.dialog" />
package="moka.land.dialog" />
Loading

0 comments on commit 5f0534a

Please sign in to comment.