How can I use Migrate Extras to get custom media fields to migrate?
The following will allow you to use Migrate to import files as File Entities (used for Media 2.x) and populate the File Entity fields when importing Nodes (MigrateDestinationNode). No Migrate Extras needed.

Add the following to your custom migrate module's .info file:

files[] = includes/MigrateEntityFileUri.inc


Download/save the following code in an "includes" subfolder of your migrate module. (Strip the .php extension)
https://gist.github.com/dmsmidt/6f0f498a9dbaea8602fb

Then in your Migration class you can use 'MigrateEntityFileUri' as file_class.

Example code:

$this-&gt;addFieldMapping('field_media', 'your_file_uri_source_array');
$this-&gt;addFieldMapping('field_media:file_class')
  -&gt;defaultValue('MigrateEntityFileUri');
$this-&gt;addFieldMapping('field_media:fields', 'fields_array')
  -&gt;description(t('Populate the fields.'));
$this-&gt;addFieldMapping('field_media:destination_dir')
  -&gt;defaultValue('public://your_file_sub_dir');
$this-&gt;addFieldMapping('field_media:file_replace')
  -&gt;defaultValue(MigrateFileBase::FILE_EXISTS_REUSE);
$this-&gt;addFieldMapping('field_media:preserve_files')
  -&gt;defaultValue(TRUE);


Note the sources: 'your_file_uri_source_array' and 'fields_array'.
You may need to do some processing in prepareRow() depending on your source to get your data organized like this (pseudocode):

public function prepareRow($row) {
    $row-&gt;fields_array = array(
      array(
        'field_one' =&gt; 'value_field_file_one',
        'field_two' =&gt; 'value_field_file_one'
      ),
      array(
        'field_one' =&gt; 'value_field_file_two',
        'field_two' =&gt; 'value_field_file_two'
      ), 
    );
    $row-&gt;your_file_uri_source_array = array('file_one_uri', 'file_two_uri');
  }