Expression Encoder 3 SDK를 사용하면 윈도우 환경에서 쉽게 동영상 인코딩과 썸네일 추출을 할 수 있습니다. Expression Encoder를 설치하면 SDK도 동시에 설치가 됩니다. SDK가 설치된 폴더를 보면 도움말과 함께 관련 어셈블리 그리고 샘플을 제공합니다. 샘플을 분석해보면 어렵지 않다는 걸 알수 있습니다.

하지만 배포할 때 두가지 오류가 나더군요. 해결하는데 조금 시간이 걸렸는데 이 삽질을 공유합니다.

1. 64bit 서버 환경에서 발생하는 오류

{"파일이나 어셈블리 'Microsoft.Expression.Encoder, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 지정된 파일을 찾을 수 없습니다.":"Microsoft.Expression.Encoder, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"}

에러는 'Microsoft.Expression.Encoder.dll'을 찾을 수 없다는 얘기입니다. 하지만 해당 어셈블리는 잘 원래 위치에 잘 있죠. 설치할때 글로벌 어셈블리 캐쉬에도 넣어보고 했지만 같은 에러가 발생합니다. 

 Expression Encoder는 64bit 버전이 없습니다. 32bit 버전 뿐이죠. 그렇다고 64bit OS가 설치되어 돌아가는 환경에서 사용할 수 없는 것은 아닙니다. 다만 실행될때 32bit 로 실행하라는 설정만 해주면 됩니다. 아래와 그림과 같이 빌드 Configuration Manager를 열어서 x86으로 고정시켜주고 빌드해서 실행하면 위의 에러를 해결할 수 있습니다.


2. 권한 문제로 발생하는 오류

ErrorSystem.TypeInitializationException: 'Microsoft.Expression.Encoder.SkuManager'의 형식 이니셜라이저에서 예외를 Throw했습니다. ---> System.Security.Principal.IdentityNotMappedException: ID 참조의 일부 또는 전부를 변환할 수 없습니다.
   위치: System.Security.Principal.NTAccount.Translate(IdentityReferenceCollection sourceAccounts, Type targetType, Boolean forceSuccess)
   위치: System.Security.Principal.NTAccount.Translate(Type targetType)
   위치: System.Security.AccessControl.CommonObjectSecurity.ModifyAccess



위의 에러는 좀 처럼 감을 잡을 수 없습니다. SkuManager를 직접적으로 쓴적도 없고 ID를 본적도 없습니다. 한참을 고생한 결과 권한 문제라는 걸 알았습니다. 저는 Windows Service로 개발을 해서 서비스로 설치를 했기 때문에 아래와 같이 서비스를 실행하는 사용자를 권한이 높은 사용자로 변경해서 해결 했습니다.


ASP.NET에 Expression Encoder SDK를 붙여서 사용하시는 개발자들이 많은데요. 그럴 때는 IIS의 Application Pool의 사용권한과 관련이 있습니다. 이건 제가 직접 해보지는 못했는데 아래 그림처럼 Default Application Pool의 사용자 권한이 Network Service로 되어 있습니다. 이 권한과 Expression Encoder SDK를 사용하는 권한를 잘 따져 보면 답이 나오지 않을까 합니다.




WRITTEN BY
ONESTONE

트랙백  0 , 댓글  1개가 달렸습니다.
  1. azaKnope 2016.04.02 09:47
    http://google.com
secret