gyorgy@0
|
1 using System;
|
gyorgy@0
|
2 using System.Collections.Generic;
|
gyorgy@0
|
3 using System.Linq;
|
gyorgy@0
|
4 using System.Net;
|
gyorgy@0
|
5 using System.Windows;
|
gyorgy@0
|
6 using System.Windows.Controls;
|
gyorgy@0
|
7 using System.Windows.Documents;
|
gyorgy@0
|
8 using System.Windows.Input;
|
gyorgy@0
|
9 using System.Windows.Media;
|
gyorgy@0
|
10 using System.Windows.Media.Animation;
|
gyorgy@0
|
11 using System.Windows.Shapes;
|
gyorgy@0
|
12 using System.Windows.Browser;
|
gyorgy@0
|
13 using System.Globalization;
|
gyorgy@0
|
14
|
gyorgy@0
|
15
|
gyorgy@0
|
16 namespace SilverlightMediaElement
|
gyorgy@0
|
17 {
|
gyorgy@0
|
18 [ScriptableType]
|
gyorgy@0
|
19 public partial class MainPage : UserControl
|
gyorgy@0
|
20 {
|
gyorgy@0
|
21 System.Windows.Threading.DispatcherTimer _timer;
|
gyorgy@0
|
22
|
gyorgy@0
|
23 // work arounds for src, load(), play() compatibility
|
gyorgy@0
|
24 bool _isLoading = false;
|
gyorgy@0
|
25 bool _isAttemptingToPlay = false;
|
gyorgy@0
|
26
|
gyorgy@0
|
27 // variables
|
gyorgy@0
|
28 string _mediaUrl;
|
gyorgy@0
|
29 string _preload;
|
gyorgy@0
|
30 string _htmlid;
|
gyorgy@0
|
31 bool _autoplay = false;
|
gyorgy@0
|
32 bool _debug = false;
|
gyorgy@0
|
33 int _width = 0;
|
gyorgy@0
|
34 int _height = 0;
|
gyorgy@0
|
35 int _timerRate = 0;
|
gyorgy@0
|
36 double _bufferedBytes = 0;
|
gyorgy@0
|
37 double _bufferedTime = 0;
|
gyorgy@0
|
38 double _volume = 1;
|
gyorgy@0
|
39 int _videoWidth = 0;
|
gyorgy@0
|
40 int _videoHeight = 0;
|
gyorgy@0
|
41
|
gyorgy@0
|
42 // state
|
gyorgy@0
|
43 bool _isPaused = true;
|
gyorgy@0
|
44 bool _isEnded = false;
|
gyorgy@0
|
45
|
gyorgy@0
|
46 // dummy
|
gyorgy@0
|
47 bool _firedCanPlay = false;
|
gyorgy@0
|
48
|
gyorgy@0
|
49 public MainPage(IDictionary<string, string> initParams)
|
gyorgy@0
|
50 {
|
gyorgy@0
|
51 InitializeComponent();
|
gyorgy@0
|
52
|
gyorgy@0
|
53 HtmlPage.RegisterScriptableObject("MediaElementJS", this);
|
gyorgy@0
|
54
|
gyorgy@0
|
55
|
gyorgy@0
|
56 // add events
|
gyorgy@0
|
57 media.BufferingProgressChanged += new RoutedEventHandler(media_BufferingProgressChanged);
|
gyorgy@0
|
58 media.DownloadProgressChanged += new RoutedEventHandler(media_DownloadProgressChanged);
|
gyorgy@0
|
59 media.CurrentStateChanged += new RoutedEventHandler(media_CurrentStateChanged);
|
gyorgy@0
|
60 media.MediaEnded += new RoutedEventHandler(media_MediaEnded);
|
gyorgy@0
|
61 media.MediaFailed += new EventHandler<ExceptionRoutedEventArgs>(media_MediaFailed);
|
gyorgy@0
|
62 media.MediaOpened += new RoutedEventHandler(media_MediaOpened);
|
gyorgy@0
|
63
|
gyorgy@0
|
64 // get parameters
|
gyorgy@0
|
65 if (initParams.ContainsKey("id"))
|
gyorgy@0
|
66 _htmlid = initParams["id"];
|
gyorgy@0
|
67 if (initParams.ContainsKey("file"))
|
gyorgy@0
|
68 _mediaUrl = initParams["file"];
|
gyorgy@0
|
69 if (initParams.ContainsKey("autoplay") && initParams["autoplay"] == "true")
|
gyorgy@0
|
70 _autoplay = true;
|
gyorgy@0
|
71 if (initParams.ContainsKey("debug") && initParams["debug"] == "true")
|
gyorgy@0
|
72 _debug = true;
|
gyorgy@0
|
73 if (initParams.ContainsKey("preload"))
|
gyorgy@0
|
74 _preload = initParams["preload"].ToLower();
|
gyorgy@0
|
75 else
|
gyorgy@0
|
76 _preload = "";
|
gyorgy@0
|
77
|
gyorgy@0
|
78 if (!(new string[] { "none", "metadata", "auto" }).Contains(_preload)){
|
gyorgy@0
|
79 _preload = "none";
|
gyorgy@0
|
80 }
|
gyorgy@0
|
81
|
gyorgy@0
|
82 if (initParams.ContainsKey("width"))
|
gyorgy@0
|
83 Int32.TryParse(initParams["width"], out _width);
|
gyorgy@0
|
84 if (initParams.ContainsKey("height"))
|
gyorgy@0
|
85 Int32.TryParse(initParams["height"], out _height);
|
gyorgy@0
|
86 if (initParams.ContainsKey("timerate"))
|
gyorgy@0
|
87 Int32.TryParse(initParams["timerrate"], out _timerRate);
|
gyorgy@0
|
88 if (initParams.ContainsKey("startvolume"))
|
gyorgy@0
|
89 Double.TryParse(initParams["startvolume"], out _volume);
|
gyorgy@0
|
90
|
gyorgy@0
|
91 if (_timerRate == 0)
|
gyorgy@0
|
92 _timerRate = 250;
|
gyorgy@0
|
93
|
gyorgy@0
|
94 // timer
|
gyorgy@0
|
95 _timer = new System.Windows.Threading.DispatcherTimer();
|
gyorgy@0
|
96 _timer.Interval = new TimeSpan(0, 0, 0, 0, _timerRate); // 200 Milliseconds
|
gyorgy@0
|
97 _timer.Tick += new EventHandler(timer_Tick);
|
gyorgy@0
|
98 _timer.Stop();
|
gyorgy@0
|
99
|
gyorgy@0
|
100 //_mediaUrl = "http://local.mediaelement.com/media/jsaddington.mp4";
|
gyorgy@0
|
101 //_autoplay = true;
|
gyorgy@0
|
102
|
gyorgy@0
|
103 // set stage and media sizes
|
gyorgy@0
|
104 if (_width > 0)
|
gyorgy@0
|
105 LayoutRoot.Width = media.Width = this.Width = _width;
|
gyorgy@0
|
106 if (_height > 0)
|
gyorgy@0
|
107 LayoutRoot.Height = media.Height = this.Height = _height;
|
gyorgy@0
|
108
|
gyorgy@0
|
109 // debug
|
gyorgy@0
|
110 textBox1.Visibility = (_debug) ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed;
|
gyorgy@0
|
111 textBox1.IsEnabled = false;
|
gyorgy@0
|
112 textBox1.Text = "id: " + _htmlid + "\n" +
|
gyorgy@0
|
113 "file: " + _mediaUrl + "\n";
|
gyorgy@0
|
114
|
gyorgy@0
|
115
|
gyorgy@0
|
116 media.AutoPlay = _autoplay;
|
gyorgy@0
|
117 media.Volume = _volume;
|
gyorgy@0
|
118 if (!String.IsNullOrEmpty(_mediaUrl)) {
|
gyorgy@0
|
119 setSrc(_mediaUrl);
|
gyorgy@0
|
120 if (_autoplay || _preload != "none")
|
gyorgy@0
|
121 loadMedia();
|
gyorgy@0
|
122 }
|
gyorgy@0
|
123
|
gyorgy@0
|
124 media.MouseLeftButtonUp += new MouseButtonEventHandler(media_MouseLeftButtonUp);
|
gyorgy@0
|
125
|
gyorgy@0
|
126 // full screen settings
|
gyorgy@0
|
127 Application.Current.Host.Content.FullScreenChanged += new EventHandler(DisplaySizeInformation);
|
gyorgy@0
|
128 Application.Current.Host.Content.Resized += new EventHandler(DisplaySizeInformation);
|
gyorgy@0
|
129 FullscreenButton.Visibility = System.Windows.Visibility.Collapsed;
|
gyorgy@0
|
130
|
gyorgy@0
|
131 // send out init call
|
gyorgy@0
|
132 //HtmlPage.Window.Invoke("html5_MediaPluginBridge_initPlugin", new object[] {_htmlid});
|
gyorgy@0
|
133 try
|
gyorgy@0
|
134 {
|
gyorgy@0
|
135 HtmlPage.Window.Eval("mejs.MediaPluginBridge.initPlugin('" + _htmlid + "');");
|
gyorgy@0
|
136 }
|
gyorgy@0
|
137 catch { }
|
gyorgy@0
|
138 }
|
gyorgy@0
|
139
|
gyorgy@0
|
140 void media_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) {
|
gyorgy@0
|
141 SendEvent("click");
|
gyorgy@0
|
142 }
|
gyorgy@0
|
143
|
gyorgy@0
|
144 void media_MediaOpened(object sender, RoutedEventArgs e) {
|
gyorgy@0
|
145
|
gyorgy@0
|
146 _videoWidth = Convert.ToInt32(media.NaturalVideoWidth);
|
gyorgy@0
|
147 _videoHeight = Convert.ToInt32(media.NaturalVideoHeight);
|
gyorgy@0
|
148
|
gyorgy@0
|
149 SendEvent("loadedmetadata");
|
gyorgy@0
|
150 }
|
gyorgy@0
|
151
|
gyorgy@0
|
152 void timer_Tick(object sender, EventArgs e) {
|
gyorgy@0
|
153 SendEvent("timeupdate");
|
gyorgy@0
|
154 }
|
gyorgy@0
|
155
|
gyorgy@0
|
156 void StartTimer() {
|
gyorgy@0
|
157 _timer.Start();
|
gyorgy@0
|
158 }
|
gyorgy@0
|
159
|
gyorgy@0
|
160 void StopTimer() {
|
gyorgy@0
|
161 _timer.Stop();
|
gyorgy@0
|
162 }
|
gyorgy@0
|
163
|
gyorgy@0
|
164 void WriteDebug(string text) {
|
gyorgy@0
|
165 textBox1.Text += text + "\n";
|
gyorgy@0
|
166 }
|
gyorgy@0
|
167
|
gyorgy@0
|
168 void media_MediaFailed(object sender, ExceptionRoutedEventArgs e) {
|
gyorgy@0
|
169 SendEvent(e.ToString());
|
gyorgy@0
|
170 }
|
gyorgy@0
|
171
|
gyorgy@0
|
172 void media_MediaEnded(object sender, RoutedEventArgs e) {
|
gyorgy@0
|
173 _isEnded = true;
|
gyorgy@0
|
174 _isPaused = false;
|
gyorgy@0
|
175 SendEvent("ended");
|
gyorgy@0
|
176 StopTimer();
|
gyorgy@0
|
177 }
|
gyorgy@0
|
178
|
gyorgy@0
|
179 void media_CurrentStateChanged(object sender, RoutedEventArgs e) {
|
gyorgy@0
|
180
|
gyorgy@0
|
181 WriteDebug("state:" + media.CurrentState.ToString());
|
gyorgy@0
|
182
|
gyorgy@0
|
183 switch (media.CurrentState)
|
gyorgy@0
|
184 {
|
gyorgy@0
|
185 case MediaElementState.Opening:
|
gyorgy@0
|
186 SendEvent("loadstart");
|
gyorgy@0
|
187 break;
|
gyorgy@0
|
188 case MediaElementState.Playing:
|
gyorgy@0
|
189 _isEnded = false;
|
gyorgy@0
|
190 _isPaused = false;
|
gyorgy@0
|
191 _isAttemptingToPlay = false;
|
gyorgy@0
|
192 StartTimer();
|
gyorgy@0
|
193
|
gyorgy@0
|
194
|
gyorgy@0
|
195 SendEvent("play");
|
gyorgy@0
|
196 SendEvent("playing");
|
gyorgy@0
|
197 break;
|
gyorgy@0
|
198
|
gyorgy@0
|
199 case MediaElementState.Paused:
|
gyorgy@0
|
200 _isEnded = false;
|
gyorgy@0
|
201 _isPaused = true;
|
gyorgy@0
|
202
|
gyorgy@0
|
203 // special settings to allow play() to work
|
gyorgy@0
|
204 _isLoading = false;
|
gyorgy@0
|
205 WriteDebug("paused event, " + _isAttemptingToPlay);
|
gyorgy@0
|
206 if (_isAttemptingToPlay) {
|
gyorgy@0
|
207 this.playMedia();
|
gyorgy@0
|
208 }
|
gyorgy@0
|
209
|
gyorgy@0
|
210 StopTimer();
|
gyorgy@0
|
211 SendEvent("paused");
|
gyorgy@0
|
212 break;
|
gyorgy@0
|
213 case MediaElementState.Stopped:
|
gyorgy@0
|
214 _isEnded = false;
|
gyorgy@0
|
215 _isPaused = true;
|
gyorgy@0
|
216 StopTimer();
|
gyorgy@0
|
217 SendEvent("paused");
|
gyorgy@0
|
218 break;
|
gyorgy@0
|
219 case MediaElementState.Buffering:
|
gyorgy@0
|
220 SendEvent("progress");
|
gyorgy@0
|
221 break;
|
gyorgy@0
|
222 }
|
gyorgy@0
|
223
|
gyorgy@0
|
224 }
|
gyorgy@0
|
225
|
gyorgy@0
|
226 void media_BufferingProgressChanged(object sender, RoutedEventArgs e) {
|
gyorgy@0
|
227 _bufferedTime = media.DownloadProgress * media.NaturalDuration.TimeSpan.TotalSeconds;
|
gyorgy@0
|
228 _bufferedBytes = media.BufferingProgress;
|
gyorgy@0
|
229
|
gyorgy@0
|
230
|
gyorgy@0
|
231 SendEvent("progress");
|
gyorgy@0
|
232 }
|
gyorgy@0
|
233
|
gyorgy@0
|
234 void media_DownloadProgressChanged(object sender, RoutedEventArgs e) {
|
gyorgy@0
|
235 _bufferedTime = media.DownloadProgress * media.NaturalDuration.TimeSpan.TotalSeconds;
|
gyorgy@0
|
236 _bufferedBytes = media.BufferingProgress;
|
gyorgy@0
|
237
|
gyorgy@0
|
238 if (!_firedCanPlay) {
|
gyorgy@0
|
239 SendEvent("loadeddata");
|
gyorgy@0
|
240 SendEvent("canplay");
|
gyorgy@0
|
241 _firedCanPlay = true;
|
gyorgy@0
|
242 }
|
gyorgy@0
|
243
|
gyorgy@0
|
244 SendEvent("progress");
|
gyorgy@0
|
245 }
|
gyorgy@0
|
246
|
gyorgy@0
|
247
|
gyorgy@0
|
248 void SendEvent(string name) {
|
gyorgy@0
|
249 /*
|
gyorgy@0
|
250 * INVOKE
|
gyorgy@0
|
251 HtmlPage.Window.Invoke("html5_MediaPluginBridge_fireEvent",
|
gyorgy@0
|
252 _htmlid,
|
gyorgy@0
|
253 name,
|
gyorgy@0
|
254 @"'{" +
|
gyorgy@0
|
255 @"""name"": """ + name + @"""" +
|
gyorgy@0
|
256 @", ""currentTime"":" + (media.Position.TotalSeconds).ToString() + @"" +
|
gyorgy@0
|
257 @", ""duration"":" + (media.NaturalDuration.TimeSpan.TotalSeconds).ToString() + @"" +
|
gyorgy@0
|
258 @", ""paused"":" + (_isEnded).ToString().ToLower() + @"" +
|
gyorgy@0
|
259 @", ""muted"":" + (media.IsMuted).ToString().ToLower() + @"" +
|
gyorgy@0
|
260 @", ""ended"":" + (_isPaused).ToString().ToLower() + @"" +
|
gyorgy@0
|
261 @", ""volume"":" + (media.Volume).ToString() + @"" +
|
gyorgy@0
|
262 @", ""bufferedBytes"":" + (_bufferedBytes).ToString() + @"" +
|
gyorgy@0
|
263 @", ""bufferedTime"":" + (_bufferedTime).ToString() + @"" +
|
gyorgy@0
|
264 @"}'");
|
gyorgy@0
|
265 */
|
gyorgy@0
|
266
|
gyorgy@0
|
267 /*
|
gyorgy@0
|
268 * EVAL
|
gyorgy@0
|
269 HtmlPage.Window.Eval("mejs.MediaPluginBridge.fireEvent('" + _htmlid + "','" + name + "'," +
|
gyorgy@0
|
270 @"{" +
|
gyorgy@0
|
271 @"""name"": """ + name + @"""" +
|
gyorgy@0
|
272 @", ""currentTime"":" + (media.Position.TotalSeconds).ToString() + @"" +
|
gyorgy@0
|
273 @", ""duration"":" + (media.NaturalDuration.TimeSpan.TotalSeconds).ToString() + @"" +
|
gyorgy@0
|
274 @", ""paused"":" + (_isEnded).ToString().ToLower() + @"" +
|
gyorgy@0
|
275 @", ""muted"":" + (media.IsMuted).ToString().ToLower() + @"" +
|
gyorgy@0
|
276 @", ""ended"":" + (_isPaused).ToString().ToLower() + @"" +
|
gyorgy@0
|
277 @", ""volume"":" + (media.Volume).ToString() + @"" +
|
gyorgy@0
|
278 @", ""bufferedBytes"":" + (_bufferedBytes).ToString() + @"" +
|
gyorgy@0
|
279 @", ""bufferedTime"":" + (_bufferedTime).ToString() + @"" +
|
gyorgy@0
|
280 @"});");
|
gyorgy@0
|
281 * */
|
gyorgy@0
|
282
|
gyorgy@0
|
283 // setTimeout
|
gyorgy@0
|
284 try {
|
gyorgy@0
|
285 CultureInfo invCulture = CultureInfo.InvariantCulture;
|
gyorgy@0
|
286
|
gyorgy@0
|
287 HtmlPage.Window.Invoke("setTimeout", "mejs.MediaPluginBridge.fireEvent('" + _htmlid + "','" + name + "'," +
|
gyorgy@0
|
288 @"{" +
|
gyorgy@0
|
289 @"""name"": """ + name + @"""" +
|
gyorgy@0
|
290 @", ""currentTime"":" + (media.Position.TotalSeconds).ToString(invCulture) + @"" +
|
gyorgy@0
|
291 @", ""duration"":" + (media.NaturalDuration.TimeSpan.TotalSeconds).ToString(invCulture) + @"" +
|
gyorgy@0
|
292 @", ""paused"":" + (_isPaused).ToString().ToLower() + @"" +
|
gyorgy@0
|
293 @", ""muted"":" + (media.IsMuted).ToString().ToLower() + @"" +
|
gyorgy@0
|
294 @", ""ended"":" + (_isEnded).ToString().ToLower() + @"" +
|
gyorgy@0
|
295 @", ""volume"":" + (media.Volume).ToString(invCulture) + @"" +
|
gyorgy@0
|
296 @", ""bufferedBytes"":" + (_bufferedBytes).ToString(invCulture) + @"" +
|
gyorgy@0
|
297 @", ""bufferedTime"":" + (_bufferedTime).ToString(invCulture) + @"" +
|
gyorgy@0
|
298 @", ""videoWidth"":" + (_videoWidth).ToString() + @"" +
|
gyorgy@0
|
299 @", ""videoHeight"":" + (_videoHeight).ToString() + @"" +
|
gyorgy@0
|
300 @"});", 0);
|
gyorgy@0
|
301 } catch { }
|
gyorgy@0
|
302
|
gyorgy@0
|
303 }
|
gyorgy@0
|
304
|
gyorgy@0
|
305 /* HTML5 wrapper methods */
|
gyorgy@0
|
306 [ScriptableMember]
|
gyorgy@0
|
307 public void playMedia() {
|
gyorgy@0
|
308 WriteDebug("method:play " + media.CurrentState);
|
gyorgy@0
|
309
|
gyorgy@0
|
310 // sometimes people forget to call load() first
|
gyorgy@0
|
311 if (_mediaUrl != "" && media.Source == null) {
|
gyorgy@0
|
312 _isAttemptingToPlay = true;
|
gyorgy@0
|
313 loadMedia();
|
gyorgy@0
|
314 }
|
gyorgy@0
|
315
|
gyorgy@0
|
316 // store and trigger with the state change above
|
gyorgy@0
|
317 if (media.CurrentState == MediaElementState.Closed && _isLoading) {
|
gyorgy@0
|
318 WriteDebug("storing _isAttemptingToPlay ");
|
gyorgy@0
|
319 _isAttemptingToPlay = true;
|
gyorgy@0
|
320 }
|
gyorgy@0
|
321
|
gyorgy@0
|
322 media.Play();
|
gyorgy@0
|
323 _isEnded = false;
|
gyorgy@0
|
324 _isPaused = false;
|
gyorgy@0
|
325
|
gyorgy@0
|
326 //StartTimer();
|
gyorgy@0
|
327 }
|
gyorgy@0
|
328
|
gyorgy@0
|
329 [ScriptableMember]
|
gyorgy@0
|
330 public void pauseMedia() {
|
gyorgy@0
|
331 WriteDebug("method:pause " + media.CurrentState);
|
gyorgy@0
|
332
|
gyorgy@0
|
333 _isEnded = false;
|
gyorgy@0
|
334 _isPaused = true;
|
gyorgy@0
|
335
|
gyorgy@0
|
336 media.Pause();
|
gyorgy@0
|
337 StopTimer();
|
gyorgy@0
|
338 }
|
gyorgy@0
|
339
|
gyorgy@0
|
340 [ScriptableMember]
|
gyorgy@0
|
341 public void loadMedia() {
|
gyorgy@0
|
342 _isLoading = true;
|
gyorgy@0
|
343 _firedCanPlay = false;
|
gyorgy@0
|
344
|
gyorgy@0
|
345 WriteDebug("method:load " + media.CurrentState);
|
gyorgy@0
|
346 WriteDebug(" - " + _mediaUrl.ToString());
|
gyorgy@0
|
347
|
gyorgy@0
|
348 media.Source = new Uri(_mediaUrl, UriKind.Absolute);
|
gyorgy@0
|
349 //media.Play();
|
gyorgy@0
|
350 //media.Stop();
|
gyorgy@0
|
351 }
|
gyorgy@0
|
352
|
gyorgy@0
|
353 [ScriptableMember]
|
gyorgy@0
|
354 public void stopMedia() {
|
gyorgy@0
|
355 WriteDebug("method:stop " + media.CurrentState);
|
gyorgy@0
|
356
|
gyorgy@0
|
357 _isEnded = true;
|
gyorgy@0
|
358 _isPaused = false;
|
gyorgy@0
|
359
|
gyorgy@0
|
360 media.Stop();
|
gyorgy@0
|
361 StopTimer();
|
gyorgy@0
|
362 }
|
gyorgy@0
|
363
|
gyorgy@0
|
364 [ScriptableMember]
|
gyorgy@0
|
365 public void setVolume(Double volume) {
|
gyorgy@0
|
366 WriteDebug("method:setvolume: " + volume.ToString());
|
gyorgy@0
|
367
|
gyorgy@0
|
368 media.Volume = volume;
|
gyorgy@0
|
369
|
gyorgy@0
|
370 SendEvent("volumechange");
|
gyorgy@0
|
371 }
|
gyorgy@0
|
372
|
gyorgy@0
|
373 [ScriptableMember]
|
gyorgy@0
|
374 public void setMuted(bool isMuted) {
|
gyorgy@0
|
375 WriteDebug("method:setmuted: " + isMuted.ToString());
|
gyorgy@0
|
376
|
gyorgy@0
|
377 media.IsMuted = isMuted;
|
gyorgy@0
|
378
|
gyorgy@0
|
379 SendEvent("volumechange");
|
gyorgy@0
|
380
|
gyorgy@0
|
381 }
|
gyorgy@0
|
382
|
gyorgy@0
|
383 [ScriptableMember]
|
gyorgy@0
|
384 public void setCurrentTime(Double position) {
|
gyorgy@0
|
385 WriteDebug("method:setCurrentTime: " + position.ToString());
|
gyorgy@0
|
386
|
gyorgy@0
|
387 int milliseconds = Convert.ToInt32(position * 1000);
|
gyorgy@0
|
388
|
gyorgy@0
|
389 SendEvent("seeking");
|
gyorgy@0
|
390 media.Position = new TimeSpan(0, 0, 0, 0, milliseconds);
|
gyorgy@0
|
391 SendEvent("seeked");
|
gyorgy@0
|
392 }
|
gyorgy@0
|
393
|
gyorgy@0
|
394 [ScriptableMember]
|
gyorgy@0
|
395 public void setSrc(string url) {
|
gyorgy@0
|
396 _mediaUrl = url;
|
gyorgy@0
|
397 }
|
gyorgy@0
|
398
|
gyorgy@0
|
399 [ScriptableMember]
|
gyorgy@0
|
400 public void setFullscreen(bool goFullscreen) {
|
gyorgy@0
|
401
|
gyorgy@0
|
402 FullscreenButton.Visibility = System.Windows.Visibility.Visible;
|
gyorgy@0
|
403 }
|
gyorgy@0
|
404
|
gyorgy@0
|
405 [ScriptableMember]
|
gyorgy@0
|
406 public void setVideoSize(int width, int height) {
|
gyorgy@0
|
407 this.Width = media.Width = width;
|
gyorgy@0
|
408 this.Height = media.Height = height;
|
gyorgy@0
|
409 }
|
gyorgy@0
|
410
|
gyorgy@0
|
411 private void FullscreenButton_Click(object sender, RoutedEventArgs e) {
|
gyorgy@0
|
412 Application.Current.Host.Content.IsFullScreen = true;
|
gyorgy@0
|
413 FullscreenButton.Visibility = System.Windows.Visibility.Collapsed;
|
gyorgy@0
|
414 }
|
gyorgy@0
|
415
|
gyorgy@0
|
416 private void DisplaySizeInformation(Object sender, EventArgs e) {
|
gyorgy@0
|
417 this.Width = LayoutRoot.Width = media.Width = Application.Current.Host.Content.ActualWidth;
|
gyorgy@0
|
418 this.Height = LayoutRoot.Height = media.Height = Application.Current.Host.Content.ActualHeight;
|
gyorgy@0
|
419 }
|
gyorgy@0
|
420
|
gyorgy@0
|
421 }
|
gyorgy@0
|
422 }
|