Clearing the video on a Flex VideoDisplay control

by Peter deHaan on January 15, 2008

in VideoDisplay

I posted this in response to a forum question the other day and thought I’d share the code here.

The following example shows you how you can clear a VideoDisplay control’s content using the videoPlayer property in the mx_internal namespace.

Full code after the jump.

Option 1: Call the videoDisplay.mx_internal::videoPlayer.clear() method directly from our MXML file:

View MXML

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2008/01/15/clearing-the-video-on-a-flex-videodisplay-control/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical">

    <mx:VideoDisplay id="videoDisplay"
            source="http://www.helpexamples.com/flash/video/cuepoints.flv" />

    <mx:Button label="pause"
            click="videoDisplay.pause();" />
    <mx:Button label="clear"
            click="videoDisplay.mx_internal::videoPlayer.clear();" />

</mx:Application>

View source is enabled in the following example.

Option 2: Extend the VideoDisplay class in ActionScript, and add a custom clear() method which calls the mx_internal::videoPlayer.clear() method:

package {
    import mx.controls.VideoDisplay;
    import mx.core.mx_internal;

    public class MyVideoDisplay extends VideoDisplay {
        public function MyVideoDisplay() {
            super();
        }

        public function clear():void {
            pause();
            mx_internal::videoPlayer.clear();
        }
    }
}

Then, in our MXML file, we simply add our MyVideoDisplay custom component and call our clear() method directly:

View MXML

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2008/01/15/clearing-the-video-on-a-flex-videodisplay-control/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        xmlns:custom="*"
        layout="vertical">

    <custom:MyVideoDisplay id="myVideoDisplay"
            source="http://www.helpexamples.com/flash/video/cuepoints.flv" />

    <mx:Button label="clear"
        click="myVideoDisplay.clear();" />

</mx:Application>

View source

Option 3: Create a custom component in MXML that extends the VideoDisplay control. Again, we add our own custom clear() method which calls the mx_internal::videoPlayer.clear() method:

View MXML

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2008/01/15/clearing-the-video-on-a-flex-videodisplay-control/ -->
<mx:VideoDisplay xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Script>
        <![CDATA[
            import mx.core.mx_internal;

            public function clear():void {
                pause();
                mx_internal::videoPlayer.clear();
            }
        ]]>
    </mx:Script>

</mx:VideoDisplay>

View source

{ 12 comments… read them below or add one }

1 adam January 15, 2008 at 11:53 am

Why don’t you have to use

use namespace mx_internal;

or better yet, when do I have to use that statement.

thanks for this tutorial btw. i was trying to clear a videodisplay yesterday.

Reply

2 peterd January 18, 2008 at 9:39 pm

adam,

Excellent tip! I totally forgot about the use namespace solution. It really could apply to any of the solutions above, but since pption 1 is probably the most easily copy-paste-able:

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2008/01/15/clearing-the-video-on-a-flex-videodisplay-control/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical"
        verticalAlign="middle"
        backgroundColor="white" viewSourceURL="srcview/index.html">

    <mx:Script>
        <![CDATA[
            import mx.core.mx_internal;

            use namespace mx_internal;
        ]]>
    </mx:Script>

    <mx:VideoDisplay id="videoDisplay"
            source="http://www.helpexamples.com/flash/video/cuepoints.flv" />

    <mx:Button label="pause"
            click="videoDisplay.pause();" />
    <mx:Button label="clear"
            click="videoDisplay.videoPlayer.clear();" />

</mx:Application>

Peter

Reply

3 morphix.ru April 26, 2008 at 7:42 am

very helped thank you

Reply

4 great video tips May 21, 2008 at 10:34 am

great video display control tips.
I may apply this tips on one of my site project.
thanks

Reply

5 Jason August 12, 2008 at 12:59 pm

This was a great find to be able to clear out the VideoDisplay object. However, I have found that when your video has been encoded with an alpha channel, this clear method does not work. Anyone have any ideas of why this method would not work with transparent video?

Reply

6 gustavo August 24, 2008 at 10:49 pm

How to add volume control? Is it possible?

Reply

7 peterd August 24, 2008 at 11:21 pm

gustavo,

The VideoDisplay control has a volume property that you can set to a value between 0 and 1 which sets the volume.

I can probably post an example in a couple minutes: “Setting the volume on a VideoDisplay control in Flex”.

Peter

Reply

8 gustavo August 25, 2008 at 1:58 am

peterd,
Thanks, thanks so much!

Reply

9 Antoni Jakubiak February 24, 2009 at 3:00 am

But, there is also a bug in Flash Player:
http://bugs.adobe.com/jira/browse/SDK-11262
Sometimes Video.clear not works as we expecting.

Reply

10 Vardan April 16, 2009 at 7:04 am

Hi Peter,

Great article. One question if you could help, please?

I am trying to play a flv file which is pushed from blazeDS server I am using Cairngorm/modelLocator to get the array of UploadVideo objects:
UploadVideo.as
public var videoName:String;
public var video:ByteArray;

in my mxml I declare a mx:List and assign the arrayCollection objects to my list’s dataProvider
videosOfStudents = ArrayCollection() // of UploadVideo objects

and this is my VideoDisplay component: (videoName is the name of the flv file)

When I click cntlDisp.play(); I get a following error:
(TypeError)#0
errorID = 1009
message = “Error #1009: Cannot access a property or method of a null object reference.”

but when I add a flv file locally it works fine.

Any idea?

Thanks.

Vardan

Reply

11 Vardan April 16, 2009 at 7:09 am

Hi Peter,

Sorry, some of my code did not appear properly because of the tags:

UploadVideo.as
public var videoName:String;
public var video:ByteArray;

videosOfStudents = ArrayCollection() // of UploadVideo objects
mx:List id=”cntlMovie” dataProvider=”{modelLocator.videosOfStudents}” width=”300″

mx:VideoDisplay id=”cntlDisp” source=”{cntlMovie.selectedItem.videoName}” width=”100%” height=”100%”

The output I get is:
(TypeError)#0
errorID = 1009
message = “Error #1009: Cannot access a property or method of a null object reference.”

Thanks again.

Vardan

Reply

12 Tom October 19, 2009 at 10:38 am

This tip is not working perfectly, I recommend instead, in order to clear the video, to use the visible property (with a Fade effect is terrible!).

Moreover, use mx_internal stuff is not recommended since it can be remove for future versions of the framework.

——————————————————–
eBuildy, the web2.0 specialists!

Reply

Leave a Comment

Sorry, this blog is terrible at eating HTML comments.
If you're pasting any HTML/XML/MXML code, you need to convert your < characters to &lt; and your > characters to &gt; .

You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Anti-Spam Protection by WP-SpamFree

Previous post:

Next post: