Contents:
For the rest of this article, I'll mostly only give examples for video , but most apply to audio as well. Now you have two video files, and you want to let the browser decide which one to play. To do this, you can use the source element as follows:. Now the browser will first try to load and play video.
If you want to save precious bandwidth, you can tell the browser the MIME type of each video so it doesn't need to download it to tell whether it can play it:. A container format is similar to a ZIP archive containing several other files; to know that you support the individual files, you'd need information about the individual files, not just the archive format. For video, we use the codecs MIME parameter for this purpose:. Note that the codecs parameter uses double quotes, which means we have to use single quotes for the attribute value. The codec strings for Theora and Vorbis are straightforward.
The codec strings for H. The above represent the Baseline profile for H. Those are the profiles used by YouTube and are supported on the iPhone. Higher profiles require more CPU to decode but are better compressed so take less bandwidth. If you don't want to encode your video twice, you can show a message for Safari users. You could have a link visible for everyone, or you could detect that Ogg isn't supported and only then show a message. The second point requires detection, so let's go through how to do that. There are several levels of support. First, the video element might not be supported at all.
This is the case for Opera For this case, you can just put content inside the video element and it will be rendered in the above examples, the content is just "video not supported". No need to do anything further for this case. Second, the video element might be supported but the codecs you want to use are not. To detect this, you can either use the canPlayType method on a media element, or you could have an onerror event listener; if a video fails to play because the codec is not supported, an error event is fired.
The method returns one of three strings:. Note there's no "yes" — a MIME type doesn't contain enough information for a browser to know for sure whether it can play a given video. For instance, the video might have too high bitrate that the browser is unable to decode it. HTML5 earlier said to return the string "no" instead of the empty string, which would make the above code never fall back since the string "no" is truthy in JavaScript, while the empty string is falsy.
If you want to support old video-supporting browsers that implemented "no" , then you would have to check for that string explicitly, or check for "maybe" and "probably" instead. The fallback function would take out the video and source elements from the DOM, but keep the other children of the video. This function could be implemented like this:. The other way to detect lack of codec support is to listen for the error event on the video:.
This will still make browsers that don't support Ogg download part of the video; we can fix that by using the source element and using onerror on the source element instead:. If you have several source elements, the onerror handler would go on the last source element:. An error is fired on each failing source element, and since they're tried in order, you know all of them have failed if the last one gets an error event.
If you have both an Ogg and an MP4 file, you could try falling back to both by nesting the object elements inside each other. You could also build up the fallback DOM with dynamically when you detect lack of support, which avoids having huge markup boilerplate for each video. The html5media project does this using the Flowplayer Flash video player. At this point, you should have video working in all popular browsers — including Opera Note that the spec changed from autobuffer to preload , which hasn't been implemented anywhere yet.
Opera plans to change to the Firefox behavior of only loading enough to render a frame and determine duration by default, unless the preload attribute says otherwise. This will show a blank video element until the user clicks the "load video" button. If you want to show an image instead of nothing then you can use the poster attribute.
Alternatively you could use an img element and replace it with a video element dynamically when the user clicks on it or on a button. There are some more attributes for media elements that I haven't mentioned yet. I'll list them all here for completeness. The audio element has the same attributes, except for poster , width and height. The autoplay attribute would probably be used on pages where the primary content is a single video — for instance, videos on YouTube start playing automatically.
Users can in theory disable autoplaying videos with a preference in the browser, although I'm not aware of any such preference in existing browsers. If there weren't an attribute to do this, people would probably make videos start playing automatically with script anyway, which makes it harder to disable for the user. The loop attribute, if present, indicates that when the video has ended, if the direction of playback is forwards, the browser should seek back to the beginning. The video doesn't loop when playing backwards.
The autoplay , loop and controls attributes are so-called boolean attributes. Such attributes represent the "off" state when absent, and the "on" state when present; regardless of the value.
This is the same as e. In HTML5, these attributes can be written in three ways:. In the first case, the attribute value is the empty string. They all mean the same thing. It could also be written in all-uppercase or with mixed case. Setting a boolean IDL attribute to true means the corresponding attribute is set with the same value as the attribute name, and setting to false means the corresponding attribute is removed. Thus, the following are equivalent:. The width and height attributes set the dimensions for the video element, in CSS pixels.
You should not use any unit for these attributes; just like with the img element. Just like the img element, if you only set one of width and height , the other dimension is automatically adjusted appropriately so that the video remains its aspect ratio.
However, unlike the img element, if you set width and height to something that doesn't match the aspect ratio of the video, the video is not stretched to fill the box. Instead the video remains the correct aspect ratio and is letterboxed inside the video element. The video will be rendered as big as possible inside the video element while retaining the aspect ratio. You can read out the video's intrinsic width and height by using the videoWidth and videoHeight IDL attributes. If you want to use a percentage width or other units, you can set the dimensions with CSS.
If you want, you could change the dimensions on: The media attributes takes a Media Query, just like the media attribute on the style element. If you're satisfied with the browser's native controls, then you can stop reading now. If you want the controls to have a different style, or you want a button for captions, or playback speed, and so forth, then read on. Today the API is a lot bigger, and there are lots of events, so that you can implement sophisticated controls in JavaScript.
If you want to use a single button for both play and pause, you need to listen for the play and pause events. The user can play and pause from the context menu, so if you just naively toggle between play and pause for every click on your button, it would become out of sync. Initially we assume that the video is paused, since that's the initial state. Even when the autoplay attribute is used, the video is still in the paused state until some video data has been loaded and the browser decides to start playing.
Alternatively, we could come up with a more elegant solution and take look at the paused IDL attribute when updating the button's label and deciding what to do when clicking the button:. Note that when the video has ended, the paused state of the video is still unpaused. Thus, if you want to show the "play" button when the video has ended, you need to change it when getting the ended event. Initially a video element hasn't loaded anything — it's empty. When we set the src attribute, or insert a source element as a child of the video , the element automatically starts the loading process, and will try to use the src if it was set or find a suitable source element after the current script has finished running.
So to find out the latest position of buffered data, we read the end time of the last range in buffered: The number can be any float value. The other browsers never do this, but for some reason, Opera can't seem to get Windows to flush after use. For the buffered attribute, you could update the bar for every progress event, which is fired when some media data has been downloaded. You can also create video and audio elements with script.
When the load starts, a loadstart event is fired. The processing then depends on whether you used the src attribute or whether you used source elements. As for keeping track of the feed messages, that's stored in the binary omailbase.
The search indexes for the feed messages are stored in the lexicon folder in binary files. What views those feed messages belong to are stored in the indexer folder in binary files. If the feeds account is just missing from accounts. Just make sure you make it the same numbered section it was before and make sure the account count and the next available account values at the top are correct then.
If the files are missing from the newsfeed folder, you might get lucky if you restore them from a super recent backup. If the database and or indexer is corrupted, you can close down Opera and edit opearprefs. Then, start Opera up and close it so you get the mail check dialog. Then, Opera will shut down and fix a few things if it can. Then, you'll import your feed list or manually subscribe to each feed if you have to.
Only new messages will show in the feed views though. Also note that with multiple accounts in Opera, you can right-click in the mail panel, goto "show messages from" and choose to only show one account at a time if you want in Opera's "All Messages" views for example. Learn new techniques to browse popular websites. Make your Internet experience safe and secure.
Learn new techniques to browse popular websites. Make your Internet experience safe and secure. Save data, time and money on a slow mobile network in a. On a Mac preferences can be What is speed dial?Speed dial is opera term for visual bookmark that appears when Opera: In Few Bytes Preview.
Save data, time and money on a slow mobile network in a cool way. This book guides you through all the major features of Opera browser. It is easy, simple yet powerful enough to change the way you perceive Internet.
Search — Learn to search better with custom searches and quick shortcuts. Navigate — Discover new ways to navigate Internet with Opera browser. Learn how to tweet without opening tabs or to access two gmail account at the same time and more. Ease your data mining with quick notes and inserts.
Save your time and reduce frustrations with simple techniques. Find features Opera offers to safeguard you from malicious hands.