我毫无问题地通过了编译过程 (但花了一些时间)。
我想拥有快照功能,但我发现了一些非常古老(2-3年前)的线程,其中声明这个特性是仍然没有 (2016) --至少这条线 (2014)是“非开箱即用”。
快照功能可在其他平台上使用。
还有一些解决方案,它们从SurfaceView切换到TextureView。
但是,我更喜欢坚持使用SurfaceView,因为TextureView会带来一些性能缺陷(根据主题)。
在官方android页面上也有这样的声明:
在API 24及更高版本中,建议实现SurfaceView而不是TextureView.。
在2014年,基于我前面提到的线程的快照函数只有两个依赖项:
当查看VideoLAN的“VLC”存储库时,有一个文件负责构建libVLC。
在第396行中,默认情况下似乎启用了sout模块。
在编译之前,我已经在vlc/cont肋骨/src/ffmpeg/rues.mak中启用了png作为编码器,正如论坛中所指出的那样。
但是,无论是在org.videolan.libvlc.MediaPlayer中还是在org.videolan.libvlc.VLCVideoLayout中,仍然没有与快照相关的函数。
问题是如何使用libVLC在Android上创建快照(文件或缓冲区),而不使用TextureView?
Update1:
Fact1:找到了安卓系统不可用的原因。在VLC的核心源代码树中,在第145行的lib/VLC.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:,我想用这个去另一个方向。如果快照函数不可用(使用它也不明智),我想出了一些紧急解决方案:
发布于 2020-01-06 03:01:48
做这件事的几种方法..。
祝好运。
https://stackoverflow.com/questions/59582719
复制相似问题