added more unit tests
made switcher really honor open-ended playing
This commit is contained in:
parent
4c839c6a80
commit
3d85980181
13 changed files with 242 additions and 37 deletions
|
@ -21,7 +21,7 @@
|
|||
#
|
||||
#
|
||||
# Author : $Author: maroy $
|
||||
# Version : $Revision: 1.2 $
|
||||
# Version : $Revision: 1.3 $
|
||||
# Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/gstreamerElements/etc/Makefile.in,v $
|
||||
#
|
||||
# @configure_input@
|
||||
|
@ -140,9 +140,13 @@ SWITCHER_LIB_OBJS = ${TMP_DIR}/smil-util.o \
|
|||
|
||||
TEST_RUNNER_OBJS = ${TMP_DIR}/TestRunner.o \
|
||||
${TMP_DIR}/SwitcherTest.o \
|
||||
${TMP_DIR}/SeekPackTest.o \
|
||||
${TMP_DIR}/PartialPlayTest.o \
|
||||
${TMP_DIR}/OneshotReaderTest.o \
|
||||
${TMP_DIR}/MinimalAudioSmilTest.o
|
||||
${TMP_DIR}/MinimalAudioSmilTest.o \
|
||||
${TMP_DIR}/seek.o \
|
||||
${TMP_DIR}/util.o \
|
||||
${TMP_DIR}/seek-pack.o
|
||||
|
||||
TEST_RUNNER_LIBS = -l${CORE_LIB} -lcppunit -ldl -lxmlrpc++
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
|
||||
Author : $Author: maroy $
|
||||
Version : $Revision: 1.1 $
|
||||
Version : $Revision: 1.2 $
|
||||
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/gstreamerElements/src/MinimalAudioSmilTest.cxx,v $
|
||||
|
||||
------------------------------------------------------------------------------*/
|
||||
|
@ -57,7 +57,15 @@ using namespace LiveSupport::GstreamerElements;
|
|||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(MinimalAudioSmilTest);
|
||||
|
||||
static const char * testFile = "var/simple.smil";
|
||||
/**
|
||||
* A simple smil file.
|
||||
*/
|
||||
static const char * simpleFile = "var/simple.smil";
|
||||
|
||||
/**
|
||||
* A parallel smil file.
|
||||
*/
|
||||
static const char * parallelFile = "var/parallel.smil";
|
||||
|
||||
|
||||
/* =============================================== local function prototypes */
|
||||
|
@ -84,10 +92,10 @@ MinimalAudioSmilTest :: tearDown(void) throw ()
|
|||
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* A simple smoke test.
|
||||
* Play a SMIL file.
|
||||
*----------------------------------------------------------------------------*/
|
||||
void
|
||||
MinimalAudioSmilTest :: firstTest(void)
|
||||
MinimalAudioSmilTest :: playSmilFile(const char * smilFile)
|
||||
throw (CPPUNIT_NS::Exception)
|
||||
{
|
||||
GstElement * pipeline;
|
||||
|
@ -99,12 +107,12 @@ MinimalAudioSmilTest :: firstTest(void)
|
|||
gst_init(0, 0);
|
||||
|
||||
/* create elements */
|
||||
pipeline = gst_pipeline_new("my_pipeline");
|
||||
filesrc = gst_element_factory_make("filesrc", "my_filesource");
|
||||
smil = gst_element_factory_make("minimalaudiosmil", "my_smil");
|
||||
pipeline = gst_pipeline_new("pipeline");
|
||||
filesrc = gst_element_factory_make("filesrc", "filesource");
|
||||
smil = gst_element_factory_make("minimalaudiosmil", "smil");
|
||||
sink = gst_element_factory_make("alsasink", "audiosink");
|
||||
|
||||
g_object_set(G_OBJECT(filesrc), "location", testFile, NULL);
|
||||
g_object_set(G_OBJECT(filesrc), "location", smilFile, NULL);
|
||||
|
||||
/* link everything together */
|
||||
gst_element_link_many(filesrc, smil, sink, NULL);
|
||||
|
@ -119,3 +127,25 @@ MinimalAudioSmilTest :: firstTest(void)
|
|||
gst_object_unref(GST_OBJECT(pipeline));
|
||||
}
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* A simple smoke test.
|
||||
*----------------------------------------------------------------------------*/
|
||||
void
|
||||
MinimalAudioSmilTest :: firstTest(void)
|
||||
throw (CPPUNIT_NS::Exception)
|
||||
{
|
||||
playSmilFile(simpleFile);
|
||||
}
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Test <par> SMIL elements
|
||||
*----------------------------------------------------------------------------*/
|
||||
void
|
||||
MinimalAudioSmilTest :: parallelTest(void)
|
||||
throw (CPPUNIT_NS::Exception)
|
||||
{
|
||||
playSmilFile(parallelFile);
|
||||
}
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
|
||||
Author : $Author: maroy $
|
||||
Version : $Revision: 1.1 $
|
||||
Version : $Revision: 1.2 $
|
||||
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/gstreamerElements/src/MinimalAudioSmilTest.h,v $
|
||||
|
||||
------------------------------------------------------------------------------*/
|
||||
|
@ -58,14 +58,28 @@ namespace GstreamerElements {
|
|||
* Unit test for the partialplay gstreamer element.
|
||||
*
|
||||
* @author $Author: maroy $
|
||||
* @version $Revision: 1.1 $
|
||||
* @version $Revision: 1.2 $
|
||||
*/
|
||||
class MinimalAudioSmilTest : public CPPUNIT_NS::TestFixture
|
||||
{
|
||||
CPPUNIT_TEST_SUITE(MinimalAudioSmilTest);
|
||||
CPPUNIT_TEST(firstTest);
|
||||
CPPUNIT_TEST(parallelTest);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
private:
|
||||
|
||||
/**
|
||||
* Play a smil file.
|
||||
*
|
||||
* @param smilFile the name of the smil file to play.
|
||||
* @exception CPPUNIT_NS::Exception on test failures.
|
||||
*/
|
||||
void
|
||||
playSmilFile(const char * smilFile)
|
||||
throw (CPPUNIT_NS::Exception);
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
/**
|
||||
|
@ -76,6 +90,14 @@ class MinimalAudioSmilTest : public CPPUNIT_NS::TestFixture
|
|||
void
|
||||
firstTest(void) throw (CPPUNIT_NS::Exception);
|
||||
|
||||
/**
|
||||
* Test on <par> elements in a SMIL file.
|
||||
*
|
||||
* @exception CPPUNIT_NS::Exception on test failures.
|
||||
*/
|
||||
void
|
||||
parallelTest(void) throw (CPPUNIT_NS::Exception);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
|
||||
Author : $Author: maroy $
|
||||
Version : $Revision: 1.2 $
|
||||
Version : $Revision: 1.3 $
|
||||
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/gstreamerElements/src/PartialPlayTest.cxx,v $
|
||||
|
||||
------------------------------------------------------------------------------*/
|
||||
|
@ -50,6 +50,9 @@ using namespace LiveSupport::GstreamerElements;
|
|||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(PartialPlayTest);
|
||||
|
||||
/**
|
||||
* A test file.
|
||||
*/
|
||||
static const char * testFile = "var/1minutecounter.mp3";
|
||||
|
||||
|
||||
|
@ -90,7 +93,8 @@ PartialPlayTest :: tearDown(void) throw ()
|
|||
* A simple smoke test.
|
||||
*----------------------------------------------------------------------------*/
|
||||
void
|
||||
PartialPlayTest :: firstTest(void)
|
||||
PartialPlayTest :: playFile(const char * audioFile,
|
||||
const char * config)
|
||||
throw (CPPUNIT_NS::Exception)
|
||||
{
|
||||
GstElement * pipeline;
|
||||
|
@ -106,8 +110,8 @@ PartialPlayTest :: firstTest(void)
|
|||
sink = gst_element_factory_make("alsasink", "alsa-output");
|
||||
|
||||
/* set filename property on the file source */
|
||||
g_object_set(G_OBJECT(filter), "location", testFile, NULL);
|
||||
g_object_set(G_OBJECT(filter), "config", "3s;10s-17s", NULL);
|
||||
g_object_set(G_OBJECT(filter), "location", audioFile, NULL);
|
||||
g_object_set(G_OBJECT(filter), "config", config, NULL);
|
||||
g_signal_connect(filter, "eos", G_CALLBACK(eos_signal_handler), pipeline);
|
||||
|
||||
gst_element_link(filter, sink);
|
||||
|
@ -142,3 +146,25 @@ eos_signal_handler(GstElement * element,
|
|||
gst_element_set_eos(container);
|
||||
}
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* A simple smoke test.
|
||||
*----------------------------------------------------------------------------*/
|
||||
void
|
||||
PartialPlayTest :: firstTest(void)
|
||||
throw (CPPUNIT_NS::Exception)
|
||||
{
|
||||
playFile(testFile, "3s;10s-13s");
|
||||
}
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Open ended test
|
||||
*----------------------------------------------------------------------------*/
|
||||
void
|
||||
PartialPlayTest :: openEndedTest(void)
|
||||
throw (CPPUNIT_NS::Exception)
|
||||
{
|
||||
playFile(testFile, "3s;10s-");
|
||||
}
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
|
||||
Author : $Author: maroy $
|
||||
Version : $Revision: 1.1 $
|
||||
Version : $Revision: 1.2 $
|
||||
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/gstreamerElements/src/PartialPlayTest.h,v $
|
||||
|
||||
------------------------------------------------------------------------------*/
|
||||
|
@ -58,14 +58,30 @@ namespace GstreamerElements {
|
|||
* Unit test for the partialplay gstreamer element.
|
||||
*
|
||||
* @author $Author: maroy $
|
||||
* @version $Revision: 1.1 $
|
||||
* @version $Revision: 1.2 $
|
||||
*/
|
||||
class PartialPlayTest : public CPPUNIT_NS::TestFixture
|
||||
{
|
||||
CPPUNIT_TEST_SUITE(PartialPlayTest);
|
||||
CPPUNIT_TEST(firstTest);
|
||||
CPPUNIT_TEST(openEndedTest);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
private:
|
||||
|
||||
/**
|
||||
* Play a file, with a specific partial play config.
|
||||
*
|
||||
* @param audioFile the file to play
|
||||
* @param config the partial play config to use when playing the file
|
||||
* @exception CPPUNIT_NS::Exception on test failures.
|
||||
*/
|
||||
void
|
||||
playFile(const char * audioFile,
|
||||
const char * config)
|
||||
throw (CPPUNIT_NS::Exception);
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
/**
|
||||
|
@ -76,6 +92,14 @@ class PartialPlayTest : public CPPUNIT_NS::TestFixture
|
|||
void
|
||||
firstTest(void) throw (CPPUNIT_NS::Exception);
|
||||
|
||||
/**
|
||||
* An open ended play test.
|
||||
*
|
||||
* @exception CPPUNIT_NS::Exception on test failures.
|
||||
*/
|
||||
void
|
||||
openEndedTest(void) throw (CPPUNIT_NS::Exception);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
|
||||
Author : $Author: maroy $
|
||||
Version : $Revision: 1.1 $
|
||||
Version : $Revision: 1.2 $
|
||||
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/gstreamerElements/src/SwitcherTest.cxx,v $
|
||||
|
||||
------------------------------------------------------------------------------*/
|
||||
|
@ -50,7 +50,7 @@ using namespace LiveSupport::GstreamerElements;
|
|||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(SwitcherTest);
|
||||
|
||||
static const char * testFile = "var/1minutecounter.mp3";
|
||||
static const char * testFile = "var/5seccounter.mp3";
|
||||
|
||||
|
||||
/* =============================================== local function prototypes */
|
||||
|
@ -87,10 +87,11 @@ SwitcherTest :: tearDown(void) throw ()
|
|||
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* A simple smoke test.
|
||||
* Play an audio file
|
||||
*----------------------------------------------------------------------------*/
|
||||
void
|
||||
SwitcherTest :: firstTest(void)
|
||||
gint64
|
||||
SwitcherTest :: playFile(const char * audioFile,
|
||||
const char * sourceConfig)
|
||||
throw (CPPUNIT_NS::Exception)
|
||||
{
|
||||
GstElement * pipeline;
|
||||
|
@ -99,6 +100,8 @@ SwitcherTest :: firstTest(void)
|
|||
GstElement * sw;
|
||||
GstElement * switcher;
|
||||
GstElement * sink;
|
||||
GstFormat format;
|
||||
gint64 timePlayed;
|
||||
|
||||
/* initialize GStreamer */
|
||||
gst_init(0, 0);
|
||||
|
@ -112,8 +115,8 @@ SwitcherTest :: firstTest(void)
|
|||
sink = gst_element_factory_make("alsasink", "alsa-output");
|
||||
|
||||
/* set filename property on the file source */
|
||||
g_object_set(G_OBJECT(source), "location", testFile, NULL);
|
||||
g_object_set(G_OBJECT(switcher), "source-config", "0[3s]", NULL);
|
||||
g_object_set(G_OBJECT(source), "location", audioFile, NULL);
|
||||
g_object_set(G_OBJECT(switcher), "source-config", sourceConfig, NULL);
|
||||
/* listen for the eos event on switcher, so the pipeline can be stopped */
|
||||
g_signal_connect(switcher, "eos", G_CALLBACK(eos_signal_handler), pipeline);
|
||||
|
||||
|
@ -126,9 +129,14 @@ SwitcherTest :: firstTest(void)
|
|||
|
||||
while (gst_bin_iterate(GST_BIN(pipeline)));
|
||||
|
||||
format = GST_FORMAT_TIME;
|
||||
gst_element_query(sink, GST_QUERY_POSITION, &format, &timePlayed);
|
||||
|
||||
/* clean up nicely */
|
||||
gst_element_set_state(pipeline, GST_STATE_NULL);
|
||||
gst_object_unref(GST_OBJECT (pipeline));
|
||||
|
||||
return timePlayed;
|
||||
}
|
||||
|
||||
|
||||
|
@ -148,3 +156,34 @@ eos_signal_handler(GstElement * element,
|
|||
gst_element_set_eos(container);
|
||||
}
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* A simple smoke test.
|
||||
*----------------------------------------------------------------------------*/
|
||||
void
|
||||
SwitcherTest :: firstTest(void)
|
||||
throw (CPPUNIT_NS::Exception)
|
||||
{
|
||||
gint64 timePlayed;
|
||||
|
||||
timePlayed = playFile(testFile, "0[3s]");
|
||||
CPPUNIT_ASSERT(timePlayed > 2.9 * GST_SECOND);
|
||||
CPPUNIT_ASSERT(timePlayed < 3.1 * GST_SECOND);
|
||||
}
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Play a file until its end.
|
||||
*----------------------------------------------------------------------------*/
|
||||
void
|
||||
SwitcherTest :: openEndedTest(void)
|
||||
throw (CPPUNIT_NS::Exception)
|
||||
{
|
||||
gint64 timePlayed;
|
||||
|
||||
timePlayed = playFile(testFile, "0[]");
|
||||
CPPUNIT_ASSERT(timePlayed > 4.9 * GST_SECOND);
|
||||
CPPUNIT_ASSERT(timePlayed < 5.1 * GST_SECOND);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
|
||||
Author : $Author: maroy $
|
||||
Version : $Revision: 1.1 $
|
||||
Version : $Revision: 1.2 $
|
||||
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/gstreamerElements/src/SwitcherTest.h,v $
|
||||
|
||||
------------------------------------------------------------------------------*/
|
||||
|
@ -58,14 +58,31 @@ namespace GstreamerElements {
|
|||
* Unit test for the partialplay gstreamer element.
|
||||
*
|
||||
* @author $Author: maroy $
|
||||
* @version $Revision: 1.1 $
|
||||
* @version $Revision: 1.2 $
|
||||
*/
|
||||
class SwitcherTest : public CPPUNIT_NS::TestFixture
|
||||
{
|
||||
CPPUNIT_TEST_SUITE(SwitcherTest);
|
||||
CPPUNIT_TEST(firstTest);
|
||||
CPPUNIT_TEST(openEndedTest);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
private:
|
||||
|
||||
/**
|
||||
* Play a specific file, with a specific switcher configuration.
|
||||
*
|
||||
* @param audioFile the name of the audio file to play.
|
||||
* @param sourceConfig the source config to use.
|
||||
* @return the number of milliseconds played.
|
||||
* @exception CPPUNIT_NS::Exception on test failures.
|
||||
*/
|
||||
gint64
|
||||
playFile(const char * audioFile,
|
||||
const char * sourceConfig)
|
||||
throw (CPPUNIT_NS::Exception);
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
/**
|
||||
|
@ -76,6 +93,14 @@ class SwitcherTest : public CPPUNIT_NS::TestFixture
|
|||
void
|
||||
firstTest(void) throw (CPPUNIT_NS::Exception);
|
||||
|
||||
/**
|
||||
* A test to play a file until its end.
|
||||
*
|
||||
* @exception CPPUNIT_NS::Exception on test failures.
|
||||
*/
|
||||
void
|
||||
openEndedTest(void) throw (CPPUNIT_NS::Exception);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
|
||||
Author : $Author: maroy $
|
||||
Version : $Revision: 1.2 $
|
||||
Version : $Revision: 1.3 $
|
||||
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/gstreamerElements/src/partial-play.c,v $
|
||||
|
||||
------------------------------------------------------------------------------*/
|
||||
|
@ -86,7 +86,7 @@ GST_PLUGIN_DEFINE (
|
|||
"partialplay",
|
||||
"Partial play",
|
||||
plugin_init,
|
||||
"$Revision: 1.2 $",
|
||||
"$Revision: 1.3 $",
|
||||
"GPL",
|
||||
"LiveSupport",
|
||||
"http://livesupport.campware.org/"
|
||||
|
@ -409,6 +409,9 @@ update_source_config(LivesupportPartialPlay * pplay)
|
|||
if (sscanf(token, "%[^-]-%s", from, to) == 2) {
|
||||
pplay->playFrom = smil_clock_value_to_nanosec(from);
|
||||
pplay->playTo = smil_clock_value_to_nanosec(to);
|
||||
} else if (sscanf(token, "%[^-]-", from) == 1) {
|
||||
pplay->playFrom = smil_clock_value_to_nanosec(from);
|
||||
pplay->playTo = -1LL;
|
||||
}
|
||||
|
||||
g_free(to);
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
|
||||
Author : $Author: maroy $
|
||||
Version : $Revision: 1.1 $
|
||||
Version : $Revision: 1.2 $
|
||||
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/gstreamerElements/src/seek-pack.h,v $
|
||||
|
||||
------------------------------------------------------------------------------*/
|
||||
|
@ -35,9 +35,13 @@
|
|||
* some silence and then some specified part of the source.
|
||||
*
|
||||
* @author $Author: maroy $
|
||||
* @version $Revision: 1.1 $
|
||||
* @version $Revision: 1.2 $
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/* ============================================================ include files */
|
||||
|
||||
|
@ -172,5 +176,11 @@ livesupport_seek_pack_set_state(LivesupportSeekPack * seekPack,
|
|||
gboolean
|
||||
livesupport_seek_pack_iterate(LivesupportSeekPack * seekPack);
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /* SeekPack_h */
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
|
||||
Author : $Author: maroy $
|
||||
Version : $Revision: 1.2 $
|
||||
Version : $Revision: 1.3 $
|
||||
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/gstreamerElements/src/switcher.c,v $
|
||||
|
||||
------------------------------------------------------------------------------*/
|
||||
|
@ -64,7 +64,7 @@ GST_PLUGIN_DEFINE (
|
|||
"switcher",
|
||||
"A filter that connects to a swtich, and changes its source",
|
||||
plugin_init,
|
||||
"$Revision: 1.2 $",
|
||||
"$Revision: 1.3 $",
|
||||
"GPL",
|
||||
"LiveSupport",
|
||||
"http://livesupport.campware.org/"
|
||||
|
@ -406,16 +406,23 @@ livesupport_switcher_chain(GstPad * pad,
|
|||
switcher->currentConfig->data;
|
||||
}
|
||||
|
||||
if (config->duration < 0) {
|
||||
if (config->duration < 0LL) {
|
||||
/* handle config->duration == -1LL (play until EOS) */
|
||||
if (GST_IS_EVENT(in)) {
|
||||
GstEvent * event = GST_EVENT(in);
|
||||
|
||||
if (GST_EVENT_TYPE(event) == GST_EVENT_EOS) {
|
||||
switch_to_next_source(switcher);
|
||||
return;
|
||||
} else {
|
||||
gst_pad_event_default(switcher->srcpad, event);
|
||||
}
|
||||
} else {
|
||||
buf = GST_BUFFER(in);
|
||||
|
||||
/* just push out the incoming buffer without touching it */
|
||||
gst_pad_push(switcher->srcpad, GST_DATA(buf));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (GST_IS_EVENT(in)) {
|
||||
|
|
BIN
livesupport/modules/gstreamerElements/var/5seccounter.mp3
Normal file
BIN
livesupport/modules/gstreamerElements/var/5seccounter.mp3
Normal file
Binary file not shown.
16
livesupport/modules/gstreamerElements/var/parallel.smil
Normal file
16
livesupport/modules/gstreamerElements/var/parallel.smil
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<smil xmlns="http://www.w3.org/2001/SMIL20/Language" >
|
||||
<body>
|
||||
<par>
|
||||
<audio src = "file:var/1minutecounter.mp3"
|
||||
clipBegin = "10s"
|
||||
clipEnd = "15s"
|
||||
/>
|
||||
<audio src = "file:var/1minutecounter.mp3"
|
||||
begin = "3s"
|
||||
clipBegin = "10s"
|
||||
clipEnd = "15s"
|
||||
/>
|
||||
</par>
|
||||
</body>
|
||||
</smil>
|
|
@ -4,8 +4,7 @@
|
|||
<par>
|
||||
<audio src = "file:var/1minutecounter.mp3"
|
||||
begin = "3s"
|
||||
clipBegin = "10s"
|
||||
clipEnd = "15s" />
|
||||
/>
|
||||
</par>
|
||||
</body>
|
||||
</smil>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue