android - 来自外部存储的FFmpegMediaMetadataRetriever?安卓工作室/科特林
问题描述
因此,我正在制作我的第一个 Android 应用程序,并试图让它允许用户在下一个活动中查看视频和视频的当前详细信息之前从他们的画廊中选择一个视频。我的问题是,当我使用 FFmpegMediaMetadataRetriever 并将视频的文件路径传递给它时,我收到错误消息java.lang.IllegalArgumentException: setDataSource failed: status = 0xFFFFFFFF
。我通过小道消息听说这意味着我的文件路径无效。当我找到文件Log.d
路径时,我得到了content://media/external/file/3565
,这对我来说看起来像是一个正确的文件路径!我希望有人能帮我解决这个问题。
这是我的上下文活动类:
class NewProject : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_new_project)
val videoPath = intent.getStringExtra("video")
initVideo(videoPath)
backButtonText.setOnClickListener{ goBack() }
}
private fun goBack() {
val intent = Intent(this,MainActivity::class.java)
startActivity(intent)
}
private fun initVideo(videoPath:String) {
newProjVideoView.setVideoPath(videoPath)
newProjVideoView.start()
newProjVideoView.setOnCompletionListener {
newProjVideoView.pause()
}
getVideoMetadata(videoPath)
}
private fun getVideoMetadata(videoPath: String) {
try {
e("videoPath", videoPath)
val receiver = FFmpegMediaMetadataRetriever()
receiver.setDataSource(videoPath)
} catch (e:IOException) {
e("retrieve1","There was an issue", e)
}
}
}
我也很高兴听到对我的代码的任何建设性反馈!请,谢谢你,祝你有美好的一天!
解决方案
所以,我认为我的问题源于试图通过意图传递视频,然后运行 MetadataRetriever。我通过获取上一个活动中的所有信息来解决它,然后将每个值作为额外值传递给下一个屏幕以使用。
推荐阅读
- flutter - 启动画面 - 在 initState 上完成异步调用之前,AnimationController 不会启动
- css - 停止 Dashlane 对特定输入字段的自动填充?
- javascript - 如何使用材质 UI 选项卡的道具更改选项卡?
- vuetify.js - v-switch 的点击事件不一致
- c++ - 将带有非类型参数的模板适配为模板模板参数
- laravel - passing query data to send in mail laravel
- python - 在 Python 中使用位技巧的 64 位 popcount
- reactjs - Can RegEx be used with React Testing Library to check classnames?
- c++ - utility and operation of the function "EVP_PKEY_meth_find"
- google-sheets - How do I protect a shared google sheet with and still allow the script button to work?