media9 playPause 行为对于嵌入式 mp4 和 swf 不一致

media9 playPause 行为对于嵌入式 mp4 和 swf 不一致

我正在尝试使用该包在我的论文中嵌入视频media9,并发现 mediacommand 的行为playPause会根据嵌入文件是 swf 还是 mp4 格式而变化。

对于 SWF 文件,只有当鼠标按钮按下时视频才会暂停按住而对于 MP4 文件单身的单击鼠标暂停视频。

有人知道为什么行为不同以及我需要做什么才能获得 SWF 文件的 mp4 行为吗?

(我意识到显而易见的答案是将我的 SWF 文件转换为 MP4,但是我花了 6 个小时的大部分时间尝试这样做。虽然我可以使用转换文件ffmpeg,但由于某种原因,它在嵌入后不会显示,尽管附带的示例文件media9可以显示。)

显示行为差异的 MWE 如下。请注意,我使用的是几周前 (重新) 安装的 MiKTeX 2.9、pdfTeX 和 TeXnicCenter。


\documentclass{article}
\usepackage{media9}
\usepackage[english]{babel}

\begin{document}

\includemedia[label=test,addresource=contours.swf,activate=pagevisible,
              width=9cm,height=10cm,flashvars={source=test.swf&autoPlay=true&loop=true}]
              {}{contours.swf}
\mediabutton[mediacommand=test:playPause]{\fbox{Play/Pause}}

\includemedia[label=random,addresource=random.mp4,activate=pagevisible,
              width=9cm,height=10cm,flashvars={source=random.mp4&autoPlay=true&loop=true}]
              {}{VPlayer.swf}
\mediabutton[mediacommand=random:playPause]{\fbox{Play/Pause}}

\end{document}

可以通过此链接访问上述 contours.swf 文件。

任何帮助将不胜感激。

答案1

媒体playPause命令只能通过VPlayer.swf加载标有 的 RichMedia Annotation来执行random

playPauseVPlayer.swf是(顺便说一下,还有 )中实现的少数接口函数 (API) 之一APlayer.swf。您可以查看 附带的源代码VPlayer.mxml和。APlayer.mxmlmedia9

如果要向 中添加 API 函数contours.swf,则必须使用 ActionScript(Flash 背后的编程语言)进行编程,然后将其编译为contours.swf。通过ExternalInterface.addCallback(...)ActionScript 方法将接口函数添加到 Flash 应用程序。

按下鼠标按钮时 swf 暂停的原因在于,您只是通过此操作让 Adob​​eReader 保持忙碌状态。您可以在页面上的任何位置按下按钮,效果相同。您实际上并没有在 SWF 中调用专用函数。

顺便说一句,YouTube 播放器(参见文档中的第一个示例media9.pdf)提供了一组完全不同的界面函数(记录在案这里)。playPause也没有实现,但playVideopauseVideo等都实现了。因此,您必须插入两个\mediabuttons才能暂停和恢复播放:

\includemedia[
  label=yt1,
  width=0.6\linewidth,height=0.45\linewidth,
  activate=pageopen,
  flashvars={
    enablejsapi=1    % enables yt player api used in media buttons
  }
]{}{https://www.youtube.com/v/Mdc3o7wOwNA?rel=0}   % online Flash file (YouTube Player)

\mediabutton[mediacommand=yt1:playVideo]{\fbox{\strut Play}}
\mediabutton[mediacommand=yt1:pauseVideo]{\fbox{\strut Pause}

PS: contours.swf不需要作为资源添加,它已经是通过激活 RichMedia Annotation 执行的主要 Flash 应用程序。

你是如何创建的contours.swfFFmpeg无法解码。

相关内容