java - 从字节/帧 Java/Android 创建可播放的视频流
问题描述
我有org.webrtc.VideoFrame
帧流。
帧一个接一个来。是否有任何库或工具可以即时将帧转换为流?
我可以成功地将 VideoFrames 转换为字节数组。(类似于将其用于图像的这个问题) Android org.webrtc.VideoRenderer.I420Frame 数组到 PreviewCallback.onPreviewFrame byte[]
我想创建可播放的流视频,但是当我尝试播放一个创建的FileOutputStream
流或任何其他可以传递给 FFMPEG 的流时,它是不可播放的,所以它似乎需要 muxer 来创建它?
private fun addMetaDataToVideo() {
val file = File(context.getExternalFilesDir(Environment.DIRECTORY_DCIM).toString() + "/"
+"KYR", "${videoNamePrefix}}.mp4")
val out = FileOutputStream(file)
listOfFrames.forEach { out.write(it) }
out.close()
addMetaDataToVideo(file)
}
private fun addMetaDataToVideo(videoFile: File) {
val values = ContentValues(3)
values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4")
// values.put(MediaStore.Video.Media.DURATION, getVideoDuration(videoFile))
values.put(MediaStore.Video.Media.DATA, videoFile.absolutePath)
context.contentResolver.insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values)
}
解决方案
使用 ffmpeg 是最常见的方法。你能把你的框架放入某种图像阵列中吗?BufferedImage 或类似的东西?获得图像后,您可以使用以下行。就像这里解释的那样:https ://hamelot.io/visualization/using-ffmpeg-to-convert-a-set-of-images-into-a-video/
尝试将帧写入 BufferedImage,
ffmpeg -r 60 -f image2 -s 1920x1080 -i pic%04d.png -vcodec libx264 -crf 25 -pix_fmt yuv420p test.mp4
推荐阅读
- c# - 获取 html 页面的源代码(不仅仅是 html 代码)
- paypal - PayPal 自适应付款后不执行任何操作
- c++ - C++ 乘以整数和双精度的正确方法
- rest - 删除 RestAPI Outlook 联系人的限制
- r - 在R中,遇到问题'list'对象在使用'by'函数时不能被强制输入'double'
- azure - 如何在 Azure 应用服务上托管 Angular Universal 9?
- javascript - 无法将 CSS 和 JavaScript 链接到 HTML
- haskell - 使用 Monad 进行函数映射
- kotlin - Kotlin Fuel 库 - 无法在没有默认标头的情况下发送请求
- python - PyTorch:尝试第二次向后遍历图形,但缓冲区已被释放