我正在尝试使用该包在我的论文中嵌入视频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}
任何帮助将不胜感激。
答案1
媒体playPause
命令只能通过VPlayer.swf
加载标有 的 RichMedia Annotation来执行random
。
playPause
VPlayer.swf
是(顺便说一下,还有 )中实现的少数接口函数 (API) 之一APlayer.swf
。您可以查看 附带的源代码VPlayer.mxml
和。APlayer.mxml
media9
如果要向 中添加 API 函数contours.swf
,则必须使用 ActionScript(Flash 背后的编程语言)进行编程,然后将其编译为contours.swf
。通过ExternalInterface.addCallback(...)
ActionScript 方法将接口函数添加到 Flash 应用程序。
按下鼠标按钮时 swf 暂停的原因在于,您只是通过此操作让 AdobeReader 保持忙碌状态。您可以在页面上的任何位置按下按钮,效果相同。您实际上并没有在 SWF 中调用专用函数。
顺便说一句,YouTube 播放器(参见文档中的第一个示例media9.pdf
)提供了一组完全不同的界面函数(记录在案这里)。playPause
也没有实现,但playVideo
和pauseVideo
等都实现了。因此,您必须插入两个\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.swf
?FFmpeg
无法解码。