我想创建一个插件,通过自动指定视频的位置,在Open Office Impress的打开实例中的当前幻灯片上添加视频。我已经成功地为幻灯片添加了形状。但我找不到嵌入视频的方法。
使用.uno:InsertAVMedia
我可以通过用户输入来选择文件并且它可以正常工作。我如何以编程方式指定文件的位置?
结论:
API不支持此功能。无需用户干预即可插入图像和音频,但视频无法通过这种方式完成。希望此功能在后续版本中发布。
答案 0 :(得分:1)
您使用文件流阅读器和POI请求了有关扩展程序的信息,即使您使用的代码完全不同。
如果您确实想要开发扩展,那么请从其中一个Java示例开始。使用Impress的示例是https://wiki.openoffice.org/wiki/File:SDraw.zip。
将视频插入Impress演示文稿可能很困难。首先要确保你可以手动工作。最明显的方法似乎是插入 - >媒体 - >音频或视频。然而,许多人使用文件链接而不是实际嵌入文件。另请参阅https://ask.libreoffice.org/en/question/1898/how-to-embed-video-into-impress-presentation/。
如果嵌入符合您的需求,并且您希望通过使用扩展(这似乎是您的问题所要求的)自动化嵌入,那么有一个名为InsertAVMedia的dispatcher method可以执行此操作。
我不知道该调用的参数是什么。有关如何查找调度程序调用的参数,请参阅https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=61127。
修改强>
以下是一些插入视频的基本代码。
sub insert_video
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:InsertAVMedia", "", 0, Array())
end sub
通过查看sfx.sdi中的InsertAVMedia
,似乎此调用不带任何参数。
编辑2
很抱歉,但InsertVideo和InsertImage也没有参数。从svx.sdi
看起来以下调用采用某种类型的参数:InsertGalleryPic,InsertGraphic,InsertObject,InsertPlugin,AVMediaToolBox。
但是根据https://wiki.openoffice.org/wiki/Documentation/OOoAuthors_User_Manual/Getting_Started/Sometimes_the_macro_recorder_fails,无法为InsertObject
指定文件。该文档还提到,在尝试之前,你永远不会知道什么会有效。
InsertGraphic
需要一个FileName
参数,所以我认为这应该有用。
答案 1 :(得分:1)
可以在当前幻灯片上添加XPlayer。看起来这样可以播放视频,您可以自动指定文件的网址。
以下是使用createPlayer
的示例:https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=57699。
修改强>:
此基本代码适用于我的系统。要播放视频,只需调用例程。
sub play_video
If Video_flag = 0 Then
video =converttoURL( _
"C:\Users\JimStandard\Downloads\H264_test1_Talkinghead_avi_480x360.avi")
Video_flag = 1
'for windows:
oManager = CreateUnoService("com.sun.star.media.Manager_DirectX")
' for Linux
' oManager = CreateUnoService("com.sun.star.media.Manager_GStreamer")
oPlayer = oManager.createPlayer( video )
' oPlayer.CreatePlayerwindow(array()) ' crashes?
'oPlayer.setRate(1.1)
oPlayer.setPlaybackLoop(False)
oPlayer.setMediaTime(0.0)
oPlayer.setVolumeDB(GetSoundVolume())
oPlayer.start() ' Lecture
Player_flag = 1
Else
oPlayer.start() ' Lecture
Player_flag = 1
End If
End Sub