2010-07-01 7 views
4

저는 캡처 장치에서 오디오 스트림을 캡처하고 LAME directshow 필터를 사용하여 mp3로 인코딩 한 다음 스트림을 파일에 기록하는 .NET DirectShow 응용 프로그램을 작성하고 있습니다. 이것은 내 직접 쇼 그래프입니다 : 캡처 소스 -> LAME AUDIO ENCODER (오디오 압축기) -> WAV DEST (Wave Muxer, SDK 소스에서 컴파일 됨) -> File Writer.DirectShow 응용 프로그램에서 LAME MP3 인코더를 IAudioEncoderProperties를 사용하여 구성하십시오.

문제는 프로그래밍 방식으로 인코더 (비트 전송률, 채널, VBR/CBR 등)를 구성하고 LAME 인코더에서 사용할 수있는 속성 페이지 (ISpecifyPropertyPages)를 사용하지 않는 것입니다.

LAME 소스를 검색 한 후에는 특정 IAudioEncoderProperties 인터페이스를 사용하여 구성해야합니다.

나는이 선언을 사용하여 내 .NET 응용 프로그램이 COM 인터페이스를 마샬링하려고 모든 방법을 다시 정의하지

 

[ComImport] 
[SuppressUnmanagedCodeSecurity] 
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
[Guid("ca7e9ef0-1cbe-11d3-8d29-00a0c94bbfee")] 
public interface IAudioEncoderProperties 
{ 
    // Get target compression bitrate in Kbits/s 
    int get_Bitrate(out int dwBitrate); 

    // Set target compression bitrate in Kbits/s 
    // Not all numbers available! See spec for details! 
    int set_Bitrate(int dwBitrate); 
} 

참고.

IAudioEncoderProperties prop = mp3Filter as AudioEncoderProperties;

을하지만 get_Bitrate 메서드를 호출 할 때 반환되는 값은 0이며, set_Bitrate 메소드를 호출하면 출력에 아무런 발생이없는 것으로 보인다

나는 성공적으로 사용하여 내 오디오 압축기 필터 (절름발이 인코더를) 캐스트 할 수 있습니다 파일. 속성 페이지를 사용하여 필터를 구성하려고 시도했지만 작동합니다.

아무도 이미 LAME 인코더를 DirectShow 응용 프로그램 (.NET이든 아니든)에 사용했는지 알고 싶습니다. 도움이 필요합니까?

감사합니다.

- Sypher

답변

1

은 어쩌면 내가 말,하지만 저도 같은 문제에 달렸다. 해결책은 LAME 소스에서 선언 된 것과 동일한 순서로 인터페이스의 메소드를 선언하는 것입니다.

[ComImport] 
[SuppressUnmanagedCodeSecurity] 
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
[Guid("ca7e9ef0-1cbe-11d3-8d29-00a0c94bbfee")] 
public interface IAudioEncoderProperties 
{ 
    /// <summary> 
    /// Is PES output enabled? Return TRUE or FALSE 
    /// </summary>  
    int get_PESOutputEnabled([Out] out int dwEnabled); 

    /// <summary> 
    /// Enable/disable PES output 
    /// </summary>  
    int set_PESOutputEnabled([In] int dwEnabled); 

    /// <summary> 
    /// Get target compression bitrate in Kbits/s 
    /// </summary>  
    int get_Bitrate([Out] out int dwBitrate); 

    /// <summary> 
    /// Set target compression bitrate in Kbits/s 
    /// Not all numbers available! See spec for details! 
    /// </summary>  
    int set_Bitrate([In] int dwBitrate); 

    ///... the rest of interface 
} 
+0

작동합니다! 고마워요! –

관련 문제