itextsharp add annotation to existing pdf c# : Change link in pdf file control application platform web page azure winforms web browser 14812-part1759

Figure 5-22. Patience, grasshopper
Batch Encoding H.264 Video with HandBrake
(As in the previous section, in this section I’m going to use “H.264 video” as a shorthand
for “H.264 Baseline profile video and AAC low-complexity profile audio in an MPEG-4
container.” This is the combination of codecs+container that works natively in Safari,
in Adobe Flash, on the iPhone, and on Google Android devices.)
As I mentioned in the preceding section, HandBrake also comes in a command-line
edition. As with the graphical edition, you should download a recent snapshot from
http://handbrake.fr/downloads2.php.
Like  ffmpeg2theora  (see “Batch Encoding Ogg Video with ffmpeg2the-
ora” on page 98), the command-line edition of HandBrake offers a dizzying array of
options. (Type 
HandBrakeCLI --help
in a Terminal window or at a command prompt
to read about them.) I’ll focus on just a few:
--preset "X"
, where 
"X"
is the name of a HandBrake preset (it’s important to put
the name in quotes). The preset you want for H.264 web video is called “iPhone
& iPod Touch”.
--width W
, where 
W
is the width of your encoded video. HandBrake will automat-
ically adjust the height to maintain the original video’s proportions.
--vb Q
, where 
Q
is the average bitrate (measured in kilobits per second).
--two-pass
, which enables two-pass encoding.
--turbo
, which enables a turbo first pass during two-pass encoding.
--input F
, where 
F
is the filename of your source video.
--output E
, where 
E
is the destination filename for your encoded video.
Here is an example of calling HandBrake on the command line, with command-line
flags that match the settings we chose with the graphical version of HandBrake:
you@localhost$ HandBrakeCLI --preset "iPhone & iPod Touch"
--width 320
--vb 600
--two-pass
--turbo
--input pr6.dv
--output pr6.mp4
Batch Encoding H.264 Video with HandBrake | 107
Download from Library of Wow! eBook <www.wowebook.com>
Change link in pdf file - insert, remove PDF links in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Free C# example code is offered for users to edit PDF document hyperlink (url), like inserting and deleting
accessible links in pdf; add links to pdf document
Change link in pdf file - VB.NET PDF url edit library: insert, remove PDF links in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Help to Insert a Hyperlink to Specified PDF Document Page
convert a word document to pdf with hyperlinks; adding an email link to a pdf
From top to bottom, this command runs HandBrake with the “iPhone & iPod Touch”
preset, resizes the video to 320×240, sets the average bitrate to 600 kbps, enables two-
pass encoding with a turbo first pass, reads the file pr6.dv, and encodes it as pr6.mp4.
Whew!
Encoding WebM Video with ffmpeg
I’m writing this on May 20, 2010. The WebM format was literally released yesterday.
As such, there is not a lot of choice for encoding tools, and very few end-to-end guides
are available. This will all get easier as tools are written (or updated) to provide one-
click support for WebM. Until then, here are the tools you will need:
• libvp8, and a special version of ffmpeg with additional patches (to connect it with
libvp8) that are not yet part of the official ffmpeg repository:
Instructions for Linux, which I have personally tested on Ubuntu “Lucid” 10.04.
Instructions for Windows, which I have not personally tested.
• The latest version of mkclean.
Ready? OK. On the command line, run ffmpeg with no parameters and verify that it
was compiled with VP8 support:
you@localhost$ ffmpeg
FFmpeg version SVN-r23197, Copyright (c) 2000-2010 the FFmpeg developers
built on May 19 2010 22:32:20 with gcc 4.4.3
configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc 
--enable-pthreads --enable-libfaac --enable-libfaad --enable-libmp3lame 
--enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora 
--enable-libx264 --enable-libxvid --enable-x11grab --enable-libvpx-vp8
If you don’t see the magic words 
--enable-libvpx-vp8
, you don’t have the right version
of ffmpeg. (If you swear you just compiled it properly, check to see if you have two
versions installed. That’s fine, they won’t conflict with each other—you’ll just need to
use the full path of the VP8-enabled version of ffmpeg.)
I’m going to show you how to do a two-pass encode (see “Encoding H.264 Video with
HandBrake” on page 100). The first pass just scans through the input video file
(
-i pr6.dv
) and writes out some statistics to a  logfile  (which will be autonamed
pr6.dv-0.log). You specify the video codec with the 
-vcodec
parameter:
you@localhost$ ffmpeg -pass 1 -passlogfile pr6.dv -threads 16 -token_partitions 4 
-altref 1 -lag 16 -keyint_min 0 -g 250 -mb_static_threshold 0 
-skip_threshold 0 -qmin 1 -qmax 51 -i pr6.dv -vcodec libvpx_vp8 -an 
-f rawvideo -y NUL
108 | Chapter 5: Video on the Web
Download from Library of Wow! eBook <www.wowebook.com>
VB.NET PDF File Compress Library: Compress reduce PDF size in vb.
list below is mainly to optimize PDF file with multiple Program.RootPath + "\\" 3_optimized.pdf"; 'create optimizing 150.0F 'to change image compression
pdf links; pdf hyperlinks
C# PDF File Compress Library: Compress reduce PDF size in C#.net
list below is mainly to optimize PDF file with multiple Program.RootPath + "\\" 3_optimized.pdf"; // create optimizing 150F; // to change image compression
add links to pdf document; adding links to pdf
Most of the ffmpeg command line has nothing to do with VP8 or WebM. libvp8 does
support a number of VP8-specific options that you can pass to ffmpeg, but I don’t yet
know how any of them work. Once I find a good explanation of these options, I’ll
provide a link on this book’s website.
For the second pass, ffmpeg will read the statistics it wrote during the first pass and
actually do the encoding of the video and the audio. It will write out an MKV file, which
we will convert to a WebM file later. (Eventually ffmpeg will be able to write WebM
files directly, but that functionality is currently broken in a subtle and pernicious way.)
Here’s the command line for the second pass:
you@localhost$ ffmpeg -pass 2 -passlogfile pr6.dv -threads 16 -token_partitions 4 
-altref 1 -lag 16 -keyint_min 0 -g 250 -mb_static_threshold 0 
-skip_threshold 0 -qmin 1 -qmax 51 -i pr6.dv -vcodec libvpx_vp8 
-b 614400 -s 320x240 -aspect 4:3 -acodec vorbis -y pr6.mkv
There are five important parameters here:
-vcodec libvpx_vp8
Specifies that we’re encoding with the VP8 video codec. WebM always uses VP8
video.
-b 614400
Specifies the bitrate. Unlike other formats, libvp8 expects the bitrate in actual bits,
not kilobits. If you want a 600-kbps video, multiply 600 by 1024 to get 614400.
-s 320x240
Specifies the target size, width by height.
-aspect 4:3
Specifies the aspect ratio of the video. Standard-definition video is usually 4:3, but
most high-definition video is 16:9 or 16:10. In my testing, I found that I had to
specify this explicitly on the command line, instead of relying on ffmpeg to auto-
detect it.
-acodec vorbis
Specifies that we’re encoding with the Vorbis audio codec. WebM always uses
Vorbis audio.
Now we have an MKV file with VP8 video and Vorbis audio. That’s really close to what
we want. The container format of WebM is technically very similar to MKV. In fact,
it’s a proper subset. We only need to twiddle a few bits to create our final WebM video
file, using the mkclean utility I mentioned earlier:
you@localhost$ mkclean --doctype 4 pr6.mkv pr6.webm
And that’s all she wrote!
Encoding WebM Video with ffmpeg | 109
Download from Library of Wow! eBook <www.wowebook.com>
VB.NET PDF Password Library: add, remove, edit PDF file password
Dim setting As PasswordSetting = New PasswordSetting(newUserPassword, newOwnerPassword) ' Change password for an encrypted PDF file and output to a new file.
add links to pdf online; add page number to pdf hyperlink
C# PDF Password Library: add, remove, edit PDF file password in C#
PasswordSetting setting = new PasswordSetting(newUserPassword, newOwnerPassword); // Change password for an encrypted PDF file and output to a new file.
add hyperlink to pdf acrobat; clickable links in pdf
At Last, the Markup
I’m pretty sure this was supposed to be an HTML book. So where’s the markup?
HTML5 gives you two ways to include video on your web page. Both of them involve
the 
<video>
element. If you only have one video file, you can simply link to it in a 
src
attribute. This is remarkably similar to including an image with an 
<img src="...">
tag.
<video src="pr6.webm"></video>
Technically, that’s all you need. But just like in an 
<img>
tag, you should always include
width
and 
height
attributes in your 
<video>
tags. The 
width
and 
height
attributes can
be the same as the maximum width and height you specified during the encoding
process:
<video src="pr6.webm" width="320" height="240"></video>
Don’t worry if one dimension of the video is a little smaller than that. Your browser
will center the video inside the box defined by the 
<video>
tag. It won’t ever be
smooshed or stretched out of proportion.
By default, the 
<video>
element will not expose any sort of player controls. You can
create your own controls with plain old HTML, CSS, and JavaScript. The 
<video>
el-
ement has methods like 
play()
and 
pause()
and a read/write property called 
current
Time
. There are also read/write 
volume
and 
muted
properties. So you really have every-
thing you need to build your own interface.
If you don’t want to build your own interface, you can tell the browser to display a
built-in set of controls. To do this, just include the 
controls
attribute in your 
<video>
tag:
<video src="pr6.webm" width="320" height="240" controls></video>
There are two other optional attributes I want to mention before we go any further:
preload
and 
autoplay
. Don’t shoot the messenger; let me explain why these are useful.
The 
preload
attribute tells the browser that you would like it to start downloading the
video file as soon as the page loads. This makes sense if the entire point of the page is
to view the video. On the other hand, if it’s just supplementary material that only a few
visitors will watch, you can set 
preload
to 
none
to tell the browser to minimize network
traffic.
Here’s an example of a video that will start downloading (but not playing) as soon as
the page loads:
<video src="pr6.webm" width="320" height="240" preload></video>
And here’s an example of a video that will not start downloading as soon as the page
loads:
<video src="pr6.webm" width="320" height="240" preload="none"></video>
110 | Chapter 5: Video on the Web
Download from Library of Wow! eBook <www.wowebook.com>
C# PDF Library SDK to view, edit, convert, process PDF file for C#
and quick navigation link in PDF bookmark. C#.NET: Edit PDF Metadata. PDF SDK for .NET allows you to read, add, edit, update, and delete PDF file metadata, like
add hyperlink to pdf online; adding an email link to a pdf
C# PDF Page Rotate Library: rotate PDF page permanently in C#.net
C#.NET PDF Library - Rotate PDF Page in C#.NET. Empower C# Users to Change the Rotation Angle of PDF File Page Using C# Programming Language in .NET Application
pdf edit hyperlink; add links pdf document
The 
autoplay
attribute does exactly what it sounds like: it tells the browser that you
would like it to start downloading the video file as soon as the page loads, and that you
would like it to start playing the video automatically as soon as possible. Some people
love this; some people hate it. But let me explain why it’s important to have an attribute
like this in HTML5. Some people are going to want their videos to play automatically,
even if it annoys their visitors. If HTML5 didn’t define a standard way to autoplay
videos, people would resort to JavaScript hacks to do it anyway, for example, by calling
the video’s 
play()
method during the window’s 
load
event. This would be much harder
for visitors to counteract. On the other hand, it’s a simple matter to add an extension
to your browser (or write one, if necessary) that allows you to say “ignore the
autoplay
attribute, I don’t ever want videos to play automatically.”
Here’s an example of a video that will start downloading and playing as soon as possible
after the page loads:
<video src="pr6.webm" width="320" height="240" autoplay></video>
And here is a Greasemonkey script that you can install in your local copy of Firefox
that prevents HTML5 video from playing automatically. It uses the 
autoplay
DOM
attribute defined by HTML5, which is the JavaScript equivalent of the 
autoplay
attrib-
ute in your HTML markup:
// ==UserScript==
// @name           Disable video autoplay
// @namespace      http://diveintomark.org/projects/greasemonkey/
// @description    Ensures that HTML5 video elements do not autoplay
// @include        *
// ==/UserScript==
var arVideos = document.getElementsByTagName('video');
for (var i = arVideos.length - 1; i >= 0; i--) {
var elmVideo = arVideos[i];
elmVideo.autoplay = false;
}
But wait a second. If you’ve been following along through this whole chapter, you know
that you don’t have just one video file; you have three. One is an .ogv file that you
created with Firefogg (see “Encoding Ogg Video with Firefogg” on page 91) or
ffmpeg2theora (see “Batch Encoding Ogg Video with ffmpeg2theora” on page 98). The
second is an .mp4 file that you created with HandBrake (see “Encoding H.264 Video
with HandBrake” on page 100). The third is a .webm file that you created with
ffmpeg (see “Encoding WebM Video with ffmpeg” on page 108). HTML5 provides a
way to link to all three of them: the 
<source>
element. Each 
<video>
element can contain
as many 
<source>
elements as you need. Your browser will go down the list of video
sources, in order, and play the first one it’s able to play.
That raises another question: how does the browser know which video it can play? In
the worst-case scenario, it loads each of the videos and tries to play them. That’s a big
At Last, the Markup | 111
Download from Library of Wow! eBook <www.wowebook.com>
.NET PDF SDK - Description of All PDF Processing Control Feastures
Easy to change PDF original password; Options for setting PDF security PDF Hyperlink Edit. Support adding and inserting hyperlink (link) to PDF document; Allow to
convert a word document to pdf with hyperlinks; add links to pdf in preview
RasterEdge .NET Document Imaging Trial Package Download Link.
PDF Files; Split PDF Document; Remove Password from PDF; Change PDF Permission Settings. PDF to HTML; C#: Convert PDF to Jpeg; C# File: Compress PDF; C# File
pdf link to attached file; add hyperlink pdf document
waste of bandwidth, though. You’ll save a lot of network traffic if you tell the browser
up front about each video. You do this with the 
type
attribute on the 
<source>
element.
Here’s the whole thing:
<video width="320" height="240" controls>
<source src="pr6.mp4"  type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'>
<source src="pr6.webm" type='video/webm; codecs="vp8, vorbis"'>
<source src="pr6.ogv"  type='video/ogg; codecs="theora, vorbis"'>
</video>
Let’s break that down. The 
<video>
element specifies the width and height for the video,
but it doesn’t actually link to a video file. Inside the 
<video>
element are two
<source>
elements. Each 
<source>
element links to a single video file (with the 
src
attribute) and gives information about the video format (in the 
type
attribute).
The 
type
attribute looks complicated—hell, it is complicated. It contains three pieces
of information: the container format (see “Video Containers” on page 81), the video
codec (see “Video Codecs” on page 83), and the audio codec (see “Audio Co-
decs” on page 85). Let’s start from the bottom. For the .ogv video file, the container
format is Ogg, represented here as 
video/ogg
. (Technically speaking, that’s the MIME
type for Ogg video files.) The video codec is Theora, and the audio codec is Vorbis.
That’s simple enough, except the format of the attribute value is a little screwy. The
codecs
value itself has to include quotation marks, which means you’ll need to use a
different kind of quotation mark to surround the entire 
type
value:
<source src="pr6.ogv" type='video/ogg; codecs="theora, vorbis"'>
The 
<source>
element for the WebM file is much the same, but with a different MIME
type (
video/webm
instead of 
video/ogg
) and a different video codec (
vp8
instead of
theora
) listed within the 
codecs
parameter:
<source src="pr6.webm" type='video/webm; codecs="vp8, vorbis"'>
The 
<source>
element for the H.264 file is even more complicated. Remember when I
said that both H.264 video (see “H.264” on page 84) and AAC audio (see “Advanced
Audio Coding” on page 87) can come in different “profiles”? We encoded with the
H.264 Baseline profile and the AAC low-complexity profile, then wrapped it all in an
MPEG-4 container. All of that information is included in the 
type
attribute:
<source src="pr6.mp4" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'>
The benefit of going to all this trouble is that the browser will be able to check the
type
attribute first to see if it can play a particular video file. If a browser decides it can’t
play a particular video, it won’t download the file. Not even part of the file. You’ll save
on bandwidth, and your visitors will see the video they came for, faster.
If you follow the instructions in this chapter for encoding your videos, you can just
copy the 
type
attribute values from this example. Otherwise, you’ll need to work out
the 
type
parameters for yourself.
112 | Chapter 5: Video on the Web
Download from Library of Wow! eBook <www.wowebook.com>
Professor Markup Says
At the time of writing (May 20, 2010), the iPad has a bug that prevents it from noticing
anything but the first video source listed. Sadly, this means you will need to list your
MP4 file first, followed by the free video formats. Sigh.
MIME Types Rear Their Ugly Head
There are so many pieces to the video puzzle, I hesitate to even bring this up. But it’s
important, because a misconfigured web server can lead to endless frustration as you
try to debug why your videos play on your local computer but fail to play when you
deploy them to your production site. If you run into this problem, the root cause is
probably MIME types.
I mentioned MIME types in Chapter 1 (see “MIME Types” on page 1), but you probably
glazed over that and didn’t appreciate the significance. So here it is in all-caps.
Professor Markup Shouts
VIDEO FILES MUST BE SERVED WITH THE PROPER MIME TYPE!
What’s the proper MIME type? You’ve already seen it; it’s part of the value of the
type
attribute of a 
<source>
element. But setting the 
type
attribute in your HTML
markup is not sufficient. You also need to ensure that your web server includes the
proper MIME type in the 
Content-Type
HTTP header.
If you’re using the Apache web server or some derivative of Apache, you can use 
Add
Type
directives in your site-wide httpd.conf or in an .htaccess file in the directory where
you store your video files. (If you use some other web server, consult your server’s
documentation on how to set the 
Content-Type
HTTP header for specific file types.)
The 
AddType
directives you’ll need to include are:
AddType video/ogg .ogv
AddType video/mp4 .mp4
AddType video/webm .webm
The first line is for videos in an Ogg container. The second line is for videos in an
MPEG-4 container. The third is for WebM. Set these once, and forget them. If you
don’t, your videos will fail to play in some browsers, even if you include the MIME type
in the 
type
attribute in your HTML markup.
For even more gory details about configuring your web server, I direct your attention
to an excellent Mozilla Developer Center article, “Configuring servers for Ogg me
dia”. (The advice in that article applies to MP4 and WebM video, too.)
At Last, the Markup | 113
Download from Library of Wow! eBook <www.wowebook.com>
What About IE?
As I write this, Microsoft has released a “developer preview” of Internet Explorer 9. It
does not yet support the HTML5 
<video>
element, but Microsoft has publicly prom
ised that the final version of IE 9 will support H.264 video and AAC audio in an MPEG-4
container, just like Safari on desktop Macs and Mobile Safari on iOS.
But what about older versions of Internet Explorer? Like, you know, all shipping ver-
sions up to and including IE 8? Most people who use Internet Explorer also have the
Adobe Flash plug-in installed. Modern versions of Adobe Flash (starting with
9.0.60.184) support H.264 video and AAC audio in an MPEG-4 container. Once you’ve
encoded your H.264 video for Safari (see “Encoding H.264 Video with Hand-
Brake” on page 100), you can play it in a Flash-based video player if you detect that
your visitor doesn’t have an HTML5-capable browser.
FlowPlayer is an open source, GPL-licensed, Flash-based video player. (Commercial
licenses are also available; see http://flowplayer.org/download/.) FlowPlayer doesn’t
know anything about the 
<video>
element. It won’t magically transform a 
<video>
tag
into a Flash object. But HTML5 is well designed to handle this, because you can nest
an 
<object>
element within a 
<video>
element. Browsers that don’t support HTML5
video will ignore the 
<video>
element and simply render the nested 
<object>
instead,
which will invoke the Flash plug-in and play the movie through FlowPlayer. Browsers
that support HTML5 video will find a video source they can play and play it, and ignore
the nested 
<object>
element altogether.
That last bit is the key to the whole puzzle: HTML5 specifies that all elements (other
than 
<source>
elements) that are children of a 
<video>
element must be ignored alto-
gether. That allows you to use HTML5 video in newer browsers and fall back to Flash
gracefully in older browsers, without requiring any fancy JavaScript hacks. You can
read more about this technique at the Video for Everybody! site.
A Complete Example
Let’s look at an example that uses these techniques. I’ve extended the Video for Ev-
erybody! code to include a WebM-formatted video. Using these commands, I encoded
the same source video into three formats:
## Theora/Vorbis/Ogg
you@localhost$ ffmpeg2theora --videobitrate 200 --max_size 320x240 --output pr6.ogv 
pr6.dv
## H.264/AAC/MP4
you@localhost$ HandBrakeCLI --preset "iPhone & iPod Touch" --vb 200 --width 320
--two-pass --turbo --optimize --input pr6.dv --output pr6.mp4
## VP8/Vorbis/WebM
you@localhost$ ffmpeg -pass 1 -passlogfile pr6.dv -threads 16 -token_partitions 4
-altref 1 -lag 16 -keyint_min 0 -g 250 -mb_static_threshold 0 
114 | Chapter 5: Video on the Web
Download from Library of Wow! eBook <www.wowebook.com>
-skip_threshold 0 -qmin 1 -qmax 51 -i pr6.dv -vcodec libvpx_vp8 
-an -f rawvideo -y NULffmpeg --videobitrate 200
you@localhost$ ffmpeg -pass 2 -passlogfile pr6.dv -threads 16 -token_partitions 4
-altref 1 -lag 16 -keyint_min 0 -g 250 -mb_static_threshold 0 
-skip_threshold 0 -qmin 1 -qmax 51 -i pr6.dv -vcodec libvpx_vp8 
-b 204800 -s 320x240 -aspect 4:3 -acodec vorbis -ac 2 -y pr6.mkv
you@localhost$ mkclean --doctype 4 pr6.mkv pr6.webm
The final markup uses a 
<video>
element for HTML5 video, with a nested 
<object>
element for Flash fallback:
<video id="movie" width="320" height="240" preload controls>
<source src="pr6.mp4" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"' />
<source src="pr6.webm" type='video/webm; codecs="vp8, vorbis"' />
<source src="pr6.ogv" type='video/ogg; codecs="theora, vorbis"' />
<object width="320" height="240" type="application/x-shockwave-flash"
data="flowplayer-3.2.1.swf">
<param name="movie" value="flowplayer-3.2.1.swf" />
<param name="allowfullscreen" value="true" />
<param name="flashvars" value='config={
"clip": {"url": "http://wearehugh.com/dih5/good/bbb_480p.mp4",
"autoPlay":false, "autoBuffering":true}}' />
<p>Download video as <a href="pr6.mp4">MP4</a>,
<a href="pr6.webm">WebM</a>, or
<a href="pr6.ogv">Ogg</a>.</p>
</object>
</video>
With the combination of HTML5 and Flash, you should be able to watch this video in
almost any browser and device.
Further Reading
• “The 
<video>
element” in the HTML5 specification
• Video for Everybody!
• “A gentle introduction to video encoding”
• “Theora 1.1 is released—what you need to know”, by Christopher Blizzard
• “Configuring servers for Ogg media”
• “Encoding with the 
x264
codec”
• “Video type parameters”
• Zencoder Video JS, custom controls for HTML5 video
• “Everything you need to know about HTML5 audio and video”, by Simon Pieters
Further Reading | 115
Download from Library of Wow! eBook <www.wowebook.com>
Download from Library of Wow! eBook <www.wowebook.com>
Documents you may be interested
Documents you may be interested