基于官方libVLC,考虑将Android用作recommended way。
我顺利通过了compilation process,但花了一些时间。
我想拥有快照功能,但是我发现一些非常旧的线程(2-3年),该线程周围的状态表明该功能至少为still not available(2016),“不是开箱即用” [this thread(2014)。
快照功能在其他平台上可用。
还有一些solutions,它们从SurfaceView切换到TextureView。
但是我更喜欢坚持使用SurfaceView,因为TextureView带来了一些性能缺陷(根据此topic)。
也在official android page上注明:
在API 24及更高版本中,建议实现SurfaceView而不是TextureView。
2014年,基于我之前提到的thread,快照功能只有两个依赖项:
[当查看VideoLAN的“ VLC-Android”存储库时,有file负责构建libVLC。
在第396行中,sout模块似乎默认启用。
在编译之前,我已在论坛中指出的vlc / contrib / src / ffmpeg / rules.mak中启用了png作为编码器。
但是在org.videolan.libvlc.MediaPlayer或org.videolan.libvlc.VLCVideoLayout中仍然没有与快照相关的功能。
事实1:找到了其在Android上不可用的原因。在VLC的核心源代码树中,在第145行的文件lib / video.c中,有带有大量FIXME警告的快照功能:
/* FIXME: This is not atomic. All parameters should be passed at once
* (obviously _not_ with var_*()). Also, the libvlc object should not be
* used for the callbacks: that breaks badly if there are concurrent
* media players in the instance. */
var_Create( p_vout, "snapshot-width", VLC_VAR_INTEGER );
var_SetInteger( p_vout, "snapshot-width", i_width);
var_Create( p_vout, "snapshot-height", VLC_VAR_INTEGER );
var_SetInteger( p_vout, "snapshot-height", i_height );
var_Create( p_vout, "snapshot-path", VLC_VAR_STRING );
var_SetString( p_vout, "snapshot-path", psz_filepath );
var_Create( p_vout, "snapshot-format", VLC_VAR_STRING );
var_SetString( p_vout, "snapshot-format", "png" );
var_TriggerCallback( p_vout, "video-snapshot" );
vlc_object_release( p_vout );
Fact2:我想朝这个方向发展。如果快照功能不可用(也不明智地使用它),我想到了一些紧急解决方案:
VLC中有一个名为scene的视频滤波器。这会将视频的静止图像生成到特定路径。我尝试使用此功能,但视频过滤器为not able to change at runtime。因此,此尝试失败。
我也尝试通过MediaPlayer(通过Media.addOption)进行此操作,但是在Android的MediaPlayer级别上也无法更改视频过滤器。
然后,我尝试将过滤器配置作为参数传递给libVLC初始化,但最终成功了,但是,每次需要截图时,创建新的libVLC实例都不会有效。
一些解决方法...
这是一个使用libvlc https://code.videolan.org/mfkl/libvlcsharp-samples/blob/master/PreviewThumbnailExtractor.Skia/Program.cs的跨平台缩略图示例,由于它在脚本中未使用任何特定于操作系统的功能,因此无需过多编辑即可在Android上运行。我猜应该也应该能够将其翻译为Java / Kotlin。
有一个libvlc函数可以拍摄快照。随便打个电话即可。 https://www.videolan.org/developers/vlc/doc/doxygen/html/group__libvlc__video.html#ga9b0a3870ce962aa0358050b2d5a59143
在VLC Android中,medialibrary现在管理缩略图。
LibVLC 4现在捆绑了缩略图https://github.com/videolan/vlc/blob/d40eb012b10cc355ea9ad7a13eaf494b8e826d78/include/vlc/libvlc_media.h#L845
祝你好运。>>