Is there a way to make it stop?
I'm with this config:
 
 
 
 
sorry, i forgot to set my file to public, now you can play itkrzychol wrote:I could not play the sound you've attached, but I think I've experienced the same thing.
I did try couple of different transcoding profiles, and found out, that those noises were gone, only when I switched to profile called "Movies - CorePlayer".
That was the solution for me, so I didn't dig any deeper. I'm not sure if this was a problem with transcoder or WMS...
example of a problem file: http://www.mediafire.com/?cj3bain3y204nciEugene wrote:I think one example of a problem file and transcoding parameters, there would be very helpful.
Code: Select all
const
  csInputParams = '-f rawvideo -vcodec rawvideo -pix_fmt yuv420p -s %dx%d -r %s -i "%s"%s -i "%s"';  
  clsidMpcAviSource   = '{CEA8DEFF-0AF7-4DB9-9A38-FB3C3AEFC0DE}'; // MPC - Avi Source
  clsidMpcAviSplitter = '{9736D831-9D6C-4E72-B6E7-560EF9181001}'; // MPC - Avi Splitter    
  clsidMpcFlvSource   = '{C9ECE7B3-1D8E-41F5-9F24-B255DF16C087}'; // MPC - FLV Source (Gabest)
  clsidMpcFlvSplitter = '{47E792CF-0BBE-4F7A-859C-194B0768650A}'; // MPC - FLV Splitter (Gabest)  
  clsidMpcMkvSource   = '{0A68C3B5-9164-4A54-AFAF-995B2FF0E0D4}'; // MPC - Matroska Source
  clsidMpcMkvSplitter = '{149D2E01-C32E-4939-80F6-C07B81015A7A}'; // MPC - Matroska Splitter  
  clsidMpcMp4Source   = '{3CCC052E-BDEE-408A-BEA7-90914EF2964B}'; // MPC - MP4 Source
  clsidMpcMp4Splitter = '{61F47056-E400-43D3-AF1E-AB7DFFD4C4AD}'; // MPC - MP4 Splitter  
  clsidMpcMpgSource   = '{1365BE7A-C86A-473C-9A41-C0A6E82C9FA3}'; // MPC - Mpeg Source (Gabest)
  clsidMpcMpgSplitter = '{DC257063-045F-4BE2-BD5B-E12279C464F0}'; // MPC - Mpeg Splitter (Gabest)  
  MEDIASUBTYPE_DOLBY_AC3 = '{E06D802C-DB46-11CF-B4D1-00805F6CBBEA}';
  
function GetFilterParams(const aFileFormat: string; const aFilterParams: Variant; 
                        aSplitter: Boolean; var aFilterFileName, aFilterCLSID: string): Boolean;                        
var
  FilterParams: Variant; 
  i: Integer;                                        
begin
  Result := True;  
  for i := 0 to Length(aFilterParams) - 1 do begin
    FilterParams := aFilterParams[i];
    if Pos(FilterParams[0], aFileFormat) > 0 then begin
      aFilterFileName := FilterParams[1];    
      if aSplitter then                
        aFilterCLSID := FilterParams[2]
      else                                       
        aFilterCLSID := FilterParams[3];        
      Exit
    end
  end;      
  Result := False
end;    
function CheckResult(aResult: Integer; aRaiseException: Boolean = True): Boolean;
begin
  Result := aResult = S_OK;
  if not Result and aRaiseException then
    RaiseException(Format('Error (code: %x) - %s', [aResult, SysErrorMessage(aResult)]))
end;
var
  bCreateAudioPipe, bHaali, bSplitter, bSuccess: Boolean;
  sAudioFormat, sCodecTag, sInputParams, 
  sAudioMediaMajorType, sAudioMediaSubType,
  sFilterFileName, sFilterCLSID: string;                                  
  sVideoMediaMajorType, sVideoMediaSubType, 
  sReadVideoPipeName, sWriteVideoPipeName, 
  sReadAudioPipeName, sWriteAudioPipeName,
  sTranscodingParams, sAudioPinName, sVideoPinName: string; 
  iAudioStreamNo, iAudioChannels1, iAudioChannels2, iAudioSampleRate, iAudioFormatTag, 
  iVideoWidth, iVideoHeight, iVideoCompression: Integer;
  vCurrentPosition: Variant;  
begin
  TranscodingResult := False;  
  bSplitter := mpIsoItem or mpDvdItem or mpBdItem; 
  if bSplitter and not CheckResult(WmsDirectShowAddResourceSource('ResourceSource')) then  
    Exit;             
  if GetFilterParams(mpFileType,
    [['avi',      'AviSplitter.ax',      clsidMpcAviSplitter, clsidMpcAviSource],
     ['flv',      'FlvSplitter.ax',      clsidMpcFlvSplitter, clsidMpcFlvSource],
     ['matroska', 'MatroskaSplitter.ax', clsidMpcMkvSplitter, clsidMpcMkvSource],
     ['mp4',      'MP4Splitter.ax',      clsidMpcMp4Splitter, clsidMpcMp4Source],
     ['mpeg',     'MpegSplitter.ax',     clsidMpcMpgSplitter, clsidMpcMpgSource]],     
     bSplitter, sFilterFileName, sFilterCLSID) then begin      
    bSuccess := CheckResult(WmsDirectShowLoadFilter('Filters\' + sFilterFileName, sFilterCLSID, 'Source'));
    if bSuccess then begin
      if bSplitter then                           
        bSuccess := CheckResult(WmsDirectShowConnectPin('ResourceSource', 'Source', 'Output', 'Input'), False)
      else      
        bSuccess := CheckResult(WmsDirectShowSetFileName('Source', InputFileName), False);
      if not bSuccess then
        WmsDirectShowRemoveFilter('Source')        
    end
  end else            
    bSuccess := False;
  bHaali := False;      
  if not bSuccess then begin  
    if bSplitter then     
      bSuccess := CheckResult(WmsDirectShowAddFilter('Haali Media Splitter (AR)', 'Source')) and       
                  CheckResult(WmsDirectShowConnectPin('ResourceSource', 'Source', 'Output', 'Input'))
    else
      bSuccess := CheckResult(WmsDirectShowAddFilter('Haali Media Splitter', 'Source')) and
                  CheckResult(WmsDirectShowSetFileName('Source', InputFileName));                  
    if bSuccess then bHaali := True
  end;
  iAudioStreamNo := mpAudioStreamNo;
  if iAudioStreamNo = -1 then
    iAudioStreamNo := 0;    
  if bHaali or SameText(mpFileType, 'flv') then begin  
    sVideoPinName := 'Video';
    sAudioPinName := 'Audio';  
    WmsDirectShowSelectStream('Source', iAudioStreamNo, MEDIATYPE_Audio, WmsGetStreamID(stAudio, iAudioStreamNo));
  end else begin
    WmsDirectShowGetPinName('Source', PINDIR_OUTPUT, sVideoPinName, MEDIATYPE_Video, 0);    
    if not CheckResult(WmsDirectShowSelectStream('Source', iAudioStreamNo, MEDIATYPE_Audio, WmsGetStreamID(stAudio, iAudioStreamNo)), False) then    
      WmsDirectShowGetPinName('Source', PINDIR_OUTPUT, sAudioPinName, MEDIATYPE_Audio, 0)
    else
      WmsDirectShowGetPinName('Source', PINDIR_OUTPUT, sAudioPinName, MEDIATYPE_Audio, iAudioStreamNo);
  end;  
  if not CheckResult(WmsDirectShowGetMediaType('Source', PINDIR_OUTPUT, sAudioPinName, 
        sAudioMediaMajorType, sAudioMediaSubType, iAudioChannels1, iAudioSampleRate, iAudioFormatTag)) then
    Exit;
  if sAudioMediaSubType = MEDIASUBTYPE_WAVE_DTS then
    sAudioFormat := 'dts'
  else if sAudioMediaSubType = MEDIASUBTYPE_WAVE_DOLBY_AC3 then
    sAudioFormat := 'ac3'    
  else if sAudioMediaSubType = MEDIASUBTYPE_DOLBY_AC3 then
    sAudioFormat := 'truehd'
  else if sAudioMediaSubType = MEDIASUBTYPE_AAC then
    sAudioFormat := 'aac'
  else if sAudioMediaSubType = MEDIASUBTYPE_MP3 then
    sAudioFormat := 'mp3'
  else
    sAudioFormat := '';
  if mpTimeStart <> '' then begin
    vCurrentPosition := WmsTimeConvert(mpTimeStart) * 10000000;
    if not CheckResult(WmsDirectShowSetPosition('Source', TIME_FORMAT_MEDIA_TIME, vCurrentPosition)) then
      Exit;
  end;                                                      
//  if not CheckResult(WmsDirectShowAddFilter('CyberLink H.264/AVC Decoder (TechnoTrend)', 'Video Decoder')) then
  if not CheckResult(WmsDirectShowAddFilter('CoreAVC Video Decoder', 'Video Decoder'), False) and 
     not CheckResult(WmsDirectShowAddFilter('Microsoft DTV-DVD Video Decoder', 'Video Decoder')) then 
    Exit;
  if not CheckResult(WmsDirectShowConnectPin('Source', 'Video Decoder', sVideoPinName, '')) then 
    Exit;
//  WmsDirectShowProperties('Video Decoder');
  bCreateAudioPipe := True;  
  if MatchText(sAudioFormat, ['aac', 'truehd']) then begin  
    bCreateAudioPipe := False;
    if CheckResult(WmsDirectShowAddFilter('ffdshow Audio Decoder', 'Audio Decoder'), False) then begin    
      if CheckResult(WmsDirectShowConnectPin('Source', 'Audio Decoder', sAudioPinName, ''), False) then      
        bCreateAudioPipe := True        
      else
        WmsDirectShowRemoveFilter('Audio Decoder')    
    end    
//    WmsDirectShowProperties('Audio Decoder');
  end;  
  if WmsCreateDualPipe(sReadVideoPipeName, sWriteVideoPipeName, 10000000) and 
     (not bCreateAudioPipe or WmsCreateDualPipe(sReadAudioPipeName, sWriteAudioPipeName, 10000000)) then begin
    if not CheckResult(WmsDirectShowAddDump(sWriteVideoPipeName, 'DumpVideo')) then 
      Exit;                 
    if not CheckResult(WmsDirectShowConnectPin('Video Decoder', 'DumpVideo', '', '', MEDIATYPE_Video, MEDIASUBTYPE_I420)) then 
      Exit;                                 
    if bCreateAudioPipe then begin    
      if not CheckResult(WmsDirectShowAddDump(sWriteAudioPipeName, 'DumpAudio')) then 
        Exit;    
      if MatchText(sAudioFormat, ['aac', 'truehd']) then begin  
        if not CheckResult(WmsDirectShowConnectPin('Audio Decoder', 'DumpAudio', 'Out', '', 
                            MEDIATYPE_Audio, KSDATAFORMAT_SUBTYPE_PCM)) then 
          Exit;
        if not CheckResult(WmsDirectShowGetMediaType('Audio Decoder', PINDIR_OUTPUT, 'Out', 
              sAudioMediaMajorType, sAudioMediaSubType, iAudioChannels2, 
              iAudioSampleRate, iAudioFormatTag)) then
          Exit;
        sAudioFormat := Format(' -f s16le -ar %d -ac %d', [iAudioSampleRate, iAudioChannels2])
      end else begin
        if not CheckResult(WmsDirectShowConnectPin('Source', 'DumpAudio', sAudioPinName, '')) then 
          Exit;
        if sAudioFormat <> '' then
          sAudioFormat := ' -f ' + sAudioFormat; 
      end
    end else begin
      sReadAudioPipeName := InputFileName;      
      sAudioFormat := ''
    end;            
    if not CheckResult(WmsDirectShowGetMediaType('DumpVideo', PINDIR_INPUT, '', 
          sVideoMediaMajorType, sVideoMediaSubType, iVideoWidth, iVideoHeight, iVideoCompression)) then
      Exit;                                     
    WmsDirectShowGetFrameRate('DumpVideo', PINDIR_INPUT, '', mpFrameRate);
    if CheckResult(WmsDirectShowPlay) then begin
      sInputParams := Format(csInputParams, [iVideoWidth, iVideoHeight, 
                                             ReplaceStr(FormatFloat('0.###', mpFrameRate), ',', '.'),
                                             sReadVideoPipeName, sAudioFormat, sReadAudioPipeName]);
      if mpTimeStart <> '' then
        sInputParams := '-ts ' + mpTimeStart + ' -muxpreload ' + IntToStr(WmsTimeConvert(mpTimeStart)) + ' ' + sInputParams;
      sTranscodingParams := sInputParams + WmsTranscodingVideoParams(0, 0, 0, 0, True, False) + 
                            ' "' + OutputFileName + '"';
//      ShowMessage(sTranscodingParams);                      
      TranscodingResult := WmsTranscodingExecute('WMSMPEG', sTranscodingParams)
    end
  end
end.