Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 779
  • Last Modified:

Video encoding problems

Hi Experts,

This is a follow up to my earlier question here:  http://tinyurl.com/6yjccph

I'm having a few problems trying to create an AVI file using the CAviFile class published here:  http://www.codeproject.com/KB/graphics/createmovie.aspx

To start I initialize my AVI file as follows:

      m_pAviFile = new CAviFile( _T( "Test.avi" ),
            mmioFOURCC( _T( 'M' ), _T( 'S' ), _T( 'S' ), _T( '2' ) ), 1 );

Then whenever my CView-derived class is redrawn I call the following code:

void
MyView::UpdateAviFile
(
      CDC* pDC
)
{

      // Make sure we have a valid file.

      if ( m_pAviFile == NULL )
      {
            return;
      }

      // Create the bitmap.

      if ( m_pAviBitmap != NULL )
      {
            delete m_pAviBitmap;
      }

      m_pAviBitmap = new CBitmap();

      // Copy the view to the bitmap.

      CRect rect;
      GetClientRect( &rect );

      CDC dc;
      dc.CreateCompatibleDC( pDC );

      m_pAviBitmap->CreateCompatibleBitmap( &dc, rect.Width(), rect.Height() );
      CBitmap* pOld = ( CBitmap* )dc.SelectObject( m_pAviBitmap );
      dc.BitBlt( 0, 0, rect.Width(), rect.Height(), pDC, 0, 0, SRCCOPY );

      // Try to append the bitmap to the AVI file.

      HRESULT hResult = m_pAviFile->AppendNewFrame(
            ( HBITMAP )m_pAviBitmap->GetSafeHandle() );

      // Make sure everything is ok.

      if ( hResult != S_OK )
      {
            CString strError;
            
            strError.Format( _T( "Could not create the AVI file: \n%s" ),
                  m_pAviFile->GetLastErrorMessage() );

            AfxMessageBox( strError );
            CloseAviFile();
      }

}

The problems I'm having are below.  I'm running on a Vista x64 system.

1.  It seems like the Windows Media Video 9 Screen Codec (MSS2) would be the best one to use for what I am trying to do (see http://msdn.microsoft.com/en-us/library/dd464602(v=vs.85).aspx).  However, I've downloaded both the Windows Media Encoder and the new Microsoft Expression Encoder 4, and neither of these products has installed the MSS2 encoder on my system.  When I look at Windows Media Player / Help / About Windows Media Player / Technical Support Information I can see that only the decoder is installed.  Can anyone tell me where to get the MSS2 encoder?

2.  Alternatively, I thought I could try the MPG4 encoder, but I also couldn't find out where to download it.  Is this available as a free download somewhere?  If not, is there a reputable site that sells this and other encoders?

3.  Two encoders that I see are installed on my system are Microsoft RLE (MRLE) and Microsoft Video 1 (MSVC).  However, when I set up these values in the miniFOURCC parameter I get the error "Unable to Set Video Stream Format" when I first call AppendNewFrame.  I also tried creating the CAviFile with no encoder like this:  m_pAviFile = new CmnAviFile( _T( "Test.avi" ), 0, 1 );  However, this just causes my program to crash.  So I assume there is something wrong with code, does anyone have an idea of what the problem is?

Thanks for any help.

Regards,
Kevin
0
kjc1111
Asked:
kjc1111
  • 2
1 Solution
 
kjc1111Author Commented:
Hi again,

I think I've included too many questions in this post, so I've moved problems 1 and 2 into this new post:  http://tinyurl.com/6f55o6v.  If anyone can help me figure out the problems I'm having with my code and the MRLE and MSVC codecs (problem 3 only) I'll award the points.

Thanks,
Kevin
0
 
kjc1111Author Commented:
I just saw that this question is still open.  For anyone who is interested I eventually got this working.  I ended up creating WMV files instead of AVI files - the process to do this is also described at the CodeProject link.  The WMV encoder uses the MSS2 encoder which I believe was installed when I installed Windows Media Encoder on my computer (although it might be installed by default on Window or with Windows Media Player, I'm not sure).  

The overall process took some time but the comments at the CodeProject link were very helpful.  I think WMV is a better choice anyway; in particular the MSS2 encoder is optimized for capturing screen videos which is what I wanted, so the videos I create are a reasonable size.

Regards,
Kevin
0

Featured Post

Upgrade your Question Security!

Add Premium security features to your question to ensure its privacy or anonymity. Learn more about your ability to control Question Security today.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now