/// <summary> /// Carrega um array de bytes como vídeo. /// </summary> /// <param name="tipo">tipo do arquivo em string.</param> /// <param name="lLista">Lista a receber o arquivo de vídeo.</param> /// <param name="indice">índice de começo do vídeo.</param> /// <param name="dadosVideo">conjunto de bytes do vídeo.</param> private void CarregaVideos(String tipo, List <Video> Videos, int indice, Byte[] dadosVideo) { //todo: tentar substituir as strings e utilizar tipovideo. //caso o vídeo seja apenas vídeo e não PLS então será apenas UM arquivo de vídeo. switch (tipo) { case "V01": { // Instancia o video a partir do formato VideoV01 video = new VideoV01(); // Carrega através do ARRAY video.LoadFromBytes(dadosVideo); // Adiciona o video Videos.Add(video); } break; case "V02": { // Instancia o video a partir do formato VideoV02 video = new VideoV02(); // Carrega através do ARRAY video.LoadFromBytes(dadosVideo); // Adiciona o video Videos.Add(video); } break; case "V03": { } break; case "V04": { } break; case "PLS": { //Instancia o PLS. Arquivo_PLS please = new Arquivo_PLS(); please.LoadFromBytes(dadosVideo); foreach (Video video in please.listaVideos) { Videos.Add(video); } } break; } }
/// <summary> /// Traduz os bytes de dados arrayados para o formato novo. /// </summary> /// <param name="dados">Arquivo já lido do disco.</param> private void FromBytesToFormatoMPT(byte[] dados) { unsafe { fixed(byte *pSrc = dados) { FormatoMensagemPaths *mensagemPaths = (FormatoMensagemPaths *)pSrc; this.versao = mensagemPaths->versao; this.reservado = mensagemPaths->reservado; this.idMensagem = mensagemPaths->idMensagem; for (int i = 0; i < 58; i++) { this.reservado2[i] = mensagemPaths->reservado2[i]; } this.crc = mensagemPaths->crc; //a princípio, vamos pular esses 64 bytes. //this.pathVideo = ArrayLDX2.ByteArrayToString(mensagemPaths->pathVideo, 64); //limpa a lista de videos this.Videos.Clear(); //indice para leitura dos dados no arquivo. int indice = sizeof(FormatoMensagemPaths) - 64; //efetua a leitura do tamanho do vídeo.(próximos 4 bytes após o FormatoMensagemPaths) uint TamanhoArquivo = BitConverter.ToUInt32(dados, indice); //indice do inicio do arquivo a ser lido int indiceInicial = indice; //pula o tamanho. (já no conteúdo de vídeo.) indice = indice + sizeof(uint); //pula a versão. indice = indice + 1; //aloca o suficiente pra ler o vídeo. byte[] dadosVideo = new byte[TamanhoArquivo]; //copia os dados do arquivo de vídeo com o tamanho e versão. Array.Copy(dados, indiceInicial, dadosVideo, 0, TamanhoArquivo); //verifica o tipo do vídeo(v01 ou v02) ou se é Arquivo PLS..Equals("V01") String tipo = Encoding.ASCII.GetString(dados, indice, 3).ToUpper(); //todo: tentar substituir as strings e utilizar tipovideo. //caso o vídeo seja apenas vídeo e não PLS então será apenas UM arquivo de vídeo. switch (tipo) { case "V01": { // Instancia o video a partir do formato VideoV01 video = new VideoV01(); // Carrega através do ARRAY video.LoadFromBytes(dadosVideo); // Adiciona o video Videos.Add(video); } break; case "V02": { // Instancia o video a partir do formato VideoV02 video = new VideoV02(); // Carrega através do ARRAY video.LoadFromBytes(dadosVideo); // Adiciona o video Videos.Add(video); } break; case "V03": { } break; case "V04": { } break; case "PLS": { //Instancia o PLS. Arquivo_PLS please = new Arquivo_PLS(); please.LoadFromBytes(dadosVideo); foreach (Video video in please.listaVideos) { Videos.Add(video); } } break; } indice += dadosVideo.Length; } } }