+ Responder ao Tópico
Resultados 1 a 9 de 9

Tópico: Biblioteca DirectShow para media player em C++

  1. #1
    Jogador de Wii Sports (2006) MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar
    Data de Ingresso
    07/2016
    Posts
    58
    Mentioned
    15 Post(s)
    Tagged
    0 Thread(s)
    Reputação
    67

    Biblioteca DirectShow para media player em C++

    Fala galera eu tenho estudado um pouco de DirectX e resolvi testar essa API de áudio e vídeo da Microsoft, preciso dizer que fiquei bastante satisfeito com a facilidade de uso e formatos de arquivos suportados.

    Instalei o Visual Studio 2017 Community Edition( Versão Gratuita do VS ) e apesar dele ainda ser um tanto pesado para o meu já calejado PC, gostei muito do novo instalador, é possível personalizar tudo e instalar somente o que você realmente precisa, pode-se instalar por exemplo o Pacote de desenvolvimento C++ sem precisar instalar o C Sharp entre outras coisas que eram obrigatórias na versão 2015.

    Para usar no CodeBlocks creio eu que basta instalar a Windows SDK mais nova mas como eu estava querendo testar já um tempo este VS 2017 aproveitei a oportunidade.

    Procurando alguns tutoriais achei o tutorial desse rapaz no YouTube

    https://www.youtube.com/watch?v=RsBIu9QQCIg

    Infelizmente o Projeto na descrição não estava mais disponível e eu precisei preencher algumas lacunas usando como base a literatura disponível no site da Ms:

    http://msdn.microsoft.com/en-us/library/windows/desktop/dd375454(v=vs.85).aspx

    Especificamente aqui:

    https://msdn.microsoft.com/en-us/library/windows/desktop/dd389098(v=vs.85).aspx

    Foi usado C++ com o form design do VS 2017 seguindo os passos do tutorial citado, eu ando meio traumatizado com o WinAPI, ela é ótima para códigos rápidos pelo ganho de velocidade mas para montar telas com controles é um martírio.

    Bom vamos o que interessa, fiz um vídeo usando o tutorial como base e testando alguns formatos de arquivos, o interessante dessa biblioteca é que ela funciona de acordo com os codecs instalados no PC. Aqui eu uso o K- lite Codec Pack e consegui rodar uma vasta variedade de arquivos de media.

    Real media, Real media com bitrate variável, QuickTime, FLV, mpg, wmv, AVI, MP4 com x264, mp3, Xvid ou seja todos os tipos de arquivos que eu tinha disponível para teste.

    Aqui esta o vídeo com os testes, desculpem pela qualidade ainda sou muito cru nesse lance de fazer vídeo.



    Quem quiser fazer o Tutorial que citei do YouTube aqui esta o código.

    Código:
    // Video.cpp
    
    using namespace System;
    using namespace System::Windows::Forms;
    
    [STAThread]
    
    int main(array<String^>^args)
    {
        Application::EnableVisualStyles();
        Application::SetCompatibleTextRenderingDefault(false);
    
        //Create the Main window and run it
        VideoPlayer::video form;
        Application::Run(%form);
    
        return 0;
    
    }
    Código:
    // video.h - Codigo para bibliotecas e includes (inicio do arquivo)
    
    #pragma once
    
    #pragma comment(lib, "strmiids.lib")
    #pragma comment(lib, "ole32.lib")
    #include <dshow.h>
    #include <vcclr.h>
    Código:
    video.h - Codigo para o evento do botao1
    
    IGraphBuilder *pGraph;
            IMediaControl *pControl;
            IMediaEvent   *pEvent;
            IVideoWindow  * pWindow;
            HRESULT hr;
    
            hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph);
            if (FAILED(hr))
            {
                printf("ERROR - Could not create the Filter Graph Manager.");
                return;
            }
    
            hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
            hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
            hr = pGraph->QueryInterface(IID_IVideoWindow, (void **)&pWindow);
    
            String^ filename = textBox1->Text;
            pin_ptr<const wchar_t> wname = PtrToStringChars(filename);
    
            hr = pGraph->RenderFile(wname, NULL);
    
            if (SUCCEEDED(hr))
            {
                System::Drawing::Rectangle rc = pictureBox1->ClientRectangle;
                hr = pWindow->put_Owner(OAHWND(pictureBox1->Handle.ToInt64()));
                hr = pWindow->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN );
                hr = pWindow->SetWindowPosition(0, 0, rc.Right, rc.Bottom );
    
                hr = pControl->Run();
            }
            else
            {
                MessageBox::Show("Arquivo de Media não selecionado");
            }
    
            pControl->Release();
            pEvent->Release();
            pGraph->Release();
            CoUninitialize();
    Resumindo bastante promissor é possível criar um reprodutor de media de forma simples e rápida e ate mesmo

  2. #2
    Mestre dos Arcades Caseiros Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Avatar de Fábio iGames
    Data de Ingresso
    03/2013
    Localização
    São Paulo / Sp - Zona Sul
    Posts
    624
    Mentioned
    162 Post(s)
    Tagged
    0 Thread(s)
    Reputação
    198

    Re: Biblioteca DirectShow para media player em C++

    Citação Postado originalmente por MacTwist Ver Post
    Fala galera eu tenho estudado um pouco de DirectX e resolvi testar essa API de áudio e vídeo da Microsoft, preciso dizer que fiquei bastante satisfeito com a facilidade de uso e formatos de arquivos suportados.

    Instalei o Visual Studio 2017 Community Edition( Versão Gratuita do VS ) e apesar dele ainda ser um tanto pesado para o meu já calejado PC, gostei muito do novo instalador, é possível personalizar tudo e instalar somente o que você realmente precisa, pode-se instalar por exemplo o Pacote de desenvolvimento C++ sem precisar instalar o C Sharp entre outras coisas que eram obrigatórias na versão 2015.

    Para usar no CodeBlocks creio eu que basta instalar a Windows SDK mais nova mas como eu estava querendo testar já um tempo este VS 2017 aproveitei a oportunidade.

    Procurando alguns tutoriais achei o tutorial desse rapaz no YouTube

    https://www.youtube.com/watch?v=RsBIu9QQCIg

    Infelizmente o Projeto na descrição não estava mais disponível e eu precisei preencher algumas lacunas usando como base a literatura disponível no site da Ms:

    http://msdn.microsoft.com/en-us/library/windows/desktop/dd375454(v=vs.85).aspx

    Especificamente aqui:

    https://msdn.microsoft.com/en-us/library/windows/desktop/dd389098(v=vs.85).aspx

    Foi usado C++ com o form design do VS 2017 seguindo os passos do tutorial citado, eu ando meio traumatizado com o WinAPI, ela é ótima para códigos rápidos pelo ganho de velocidade mas para montar telas com controles é um martírio.

    Bom vamos o que interessa, fiz um vídeo usando o tutorial como base e testando alguns formatos de arquivos, o interessante dessa biblioteca é que ela funciona de acordo com os codecs instalados no PC. Aqui eu uso o K- lite Codec Pack e consegui rodar uma vasta variedade de arquivos de media.

    Real media, Real media com bitrate variável, QuickTime, FLV, mpg, wmv, AVI, MP4 com x264, mp3, Xvid ou seja todos os tipos de arquivos que eu tinha disponível para teste.

    Aqui esta o vídeo com os testes, desculpem pela qualidade ainda sou muito cru nesse lance de fazer vídeo.



    Quem quiser fazer o Tutorial que citei do YouTube aqui esta o código.

    Código:
    // Video.cpp
    
    using namespace System;
    using namespace System::Windows::Forms;
    
    [STAThread]
    
    int main(array<String^>^args)
    {
        Application::EnableVisualStyles();
        Application::SetCompatibleTextRenderingDefault(false);
    
        //Create the Main window and run it
        VideoPlayer::video form;
        Application::Run(%form);
    
        return 0;
    
    }
    Código:
    // video.h - Codigo para bibliotecas e includes (inicio do arquivo)
    
    #pragma once
    
    #pragma comment(lib, "strmiids.lib")
    #pragma comment(lib, "ole32.lib")
    #include <dshow.h>
    #include <vcclr.h>
    Código:
    video.h - Codigo para o evento do botao1
    
    IGraphBuilder *pGraph;
            IMediaControl *pControl;
            IMediaEvent   *pEvent;
            IVideoWindow  * pWindow;
            HRESULT hr;
    
            hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph);
            if (FAILED(hr))
            {
                printf("ERROR - Could not create the Filter Graph Manager.");
                return;
            }
    
            hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
            hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
            hr = pGraph->QueryInterface(IID_IVideoWindow, (void **)&pWindow);
    
            String^ filename = textBox1->Text;
            pin_ptr<const wchar_t> wname = PtrToStringChars(filename);
    
            hr = pGraph->RenderFile(wname, NULL);
    
            if (SUCCEEDED(hr))
            {
                System::Drawing::Rectangle rc = pictureBox1->ClientRectangle;
                hr = pWindow->put_Owner(OAHWND(pictureBox1->Handle.ToInt64()));
                hr = pWindow->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN );
                hr = pWindow->SetWindowPosition(0, 0, rc.Right, rc.Bottom );
    
                hr = pControl->Run();
            }
            else
            {
                MessageBox::Show("Arquivo de Media não selecionado");
            }
    
            pControl->Release();
            pEvent->Release();
            pGraph->Release();
            CoUninitialize();
    Resumindo bastante promissor é possível criar um reprodutor de media de forma simples e rápida e ate mesmo

    @MacTwist , essa Bilbioteca e Show mesmo, já tenho algo dela por aqui também.

    Estou meio sumido , muitas coisa pra fazer , alguns projetos novos etc.

    Sensacional , Valeu por compartilhar com a comunidade.

  3. #3
    Jogador de Wii Sports (2006) MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar
    Data de Ingresso
    07/2016
    Posts
    58
    Mentioned
    15 Post(s)
    Tagged
    0 Thread(s)
    Reputação
    67

    Re: Biblioteca DirectShow para media player em C++

    Hehe apenas uma experiência por curiosidade para conhecer o que pode ser usado para desenvolvimento de um media player, a minha base ainda esta no c++ mais linear e antes de entrar a fundo em orientação a objeto, APIs, bibliotecas gráficas e outros aspectos mais avançados do c++ eu quero dominar bem a estrutura básica da linguagem, mas nada impede de testar uma ou outra pelo trajeto. Destas que já testei achei o DirectX bem interessante pra quem esta começando pela ampla e vasta documentação disponível, a MSDN é um verdadeiro paraíso com muitos textos explicando detalhadamente os procedimentos e exemplos de códigos.

  4. #4
    > Usuário VIP pedrowarlock Ótima reputação além de muito prestígio pedrowarlock Ótima reputação além de muito prestígio pedrowarlock Ótima reputação além de muito prestígio pedrowarlock Ótima reputação além de muito prestígio pedrowarlock Ótima reputação além de muito prestígio pedrowarlock Ótima reputação além de muito prestígio pedrowarlock Ótima reputação além de muito prestígio pedrowarlock Ótima reputação além de muito prestígio pedrowarlock Ótima reputação além de muito prestígio pedrowarlock Ótima reputação além de muito prestígio pedrowarlock Ótima reputação além de muito prestígio Avatar de pedrowarlock
    Data de Ingresso
    11/2011
    Localização
    Rio de janeiro
    Posts
    950
    Mentioned
    216 Post(s)
    Tagged
    0 Thread(s)
    Reputação
    233

    Re: Biblioteca DirectShow para media player em C++

    @MacTwist . No autoit eu achei uma DLL que uso chamando funções nela, mas como o c++ é mais rapido, e vc esta estudando sobre isso agora. Me diz uma coisa. Sera possível abrir um video mp4 sem a necessidade do buffer completo do video...tipo só queria abrir o primeiro frame do video sem que o programa inicie a leitura completa do video. Eu vi um cara que fez isso em c++, mas não consegui descobrir como.

  5. #5
    Jogador de Wii Sports (2006) MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar MacTwist Tem muito do que se orgulhar
    Data de Ingresso
    07/2016
    Posts
    58
    Mentioned
    15 Post(s)
    Tagged
    0 Thread(s)
    Reputação
    67

    Re: Biblioteca DirectShow para media player em C++

    Olha rapaz essa parte de áudio/vídeo ainda não comecei a estudar, o que fiz foi apenas um teste simples.

    Esse 2 exemplos pode te ajudar: http://dev.mingliang.org/article/VideoAnaFramework.php e https://www.codeproject.com/Articles...ing-DirectShow

    Leia o artigo IMediaDet interface mais especificamente as funções: get_OutputStreams() e GetBitmapBits() https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx


    Compensa também dar uma olhada nessa biblioteca OpenCV, parece bem interessante para manipulação de video e tem muito tutoriais e exemplos na internet. Aqui um exemplo do uso dos frames

    https://gist.github.com/itsrifat/66b253db2736b23f247c

    Por curiosidade o que especificamente você quer fazer com esse tipo de algoritmo?

  6. #6
    Mestre dos Arcades Caseiros Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Avatar de Fábio iGames
    Data de Ingresso
    03/2013
    Localização
    São Paulo / Sp - Zona Sul
    Posts
    624
    Mentioned
    162 Post(s)
    Tagged
    0 Thread(s)
    Reputação
    198

    Re: Biblioteca DirectShow para media player em C++

    Citação Postado originalmente por MacTwist Ver Post
    Olha rapaz essa parte de áudio/vídeo ainda não comecei a estudar, o que fiz foi apenas um teste simples.

    Esse 2 exemplos pode te ajudar: http://dev.mingliang.org/article/VideoAnaFramework.php e https://www.codeproject.com/Articles...ing-DirectShow

    Leia o artigo IMediaDet interface mais especificamente as funções: get_OutputStreams() e GetBitmapBits() https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx


    Compensa também dar uma olhada nessa biblioteca OpenCV, parece bem interessante para manipulação de video e tem muito tutoriais e exemplos na internet. Aqui um exemplo do uso dos frames

    https://gist.github.com/itsrifat/66b253db2736b23f247c

    Por curiosidade o que especificamente você quer fazer com esse tipo de algoritmo?
    Boa essas dicas e exemplos ai.

    Cara a variedade de Bibliotecas que o C++ usa de Terceiros é fantástico.

  7. #7
    > Usuário VIP pedrowarlock Ótima reputação além de muito prestígio pedrowarlock Ótima reputação além de muito prestígio pedrowarlock Ótima reputação além de muito prestígio pedrowarlock Ótima reputação além de muito prestígio pedrowarlock Ótima reputação além de muito prestígio pedrowarlock Ótima reputação além de muito prestígio pedrowarlock Ótima reputação além de muito prestígio pedrowarlock Ótima reputação além de muito prestígio pedrowarlock Ótima reputação além de muito prestígio pedrowarlock Ótima reputação além de muito prestígio pedrowarlock Ótima reputação além de muito prestígio Avatar de pedrowarlock
    Data de Ingresso
    11/2011
    Localização
    Rio de janeiro
    Posts
    950
    Mentioned
    216 Post(s)
    Tagged
    0 Thread(s)
    Reputação
    233

    Re: Biblioteca DirectShow para media player em C++

    Show! Vou dar uma lida profunda nisso essa semana.

  8. #8
    > Usuário VIP xan4545 Ótima reputação além de muito prestígio xan4545 Ótima reputação além de muito prestígio xan4545 Ótima reputação além de muito prestígio xan4545 Ótima reputação além de muito prestígio xan4545 Ótima reputação além de muito prestígio xan4545 Ótima reputação além de muito prestígio xan4545 Ótima reputação além de muito prestígio xan4545 Ótima reputação além de muito prestígio xan4545 Ótima reputação além de muito prestígio xan4545 Ótima reputação além de muito prestígio xan4545 Ótima reputação além de muito prestígio Avatar de xan4545
    Data de Ingresso
    10/2011
    Posts
    168
    Mentioned
    76 Post(s)
    Tagged
    0 Thread(s)
    Reputação
    188

    Re: Biblioteca DirectShow para media player em C++

    Procurando alguns tutoriais achei o tutorial desse rapaz no YouTube

    https://www.youtube.com/watch?v=RsBIu9QQCIg

    [/CODE]Resumindo bastante promissor é possível criar um reprodutor de media de forma simples e rápida e ate mesmo[/QUOTE]

    Assisti e fiz todos os tutoriais do Diogo, é muito bacana o trabalho dele...

  9. #9
    Mestre dos Arcades Caseiros Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Fábio iGames Ótima reputação além de muito prestígio Avatar de Fábio iGames
    Data de Ingresso
    03/2013
    Localização
    São Paulo / Sp - Zona Sul
    Posts
    624
    Mentioned
    162 Post(s)
    Tagged
    0 Thread(s)
    Reputação
    198

    Re: Biblioteca DirectShow para media player em C++

    Citação Postado originalmente por xan4545 Ver Post
    Procurando alguns tutoriais achei o tutorial desse rapaz no YouTube

    https://www.youtube.com/watch?v=RsBIu9QQCIg

    [/CODE]Resumindo bastante promissor é possível criar um reprodutor de media de forma simples e rápida e ate mesmo
    Assisti e fiz todos os tutoriais do Diogo, é muito bacana o trabalho dele...[/QUOTE]

    Esse ai já vi também , realmente são muito bons os vídeos dele.

+ Responder ao Tópico

Tópicos Similares

  1. Downloads Hyperspin Media
    Por thiago.r2 no fórum Links para downloads
    Respostas: 11
    Último Post: 07/01/2017, 03:38
  2. É possivel transformar o hyperspin em um media center?
    Por omesmo no fórum Configurações de frontend's
    Respostas: 0
    Último Post: 07/02/2016, 19:31
  3. Linguagem C e Biblioteca gráfica
    Por xan4545 no fórum Video Aulas (Qualquer linguagem)
    Respostas: 4
    Último Post: 19/07/2014, 17:44
  4. Como atualizar o Media player ao inserir dvd
    Por nsmoreira no fórum Maximus arcade
    Respostas: 0
    Último Post: 18/09/2013, 14:01
  5. som C-Media
    Por jozyney03 no fórum Montagem e Eletrônica
    Respostas: 2
    Último Post: 01/02/2010, 14:10

Marcadores

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • Você não pode enviar respostas
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  • BB Code está Ligado
  • Smilies estão Ligados
  • Código [IMG] está Ligado
  • Código HTML está Desligado