Como não existem componentes grátis para essa função, teremos que improvisar, usando um programa externo, para isso você vai precisar alterar a segurança da pasta. Mas veremos isso mais para frente. Vamos aproveitar para fazer o sistema completo, desde o upload do arquivo.
Iniciando o exemplo
Com o Visual Studio aberto, crie um novo Web Form, com o nome que preferir. Aqui vamos usar EnviarVideo.aspx:
Agora, abra a Toolbox, arraste um controle File Upload, Button (ou Link Button, como você preferir) e uma Label.
Com um duplo clique no objeto Button ele irá criar a ação.
Preencha conforme a Listagem 1:
01 - protected void Button1_Click(object sender, EventArgs e)
02 - {
03 - if (FileUpload1.HasFile)
04 - {
05 - string arq_tipo = FileUpload1.FileName.Remove(0, FileUpload1.FileName.Length - 3);
06 - if (arq_tipo.ToString() == "wmv")
07 - {
08 - string video = Server.MapPath("upload/") + "nome_do_video.wmv";
09 - string imagem = Server.MapPath("upload/") + "nome_da_imagem.jpg";
10 - FileUpload1.SaveAs(video);
11 - }
12 - }
13 - }
Para quem já estiver familiarizado com o C# será simples entender, mas vamos explicar por partes.
Linha 03: Verificamos se tem o arquivo foi escolhido.
Linhas 05 e 06: pegamos a extensão do arquivo e verificamos sé um vídeo.
Linha 08 e 09: indicam o nome e a pasta dos arquivos a serem salvos (vídeo e imagem, respectivamente).
Linha 10: o vídeo é salvo.
A primeira parte, o upload está pronta. Vamos agora ao que realmente interessa, como tirar uma thumbnail de um arquivo de vídeo.
Para isso vamos usar um programa chamado FFMPEG, segue o aplicativo junto com o material fonte (você também pode encontra-lo no Google).
Coloque ele numa pasta chamada ffmpeg, dentro da mesma pasta da página que estamos criando a página que vai executar o programa. Nessas duas pastas você deve dar autorização para Ler, Gravar e Executar.
Depois da linha 10, vamos incluir conforme a Listagem 02:
01 - string executavel = Server.MapPath("ffmpeg/ffmpeg.exe");
02 - string parametros = " -y -i " + video + " -vframes 1 -ss 00:00:03 -an -vcodec
mjpeg -f rawvideo " + imagem;
03 - System.Diagnostics.Process.Start(@executavel, parametros);
Veja o que foi feito:
Linha 01: informamos o local do arquivo executável.
Linha 02: definimos os parâmetros para execução do programa. Existem vários parâmetros, mas vou comentar apenas os mais importantes:
- -i video = definimos o arquivo de vídeo que fizemos o upload.
- -ss 00:00:03 = momento em que a thumbnail será tirada, no caso aos 3 segundos.
- imgem = local onde a imagem será sava, que definimos antes.
- você pode encontrar mais parâmetros e formatar da forma que preferir, se fizer alguma melhora, divida com os demais d=).
Depois, vamos informar ao usuário que o arquivo foi salvo:
01 - Label1.Text = "Vídeo enviado!";
O código final ficará igual a Listagem 03:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class EnviarVideo : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
string arq_tipo = FileUpload1.FileName.Remove(0, FileUpload1.FileName.Length - 3);
if (arq_tipo.ToString() == "wmv")
{
string video = Server.MapPath("upload/") + "nome_do_video.wmv";
string imagem = Server.MapPath("upload/") + "nome_da_imagem.jpg";
FileUpload1.SaveAs(video);
string executavel = Server.MapPath("ffmpeg/ffmpeg.exe");
string parametros = " -y -i " + video + " -vframes 1 -ss 00:00:03 -an -vcodec mjpeg -f rawvideo " + imagem;
System.Diagnostics.Process.Start(@executavel, parametros);
Label1.Text = "Vídeo enviado!";
}
}
}
}
Lembrem-se de colocar as permissões nas pastas, mas atenção, preferencialmente crie uma pasta separada e use autenticação pois essas permissões vão diminuir a segurança da sua aplicação.