<?xml version="1.0" encoding="utf-8"?>
<HmsTranscodingConfig version="1.98.1">
	<TranscoderList>
		<Transcoder>
			<Name>ACEPLAYER</Name>
			<Path>%Registry\SOFTWARE\AceStream\InstallDir%\player\ace_player.exe</Path>
			<HomePage>http://www.acestream.org</HomePage>
			<Download>http://www.acestream.org</Download>
		</Transcoder>
	</TranscoderList>
	<TranscodingProfileList>
		<Profile>
			<TranscoderName>HMSMPEG</TranscoderName>
			<TranscodingCondition></TranscodingCondition>
			<TranscodingConditionSyntaxType>PascalScript</TranscodingConditionSyntaxType>
			<TranscodingComment></TranscodingComment>
			<TranscodingFolder>Транскодирование для TorrentStream, AceStream медиа-ресурсов</TranscodingFolder>
			<TranscodingMediaType>3</TranscodingMediaType>
			<TranscodingMimeType></TranscodingMimeType>
			<TranscodingMimeTypeScript>cfgTranscodingVideoMimeType</TranscodingMimeTypeScript>
			<TranscodingMimeTypeSyntaxType>PascalScript</TranscodingMimeTypeSyntaxType>
			<TranscodingMode>1</TranscodingMode>
			<TranscodingParams>const
  csVlcParams = '-Idummy --language en vlc://pause:2 --demuxdump-file="%s" --access=p2p_access "%s" :demux=dump';  
var
  sFileType, sInputFileName, sMediaResourceLink, sReadPipeName, sWritePipeName, sTranscodingParams: string;    
begin
  TranscodingResult := False;
  sInputFileName := InputFileName;
  if sInputFileName = '-' then begin
    sMediaResourceLink := HmsGetItemProperty(mpiMediaResourceLink);
    if Pos('--demuxdump-file', sMediaResourceLink) &gt; 0 then begin
      if not HmsRegExMatch('--access=p2p_access "(.*?)"', sMediaResourceLink, sInputFileName) then 
        HmsRegExMatch('"(.*?\.torrent)"', sMediaResourceLink, sInputFileName)
     end    
  end;      
  if HmsCreateDualPipe(sReadPipeName, sWritePipeName) then begin
    if HmsTranscodingExecute('ACEPLAYER', Format(csVlcParams, [sWritePipeName, sInputFileName]), False) then begin    
      if mpFileType &lt;&gt; '' then      
        sFileType := '-f "' + mpFileType + '" '
      else                          
        sFileType := '';
      mpInternetItem := False;
      sTranscodingParams := HmsTranscodingProfileParams('Фильмы (основной)');
      sTranscodingParams := ReplaceStr(sTranscodingParams, '&lt;HMSMPEG&gt; ', sFileType);          
      sTranscodingParams := ReplaceStr(sTranscodingParams, '&lt;INPUT FILE&gt;', sReadPipeName);      
      sTranscodingParams := sTranscodingParams + ' "' + OutputFileName + '"';
      TranscodingResult := HmsTranscodingExecute('HMSMPEG', sTranscodingParams, True)          
    end 
  end 
end.</TranscodingParams>
			<TranscodingParamsSyntaxType>PascalScript</TranscodingParamsSyntaxType>
			<TranscodingProfile>AceStream (ACEPLAYER - FFMPEG)</TranscodingProfile>
			<TranscodingProfileActive>-1</TranscodingProfileActive>
			<TranscodingProfilePriority>36</TranscodingProfilePriority>
			<TranscodingProfileUuid>09d8f390-166e-4b6d-88cf-64820cf53475</TranscodingProfileUuid>
		</Profile>
		<Profile>
			<TranscoderName>ACEPLAYER</TranscoderName>
			<TranscodingCondition></TranscodingCondition>
			<TranscodingConditionSyntaxType>PascalScript</TranscodingConditionSyntaxType>
			<TranscodingComment></TranscodingComment>
			<TranscodingFolder>Транскодирование для TorrentStream, AceStream медиа-ресурсов</TranscodingFolder>
			<TranscodingMediaType>3</TranscodingMediaType>
			<TranscodingMimeType></TranscodingMimeType>
			<TranscodingMimeTypeScript></TranscodingMimeTypeScript>
			<TranscodingMimeTypeSyntaxType></TranscodingMimeTypeSyntaxType>
			<TranscodingMode>0</TranscodingMode>
			<TranscodingParams>function GetAudioCodec: string;
begin
  if Pos('wmv', cfgTranscodingTvsetMimeType) &gt; 0 then
    Result := 'wma2'    
  else if (Pos('IPOD', UpperCase(cfgDeviceType)) &gt; 0) or
          (Pos('LG', UpperCase(cfgDeviceType)) = 1) or
          SameText(cfgTranscodingAudioCodec, 'AAC') or 
          (Pos('flv', cfgTranscodingTvsetMimeType) &gt; 0) then  
    Result := 'aac'
  else if Pos('SONY', UpperCase(cfgDeviceType)) &gt; 0 then  
    Result := 'mpga'
  else                
    Result := 'mpga'    
end;

function GetFileFormat: string;
begin
  if Pos('wmv', cfgTranscodingTvsetMimeType) &gt; 0 then
    Result := 'asf'    
  else if Pos('flv', cfgTranscodingTvsetMimeType) &gt; 0 then
    Result := 'ffmpeg{mux=flv}'
  else if (Pos('MPEGTS', cfgTranscodingFileFormat) &gt; 0) or
          (Pos('SONY', UpperCase(cfgDeviceType)) &gt; 0) or
          (Pos('IPOD', UpperCase(cfgDeviceType)) &gt; 0) then           
    Result := 'ts'    
  else     
    Result := 'mpeg1'
end;

function GetSampleRate: Integer;
begin
  if SameText(cfgTranscodingFileFormat, 'FLV') then  
    Result := 44100
  else
    Result := 48000   
end;

const
  csVideoLanParams =                                 
    '--no-crashdump --play-and-exit -Idummy --language=en%s %s--sout=#%stranscode' +
    '{acodec=%s,ab=%d,channels=2,' +
    'samplerate=%d}:duplicate{dst=std{access=file,mux=%s,dst="&lt;OUTPUT FILE&gt;"}}' +
    '%s --access=p2p_access "%s"'; //  vlc:quit
    
var 
  i, iAudioStreamID: Integer;
  sAudioTrackID, sGather, sInputFileName, sMediaResourceLink, 
  sInternetTelevisionSplash, sKeepOut: string;
begin
  sInputFileName := '&lt;INPUT FILE&gt;';
  if InputFileName = '-' then begin
    sMediaResourceLink := HmsGetItemProperty(mpiMediaResourceLink);
    if Pos('--demuxdump-file', sMediaResourceLink) &gt; 0 then begin
      if not HmsRegExMatch('--access=p2p_access "(.*?)"', sMediaResourceLink, sInputFileName) then 
        HmsRegExMatch('"(.*?\.torrent)"', sMediaResourceLink, sInputFileName)
     end    
  end;
  if cfgInternetTelevisionSplash &lt;&gt; '' then begin  
    sInternetTelevisionSplash := Format(' "%s"', [cfgInternetTelevisionSplash]);    
    sGather  := 'gather:';                                              
    sKeepOut := '--sout-keep ';
  end else begin                             
    sInternetTelevisionSplash := '';
    sGather  := '';
    sKeepOut := ''    
  end;
  if mpAudioStreamNo &gt;= 0 then begin  
    iAudioStreamID := HmsGetStreamID(stAudio, mpAudioStreamNo);    
    if iAudioStreamID &lt; 100 then                          
      sAudioTrackID := ' --audio-track=' + IntToStr(mpAudioStreamNo)      
    else
      sAudioTrackID := ' --audio-track-id=' + IntToStr(iAudioStreamID)
  end else                 
    sAudioTrackID := '';
  TranscodingParams := Format(csVideoLanParams, 
                               [sAudioTrackID, sKeepOut, sGather, GetAudioCodec,
                                Min(cfgTranscodingAudioBitrate div 1000, 192),                                              
                                GetSampleRate, GetFileFormat, sInternetTelevisionSplash, 
                                sInputFileName]);                                
end.</TranscodingParams>
			<TranscodingParamsSyntaxType>PascalScript</TranscodingParamsSyntaxType>
			<TranscodingProfile>AceStream (Видео без изменения)</TranscodingProfile>
			<TranscodingProfileActive>-1</TranscodingProfileActive>
			<TranscodingProfilePriority>29</TranscodingProfilePriority>
			<TranscodingProfileUuid>e750c8a7-46f7-4794-adaa-a4c58a717567</TranscodingProfileUuid>
		</Profile>
		<Profile>
			<TranscoderName>ACEPLAYER</TranscoderName>
			<TranscodingCondition></TranscodingCondition>
			<TranscodingConditionSyntaxType>PascalScript</TranscodingConditionSyntaxType>
			<TranscodingComment></TranscodingComment>
			<TranscodingFolder>Транскодирование для TorrentStream, AceStream медиа-ресурсов</TranscodingFolder>
			<TranscodingMediaType>3</TranscodingMediaType>
			<TranscodingMimeType></TranscodingMimeType>
			<TranscodingMimeTypeScript>var
  i: Integer;
  sFileExt: string;
begin
  if mpFileType &lt;&gt; '' then begin
    if SameText(mpFileType, 'mpegts') then  
      sFileExt := 'ts'    
    else if SameText(mpFileType, 'mpeg') then
      sFileExt := 'mpg'      
    else if MatchText(mpFileType, ['matroska', 'matroska,webm']) then
      sFileExt := 'mkv'
    else if SameText(mpFileType, 'asf') then  
      sFileExt := 'wmv'    
    else begin  
      i := Pos(',', mpFileType);    
      if i &gt; 0 then    
        sFileExt := Copy(mpFileType, 1, i - 1)      
      else              
        sFileExt := mpFileType      
    end;    
    MimeType := HmsGetMimeType(sFileExt)
  end                                   
end.</TranscodingMimeTypeScript>
			<TranscodingMimeTypeSyntaxType>PascalScript</TranscodingMimeTypeSyntaxType>
			<TranscodingMode>0</TranscodingMode>
			<TranscodingParams>const
  csVideoLanParams = '--no-crashdump --play-and-exit -Idummy --language en --demuxdump-file="&lt;OUTPUT FILE&gt;" --access=p2p_access "%s" :demux=dump';
var
  sInputFileName, sMediaResourceLink: string;  
begin
  sInputFileName := '&lt;INPUT FILE&gt;';
  if InputFileName = '-' then begin
    sMediaResourceLink := HmsGetItemProperty(mpiMediaResourceLink);
    if Pos('--demuxdump-file', sMediaResourceLink) &gt; 0 then begin
      if not HmsRegExMatch('--access=p2p_access "(.*?)"', sMediaResourceLink, sInputFileName) then 
        HmsRegExMatch('"(.*?\.torrent)"', sMediaResourceLink, sInputFileName)
    end    
  end;
  TranscodingParams := Format(csVideoLanParams, [sInputFileName])  
end.</TranscodingParams>
			<TranscodingParamsSyntaxType>PascalScript</TranscodingParamsSyntaxType>
			<TranscodingProfile>AceStream (Входной поток)</TranscodingProfile>
			<TranscodingProfileActive>-1</TranscodingProfileActive>
			<TranscodingProfilePriority>31</TranscodingProfilePriority>
			<TranscodingProfileUuid>9b658aac-e270-40ba-9114-0ca9d833c2a1</TranscodingProfileUuid>
		</Profile>
		<Profile>
			<TranscoderName>ACEPLAYER</TranscoderName>
			<TranscodingCondition></TranscodingCondition>
			<TranscodingConditionSyntaxType>PascalScript</TranscodingConditionSyntaxType>
			<TranscodingComment></TranscodingComment>
			<TranscodingFolder>Транскодирование для TorrentStream, AceStream медиа-ресурсов</TranscodingFolder>
			<TranscodingMediaType>3</TranscodingMediaType>
			<TranscodingMimeType></TranscodingMimeType>
			<TranscodingMimeTypeScript></TranscodingMimeTypeScript>
			<TranscodingMimeTypeSyntaxType></TranscodingMimeTypeSyntaxType>
			<TranscodingMode>0</TranscodingMode>
			<TranscodingParams>function GetAudioCodec: string;
begin
  if Pos('wmv', cfgTranscodingTvsetMimeType) &gt; 0 then
    Result := 'wma2'    
  else if (Pos('IPOD', UpperCase(cfgDeviceType)) &gt; 0) or
          (Pos('LG', UpperCase(cfgDeviceType)) = 1) or
          SameText(cfgTranscodingAudioCodec, 'AAC') or 
          (Pos('flv', cfgTranscodingTvsetMimeType) &gt; 0) then  
    Result := 'aac'
  else if Pos('SONY', UpperCase(cfgDeviceType)) &gt; 0 then  
    Result := 'mpga'
  else                
    Result := 'mpga'    
end;

function GetFileFormat: string;
begin
  if Pos('wmv', cfgTranscodingTvsetMimeType) &gt; 0 then
    Result := 'asf'    
  else if Pos('flv', cfgTranscodingTvsetMimeType) &gt; 0 then
    Result := 'ffmpeg{mux=flv}'
  else if (Pos('MPEGTS', cfgTranscodingFileFormat) &gt; 0) or
          (Pos('SONY', UpperCase(cfgDeviceType)) &gt; 0) or
          (Pos('IPOD', UpperCase(cfgDeviceType)) &gt; 0) then           
    Result := 'ts'    
  else     
    Result := 'mpeg1'
end;

function GetVideoCodec: string;
begin
  if Pos('wmv', cfgTranscodingTvsetMimeType) &gt; 0 then                    
    if SameText(cfgTranscodingVideoCodec, 'X264') and (Pos('ASF', cfgTranscodingFileFormat) &gt; 0) then
      Result := 'h264'      
    else
      Result := 'wmv2'
  else if (Pos('IPOD', UpperCase(cfgDeviceType)) &gt; 0) or SameText(cfgTranscodingVideoCodec, 'X264') or 
          (Pos('flv', cfgTranscodingTvsetMimeType) &gt; 0) then  
    Result := 'h264'    
  else
    Result := 'mp2v'  
end;

function GetSampleRate: Integer;
begin
  if SameText(cfgTranscodingFileFormat, 'FLV') then  
    Result := 44100
  else
    Result := 48000   
end;

const
  csVideoLanParams =                                 
    '--no-crashdump --play-and-exit -Idummy --language=en%s%s --sout-ffmpeg-rc-buffer-size=%d %s--sout=#%stranscode' +
    '{vcodec=%s,vb=%d,fps=%s,scale=1%s,acodec=%s,ab=%d,channels=2,' +
    'samplerate=%d%s%s}:duplicate{dst=std{access=file,mux=%s,dst="&lt;OUTPUT FILE&gt;"}}' +
    '%s --access=p2p_access "%s"'; //  vlc:quit
    
var 
  i, iWidth, iHeight, iAspectWidth, iAspectHeight, iAudioStreamID: Integer;
  sAudioTrackID, sCanvasParams, sFrameRate, sDeinterlace, sGather, 
  sInternetTelevisionSplash, sInputFileName, sKeepOut, sMediaResourceLink,
  sSubtitleParams, sSubtitleStreamID, sSubtitleLanguage, sSubtitleOverlay: string;  
begin
  sInputFileName := '&lt;INPUT FILE&gt;';
  if InputFileName = '-' then begin
    sMediaResourceLink := HmsGetItemProperty(mpiMediaResourceLink);
    if Pos('--demuxdump-file', sMediaResourceLink) &gt; 0 then begin
      if not HmsRegExMatch('--access=p2p_access "(.*?)"', sMediaResourceLink, sInputFileName) then 
        HmsRegExMatch('"(.*?\.torrent)"', sMediaResourceLink, sInputFileName)
     end    
  end;
  if HmsGetVideoSettings(vstDeinterlace) = 'on' then 
    sDeinterlace := ',deinterlace'
  else
    sDeinterlace := '';                        
  if cfgInternetTelevisionSplash &lt;&gt; '' then begin  
    sInternetTelevisionSplash := Format(' "%s"', [cfgInternetTelevisionSplash]);    
    sGather  := 'gather:';                                              
    sKeepOut := '--sout-keep ';
  end else begin                             
    sInternetTelevisionSplash := '';
    sGather  := '';
    sKeepOut := ''    
  end;
  if mpInternetItem then
    sFrameRate := '24'
  else if cfgTranscodingFrameRate &lt;&gt; '' then                                      
    sFrameRate := cfgTranscodingFrameRate
  else if mpFrameRate &gt; 0 then
    sFrameRate := FormatFloat('0.000', mpFrameRate)
  else
    sFrameRate := '25';
  if SameFloat(sFrameRate, '23.976') then
    sFrameRate := '24'
  else if SameFloat(sFrameRate, '29.970') then
    sFrameRate := '30'
  else if SameFloat(sFrameRate, '59.940') then
    sFrameRate := '60';    
  iWidth := mpWidth;     
  if iWidth &gt; 0 then begin                         
    i := Pos(':', cfgTranscodingScreenFormat);
    if i &gt; 0 then begin
      iAspectWidth  := StrToIntDef(Copy(cfgTranscodingScreenFormat, 1, i - 1), 16);
      iAspectHeight := StrToIntDef(Copy(cfgTranscodingScreenFormat, i + 1, 10), 9);      
    end else begin         
      iAspectWidth  := 16;
      iAspectHeight := 9      
    end;
    if iWidth &gt; cfgTranscodingScreenWidth then
      iWidth := cfgTranscodingScreenWidth;
    if iWidth &gt; 1280 then    
      iWidth := 1280;
    iHeight := Round((iWidth / iAspectWidth) * iAspectHeight);
    if iHeight mod 2 &lt;&gt; 0 then
      Inc(iHeight); 
    sCanvasParams := Format(',vfilter={canvas{width=%d,height=%d,aspect=%s}}', [iWidth, iHeight, cfgTranscodingScreenFormat]);
  end else
    sCanvasParams := '';          
  if mpAudioStreamNo &gt;= 0 then begin  
    iAudioStreamID := HmsGetStreamID(stAudio, mpAudioStreamNo);    
    if iAudioStreamID &lt; 100 then                          
      sAudioTrackID := ' --audio-track=' + IntToStr(mpAudioStreamNo)      
    else
      sAudioTrackID := ' --audio-track-id=' + IntToStr(iAudioStreamID)
  end else                 
    sAudioTrackID := '';
  sSubtitleParams  := '';              
  sSubtitleOverlay := '';                           
  if mpSubtitleLanguage &lt;&gt; '' then begin  
    if HmsRegExMatch('(.*?) ', mpSubtitleLanguage, sSubtitleLanguage) and (Trim(sSubtitleLanguage) &lt;&gt; '') then
      sSubtitleParams := ' --sub-language=' + sSubtitleLanguage
    else if HmsRegExMatch('\[0x(.*?)\]', mpSubtitleLanguage, sSubtitleStreamID) then    
      sSubtitleParams := ' --sub-track-id=' + IntToStr(StrToIntDef('$' + sSubtitleStreamID, 0));      
    if sSubtitleParams &lt;&gt; '' then
      sSubtitleOverlay := ',soverlay'  
  end;          
  TranscodingParams := Format(csVideoLanParams, 
                               [sAudioTrackID, sSubtitleParams,
                                HmsTranscodingBufferSize(Min(cfgTranscodingVideoBitrate, 12000000)),
                                sKeepOut, sGather, GetVideoCodec,
                                Min(cfgTranscodingVideoBitrate div 1000, 12000), sFrameRate,
                                sCanvasParams, 
                                GetAudioCodec,
                                Min(cfgTranscodingAudioBitrate div 1000, 192),                                              
                                GetSampleRate,
                                sDeinterlace, sSubtitleOverlay, GetFileFormat,
                                sInternetTelevisionSplash, sInputFileName]);                                
end.</TranscodingParams>
			<TranscodingParamsSyntaxType>PascalScript</TranscodingParamsSyntaxType>
			<TranscodingProfile>AceStream (Перекодирование)</TranscodingProfile>
			<TranscodingProfileActive>-1</TranscodingProfileActive>
			<TranscodingProfilePriority>26</TranscodingProfilePriority>
			<TranscodingProfileUuid>c7cead5f-1074-4d61-9b17-b89176b01197</TranscodingProfileUuid>
		</Profile>
		<Profile>
			<TranscoderName>ACEPLAYER</TranscoderName>
			<TranscodingCondition></TranscodingCondition>
			<TranscodingConditionSyntaxType>PascalScript</TranscodingConditionSyntaxType>
			<TranscodingComment></TranscodingComment>
			<TranscodingFolder>Транскодирование для TorrentStream, AceStream медиа-ресурсов</TranscodingFolder>
			<TranscodingMediaType>3</TranscodingMediaType>
			<TranscodingMimeType></TranscodingMimeType>
			<TranscodingMimeTypeScript></TranscodingMimeTypeScript>
			<TranscodingMimeTypeSyntaxType></TranscodingMimeTypeSyntaxType>
			<TranscodingMode>0</TranscodingMode>
			<TranscodingParams>const
  csVideoLanParams = '--no-crashdump --play-and-exit -Idummy --language en%s --sout /%s:"&lt;OUTPUT FILE&gt;" --access=p2p_access "%s"';

function GetFileFormat(const aFileFormat: string): string;
begin
  if Pos('ASF', aFileFormat) &gt; 0 then
    Result := 'asf'
  else if Pos('MPEGTS', aFileFormat) &gt; 0 then
    Result := 'ts'
  else  
    Result := 'ps'
end;

var
  iAudioStreamID: Integer;  
  sAudioTrackID, sInputFileName, sMediaResourceLink: string;
begin
  sInputFileName := '&lt;INPUT FILE&gt;';
  if InputFileName = '-' then begin
    sMediaResourceLink := HmsGetItemProperty(mpiMediaResourceLink);
    if Pos('--demuxdump-file', sMediaResourceLink) &gt; 0 then begin
      if not HmsRegExMatch('--access=p2p_access "(.*?)"', sMediaResourceLink, sInputFileName) then 
        HmsRegExMatch('"(.*?\.torrent)"', sMediaResourceLink, sInputFileName)
     end    
  end;
  if mpAudioStreamNo &gt;= 0 then begin  
    iAudioStreamID := HmsGetStreamID(stAudio, mpAudioStreamNo);    
    if iAudioStreamID &lt; 100 then                          
      sAudioTrackID := ' --audio-track=' + IntToStr(mpAudioStreamNo)      
    else
      sAudioTrackID := ' --audio-track-id=' + IntToStr(iAudioStreamID)
  end else                 
    sAudioTrackID := '';
  TranscodingParams := Format(csVideoLanParams, [sAudioTrackID, GetFileFormat(cfgTranscodingFileFormat), sInputFileName])
end.</TranscodingParams>
			<TranscodingParamsSyntaxType>PascalScript</TranscodingParamsSyntaxType>
			<TranscodingProfile>AceStream (Ремуксирование)</TranscodingProfile>
			<TranscodingProfileActive>-1</TranscodingProfileActive>
			<TranscodingProfilePriority>35</TranscodingProfilePriority>
			<TranscodingProfileUuid>1a85b66a-af4d-41f3-91ae-4cb5e64a86d2</TranscodingProfileUuid>
		</Profile>
	</TranscodingProfileList>
</HmsTranscodingConfig>
