如何在Android中将位图数组转换为视频?

时间:2019-07-12 13:39:58

标签: android kotlin ffmpeg

我有一个缓冲区,缓冲区在到达时就充满了图像位图(使用线程连续拍摄照片)。然后,我想将该位图缓冲区(此刻我有一个哈希图用于匹配键)转储到.mp4文件中。 这是使用处理程序连续捕获图像的代码。

button.setOnClickListener {
 prepareUIForCapture()
 if(isRunning){
   handler.removeCallbacksAndMessages(null)
   Logd("Length of wide: " + MainActivity.wideBitmaps.size)
   Logd("Length of normal: " + MainActivity.normalBitmaps.size)
   // This is where the make video would be called => makeVideoFootage()
   restartActivity()
 }else{
    button.text = "Stop"
    handler.postDelayed(object : Runnable {
    override fun run(){
       twoLens.reset()
       twoLens.isTwoLensShot = true
       MainActivity.cameraParams.get(dualCamLogicalId).let {
                if (it?.isOpen == true) {
                Logd("In onClick. Taking Dual Cam Photo on logical camera: " + dualCamLogicalId)
                takePicture(this@MainActivity, it)
                Toast.makeText(applicationContext, "Captured", Toast.LENGTH_LONG).show()
                            }
                        }
                        handler.postDelayed(this, 1000)
                    }
                }, 1000)
            }
            isRunning = !isRunning
        }

此操作每1秒钟拍摄一次,直到按下停止按钮为止。这是提取图像并将其保存到哈希图中的函数。

val wideBuffer: ByteBuffer? = twoLens.wideImage!!.planes[0].buffer
val wideBytes = ByteArray(wideBuffer!!.remaining())
wideBuffer.get(wideBytes)

val normalBuffer: ByteBuffer? = twoLens.normalImage!!.planes[0].buffer
val normalBytes = ByteArray(normalBuffer!!.remaining())
normalBuffer.get(normalBytes)

val tempWideBitmap = BitmapFactory.decodeByteArray(wideBytes, 0, wideBytes.size, null)
val tempNormalBitmap = BitmapFactory.decodeByteArray(normalBytes, 0, normalBytes.size, null)
MainActivity.counter += 1
MainActivity.wideBitmaps.put(MainActivity.counter.toString(), tempWideBitmap)
MainActivity.normalBitmaps.put(MainActivity.counter.toString(), tempNormalBitmap)

```counter''用于匹配帧,这就是为什么我使用哈希图而不是数组的原因。我已经按照以下步骤编译了ffmpeg。

implementation 'com.writingminds:FFmpegAndroid:0.3.2'

这是正确的方法吗? 我会喜欢makeVideoFootage()中的一些入门代码。

fun makeVideoFootage(){
// I would like to get the bitmaps from MainActivity.wideBitmaps and then dump them into a video wide.mp4.
}

任何对此的帮助,将不胜感激。

P.S。我已经阅读了现有的问题及其答案(从命令行运行),但是我不知道如何继续。

0 个答案:

没有答案