How to Handle OSMF Metadata and Cuepoints

Posted on October 12, 2013
Share article:

Open Source Media Framework (OSMF) offers great support for a wide range of media formats, but handling metadata and cue point events is a bit tricky. Because you do not have access to the client object due to encapsulation, you need to create a VideoElement subclass and add listeners. I’ve used LightweightVideoElement because it was the best fit for the job at hand. I don’t see why some other VideoElement object wouldn’t work unless the client has been encapsulated in a superclass.

 

package ro.stancalau.blog.osmf {
    import flash.events.Event;
    import flash.net.URLLoader;	
    import org.osmf.elements.F4MElement;
    import org.osmf.elements.F4MLoader;
    import org.osmf.elements.LightweightVideoElement;
    import org.osmf.elements.LoadFromDocumentElement;
    import org.osmf.elements.proxyClasses.LoadFromDocumentLoadTrait;
    import org.osmf.events.LoadEvent;
    import org.osmf.events.LoaderEvent;
    import org.osmf.media.MediaElement;
    import org.osmf.media.MediaResourceBase;
    import org.osmf.media.URLResource;
    import org.osmf.net.MulticastNetLoader;
    import org.osmf.net.NetLoader;
    import org.osmf.net.NetStreamCodes;
    import org.osmf.net.NetStreamLoadTrait;
    import org.osmf.net.httpstreaming.HTTPStreamingNetLoader;
    import org.osmf.net.rtmpstreaming.RTMPDynamicStreamingNetLoader;
    import org.osmf.traits.LoadState;
    import org.osmf.traits.LoadTrait;
    import org.osmf.traits.LoaderBase;
    import org.osmf.traits.MediaTraitType;

    CONFIG::FLASH_10_1
    {
        import flash.events.DRMAuthenticateEvent;
        import flash.events.DRMErrorEvent;
        import flash.events.DRMStatusEvent;
        import flash.net.drm.DRMContentData;	
        import flash.system.SystemUpdaterType;
        import flash.system.SystemUpdater;	
        import org.osmf.net.drm.NetStreamDRMTrait;
        import org.osmf.net.httpstreaming.HTTPStreamingNetLoader;
    }

    /**
     * Dispatched when streamMetadata changes.	
     * @eventType META_DATA_CHANGE
     */	
    [Event(name="metaDataChanged",type="flash.events.Event")]

    /**
     * Dispatched when cuePoint incountered.
     * @eventType ON_CUE_POINT
     */	
    [Event(name="onCuePoint",type="flash.events.Event")]

    public class CustomLightWeightVideoElement extends LightweightVideoElement {
        private var _streamMetadata:Object;

        public static const META_DATA_CHANGE:String = "metaDataChanged";
        public static const ON_CUE_POINT:String = "onCuePoint";

        public function CustomLightWeightVideoElement(resource:MediaResourceBase=null, loader:NetLoader=null) {
            super(null, null);
            super.loader = loader;	
            this.resource = resource;
        }

        override protected function processReadyState():void {
            if (loader==null) {
                return;
            }
            super.processReadyState();

            client.addHandler(NetStreamCodes.ON_META_DATA, onMetaData);
            client.addHandler(NetStreamCodes.ON_CUE_POINT, onCuepoint);
        }

        private function onMetaData(info:Object):void {
            streamMetadata = info;
            dispatchEvent( new Event(META_DATA_CHANGE));
        }

        private function onCuepoint(info:Object):void {
            streamMetadata = info;
            dispatchEvent( new Event(ON_CUE_POINT));
        }

        public function get streamMetadata():Object {
            return _streamMetadata;
        }

        public function set streamMetadata(value:Object):void {
            _streamMetadata = value;
        }
    }
}

So… that’s all there is to handling OSMF metadata.

Open Source Media Framework and Flash technologies are outdated and a hassle to run on client machines now in 2020. Consider transitioning to state-of-the-art technologies such as WebRTC for mobile video streaming.

Even now, after more than 15 years, RTMP is still the most reliable and widely used video streaming protocol, a must for professional broadcasts. With the demise of Flash, Flex and Adobe AIR, mobile RTMP SDKs offer the only feasible solution for in-app streaming.

Last update: 17.04.2020

Share article:

2 Replies to "How to Handle OSMF Metadata and Cuepoints"

  • George
    February 3, 2014 (12:22)
    Reply

    Thanks for the sample . I have been trying to figure it out for last 5 hours . I checked this sample , I am trying to use it by calling

    var myPlayer:CustomLightWeightVideoElement = new CustomLightWeightVideoElement(mediaResource);
    but nothing happens . It wont go to trace I have added in constructor . Am I doing it wrong ?

    • Cristian S.
      February 3, 2014 (13:37)
      Reply

      The “override protected function createLoadTrait” should not be there… just erase that. I will update the code as well.


What do you think? Share your thoughts!

+ 87 = 90