Android 上的 ffmpeg 播放
我成功地为 Android 编译了 ffmpeg 库,并且能够将它们加载到我的 jni Android 应用程序中。现在开始调用 ffmpeg 函数并按照在线教程进行操作。我在那里读到,我还需要 Android 的 SDL 端口才能渲染音频/视频。
我看过 libsdl ,它在 Android 上使用似乎相当复杂,特别是因为我只需要顺序渲染音频/视频媒体样本,是否有一些更简单的解决方案(带有示例)如何渲染解码的缓冲区?我应该将解码后的媒体缓冲区从 frrmpeg 传递回 java 进行渲染吗?
如果我必须使用 SDL,是否有一些教程如何在 Android 上轻松地将其与 ffmpeg 集成?
I managed to compile ffmpeg libs for Android and i am able to load them in my jni Android app. Now started calling the ffmpeg functions and following the online tutorials. I read there that I need also SDL port for Android in order to render audio/video.
I have looked at libsdl and it seems quite complex to use on Android, especially since I just need sequential render of audio/video media samples, is there some simpler solution (with examples) how to render the decoded buffers? Should I pass decoded media buffers from frrmpeg back to java for rendering?
If I have to use SDL, is there some tutorial how to easy integrate it on Android with ffmpeg?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
有一些建议:
ffmpeg解码视频pix_fmt是yuv420p,
您需要将其转换为 BGR32 或 RGB565。
如果您计划使用 Bitmap 和 SurfaceView 来渲染视频帧。
如果你的设备是Android 2.2+,有c函数可以将位图数据复制到位图。
通过使用 AndroidBitmap_lockPixels 和 AndroidBitmap_unlockPixels 获取指针。
如果您的设备不支持这种方式,
您可以将二进制数据放入 ByteBuffer 并使用 Bitmap.copyPixelsFromBuffer()。
如果你的 SurfaceView 会缩放得更大,你应该处理反锯齿问题:
你可以吗?如何在android中为SurfaceView消除锯齿?
如果OpenGL是首选解决方案,
GLThread可能会消耗更多的CPU时间,使用Draw on dirty效果更好。
这个话题太有趣了。 :)
There are some suggestions:
The ffmpeg decodes video pix_fmt is yuv420p,
you need to convert it to BGR32 or RGB565.
If you plan use the Bitmap and SurfaceView to render video frame.
If your devices Android 2.2+, there are c functions to copy bitmap data to Bitmap.
By geting the pointer using AndroidBitmap_lockPixels and AndroidBitmap_unlockPixels.
If your devices don't support that way,
you can put binary data to ByteBuffer and use Bitmap.copyPixelsFromBuffer().
If your SurfaceView will scale larger, you should handle anti-alias problem:
Can u ? How to anti alias for SurfaceView in android?
If OpenGL is the prefered solution,
GLThread may consume more cpu time, use draw on dirty is better.
The topic is so interesting. :)
我认为海豚播放器 (http://code.google.com/p/dolphin-player/ ) 对于 android 使用 libSDL
I think dolphin-player (http://code.google.com/p/dolphin-player/) for android used libSDL