Programatically embed a video in a slideshow using Apache Open Office API

对着背影说爱祢 提交于 2019-12-26 06:31:32

问题


I want to create a plugin that adds a video on the current slide in an open instance of Open Office Impress by specifying the location of the video automatically. I have successfully added shapes to the slide. But I cannot find a way to embed a video.

Using the .uno:InsertAVMedia I can take user input to choose a file and it works. How do I want to specify the location of the file programmatically?

CONCLUSION:

This is not supported by the API. Images and audio can be inserted without user intervention but videos cannot be done this way. Hope this feature is released in subsequent versions.


回答1:


You requested information about an extension, even though the code you are using is quite different, using a file stream reader and POI.

If you really do want to develop an extension, then start with one of the Java samples. An example that uses Impress is https://wiki.openoffice.org/wiki/File:SDraw.zip.

Inserting videos into an Impress presentation can be difficult. First be sure you can get it to work manually. The most obvious way to do that seems to be Insert -> Media -> Audio or Video. However many people use links to files instead of actually embedding the file. See also https://ask.libreoffice.org/en/question/1898/how-to-embed-video-into-impress-presentation/.

If embedding is working for your needs and you want to automate the embedding by using an extension (which seems to be what your question is asking), then there is a dispatcher method called InsertAVMedia that does this.

I do not know offhand what the parameters are for the call. See https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=61127 for how to look up parameters for dispatcher calls.

EDIT

Here is some Basic code that inserts a video.

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

From looking at InsertAVMedia in sfx.sdi, it seems that this call does not take any parameters.

EDIT 2

Sorry but InsertVideo and InsertImage do not take parameters either. From svx.sdi it looks like the following calls take parameters of some sort: InsertGalleryPic, InsertGraphic, InsertObject, InsertPlugin, AVMediaToolBox.

However according to https://wiki.openoffice.org/wiki/Documentation/OOoAuthors_User_Manual/Getting_Started/Sometimes_the_macro_recorder_fails, it is not possible to specify a file for InsertObject. That documentation also mentions that you never know what will work until you try it.

InsertGraphic takes a FileName parameter, so I would think that should work.




回答2:


It is possible to add an XPlayer on the current slide. It looks like this will allow you to play a video, and you can specify the file's URL automatically.

Here is an example using createPlayer: https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=57699.

EDIT:

This Basic code works on my system. To play the video, simply call the routine.

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


来源:https://stackoverflow.com/questions/34511207/programatically-embed-a-video-in-a-slideshow-using-apache-open-office-api

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!