Inheritance: System.EventArgs
コード例 #1
0
        void element_PlaybackTrackChanged(object sender, TrackChangedEventArgs e)
        {
            SourceEventArgs args;

            for (int i = 0; i < this.tracks.Count; i++)
            {
                if (this.tracks[i].Bitrate == e.NewTrack.Bitrate)
                {
                    args = new SourceEventArgs(i);
                    SourceChanged(this, args);
                    break;
                }
            }
        }
コード例 #2
0
 void media_SourceChanged(object sender, SourceEventArgs e)
 {
     SendEvent("switchingChangeComplete", "{\"newIndex\":" + e.NewIndex + "}");
 }
コード例 #3
0
 void element_PlaybackTrackChanged(object sender, TrackChangedEventArgs e)
 {
     if (this.tracks != null)
     {
         SourceEventArgs args;
         for (int i = 0; i < this.tracks.Count; i++)
         {
             if (this.tracks[i].Bitrate == e.NewTrack.Bitrate)
             {
                 args = new SourceEventArgs(i);
                 SourceChanged(this, args);
                 break;
             }
         }
     }
 }
コード例 #4
0
        private void AddMarkers(IAsyncResult argAR)
        {
            try {
                if (!Deployment.Current.Dispatcher.CheckAccess())
                {
                    Deployment.Current.Dispatcher.BeginInvoke(() => AddMarkers(argAR));
                }

                foreach (SegmentInfo segmentInfo in this.element.ManifestInfo.Segments)
                {
                    foreach (StreamInfo streamInfo in segmentInfo.SelectedStreams)
                    {
                        if (streamInfo.UniqueId == ((string)argAR.AsyncState))
                        {
                            foreach (TrackInfo trackInfo in streamInfo.SelectedTracks)
                            {
                                ChunkResult chunkResult = trackInfo.EndGetChunk(argAR);

                                if (chunkResult.Result == ChunkResult.ChunkResultState.Succeeded && currentTextTrack != null)
                                {
                                    System.Text.Encoding enc = System.Text.Encoding.UTF8;
                                    int length = (int)chunkResult.ChunkData.Length;
                                    byte[] rawData = new byte[length];
                                    chunkResult.ChunkData.Read(rawData, 0, length);
                                    String text = enc.GetString(rawData, 0, rawData.Length);
                                    XElement xElem = XElement.Parse(text);
                                    XElement bodyElem = xElem.Elements().FirstOrDefault(e => e.Name.LocalName == "body");

                                    //first received chunk - notify js
                                    if (!textTrackLoaded)
                                    {
                                        XElement copyElement = new XElement(xElem);
                                        XElement copyBodyElem = copyElement.Elements().FirstOrDefault(e => e.Name.LocalName == "body");
                                        //we can't send the body elements, they are causing "Eval" exception
                                        copyBodyElem.RemoveAll();
                                        SourceEventArgs args = new SourceEventArgs(getCurrentTextIndex());
                                        args.Text = copyElement.ToString();
                                        TextTrackLoaded(this, args);
                                        textTrackLoaded = true;
                                    }

                                    //Get the caption language
                                    string langName = "";
                                    currentTextTrack.Attributes.TryGetValue("Name", out langName);

                                    //Fix for TTML where div contains begin and end values instead of paragraph node
                                    int segId = 0;
                                    //Get all div under the body node
                                    IEnumerable<XElement> divElements =
                                            from div in bodyElem.Descendants()
                                            where div.Name.LocalName == "div"
                                            select div;
                                    //Fix alogorithem:
                                    //1. Iterate over each div.
                                    //2. Find each begin and end values.
                                    //3. Aggregate over each child of a div, concat it text value.
                                    //4. Create a new paragraph element with the div begin and end attributes.
                                    //5. Clear all the attribute and elements of the original div and replace with new paragraph.
                                    foreach (XElement divElem in divElements) {
                                        XAttribute begin = divElem.Attributes().FirstOrDefault(e => e.Name.LocalName == "begin");
                                        XAttribute end = divElem.Attributes().FirstOrDefault(e => e.Name.LocalName == "end");

                                        if (begin != null)
                                        {
                                            IEnumerable<string> textSegs =
                                                from seg in divElem.Descendants()
                                                where seg.Name.LocalName == "p"
                                                select (string)seg;

                                            string str = textSegs.Aggregate((x, y) => x + "<br/>" + y);

                                            XElement pElem = divElem.Elements().FirstOrDefault(e => e.Name.LocalName == "p");
                                            XAttribute region = pElem.Attributes().FirstOrDefault(e => e.Name.LocalName == "region");

                                            divElem.RemoveAll();

                                            XAttribute idAttr = new XAttribute("id", "p" + segId);
                                            XElement newP = new XElement("p", begin, end, region, idAttr);
                                            newP.Value = str;
                                            divElem.Add(newP);
                                            segId++;
                                        }
                                    }
                                    //Turn each caption line to a media marker
                                    foreach (XElement el in bodyElem.Elements())
                                    {
                                        IEnumerable<XElement> pSegs =
                                                from p in el.Descendants()
                                                where p.Name.LocalName == "p"
                                                select p;

                                        foreach (XElement pSeg in pSegs)
                                        {
                                            TimelineMarker newMarker = new TimelineMarker();
                                            //Create discrete marker points for each segment
                                            pSeg.Add(new XAttribute("timestamp", chunkResult.Timestamp.TotalSeconds.ToString()));
                                            newMarker.Text = pSeg.ToString();
                                            newMarker.Type = langName;
                                            XAttribute begin = pSeg.Attribute("begin");
                                            if (begin.Value != null)
                                            {
                                                newMarker.Time = chunkResult.Timestamp + TimeSpan.Parse(begin.Value);
                                                this.element.Markers.Add(newMarker);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }catch(Exception ex)
            {
                logger.info("Error occur while trying to add marker:" + ex.Message);
            }
        }
コード例 #5
0
 void media_TextTrackLoaded(object sender, SourceEventArgs e)
 {
     SendEvent("textTrackSelected", "{\"index\":" + e.NewIndex + ", \"ttml\":\"" + HttpUtility.HtmlEncode(Uri.EscapeUriString(e.Text)) + "\"}");
 }
コード例 #6
0
 void media_SourceChanged(object sender, SourceEventArgs e)
 {
     SendEvent("switchingChangeComplete", "{\"newIndex\":" + e.NewIndex + "}");
 }