스마트폰 어플 중 최강이라고 불리우는 mx player를 쓰다가 궁금한점이 생겼습니다. 도대체 S/W 디코더는 무엇이며 H/W 디코더는 무엇인지, 또 어떤 상황일때 적용하는지 왜 쓰는지 궁금하더군요.

그래서 찾아서 포스팅을 남겨봅니다. 일단 결론부터 말씀드리자면

H/W디코더는 내장 비디오엔진 사용
H/W+디코더는 자체 비디오재생 엔진 사용 더 많은 비디오 형식(MKV나 TS 같은..)재생가능
S/W디코더는 하드웨어적으로 비디오엔진이 없을때 최후의 보루로 사용.

하지만 뭐니뭐니 해도 셋 다 설정해보면서 안끊기는것, 재생이 제대로 되는것, 사운드와 매칭이 잘 되는것, 프레임이 안 떨어지는것, 동영상 빨리 스킵하기 등등으로 자기가 써 보고 정해야겠지요.

폰마다 또 다 조금씩 달라서 어느것을 써야한다, 어느것이 제일 좋다고 말씀드리긴 애매하네요

 

S/W디코더, H/W 디코더가 무엇인가요?

  • 모바일 기기의 경우 처리속도가 PC에 비해 느리기 때문에 CPU만으로는 고화질 비디오를 재생하기 어려운 경우가 많습니다. 이에 제조사들은 비디오 디코딩만을 위한 멀티미디어 칩셋을 장착하고 있습니다. H/W 디코더란 이러한 칩셋을 사용하여 비디오를 재생하는 것이며, S/W 디코더는 CPU만을 사용하여 재생하는 것입니다.

H/W와 H/W+의 차이는 무엇인가요?

  • H/W는 내장 비디오재생 엔진을 사용하여 재생하는 반면, H/W+는 자체 비디오재생 엔진을 사용하여 재생하는 것입니다. 일반적으로 H/W+가 더 많은 비디오 형식을 재생할 수 있으나 장비에 따라 지원되지 않거나 비디오 재생에 오류가 발생할 수 있습니다.
  • 또한 H/W+는 볼륨을 200% (30)까지 증가시킬 수 있으며, 백그라운드 재생을 사용할 수 있습니다.
  • H/W+ 디코더는 기본적으로 사용되지 않으며 설정 > 디코더 화면에서 활성화할 수 있습니다. 단, 지원되지 않는 장비라면 H/W+ 디코더에서는 활성화메뉴가 표시되지 않습니다.

H/W+ 디코더가 지원되지 않는 이유는 무엇인가요?

  • H/W+ 디코더는 안드로이드 2.2 (프로요) 이상에서만 지원됩니다.
  • 일부 멀티미디어 칩셋의 경우 표준 안드로이드 미디어 프레임워크와 호환되지 않습니다. 이런 칩셋이 사용되는 경우 지원되지 않을 수 있습니다.

H/W+ 디코더가 재생을 시작하고 얼마 후 비정상 종료됩니다.

  • 일부 장비는 하드웨어 디코더를 정상적으로 초기화하기 위하여 /system/build.prop 파일을 필요로 합니다. 이 파일의 읽기 권한이 삭제되면 H/W+ 디코더가 실패할 수 있습니다. 이 현상은 일부 HTC 4.3/4.4 장비에서 발생하고 있습니다. adb shell을 사용할 수 있다면 다음 명령으로 파일의 권한을 기본값으로 되돌릴 수 있습니다: chmod 644 /system/build.prop (하지만 먼저 /system 파티션이 RW 권한으로 마운트 되어야 합니다.)
  • H/W+ 디코더는 모든 장비에서 동작하도록 보장되지 않습니다. 장비에 H/W+ 디코더가 동작하는지는 여부는 포럼을 확인하시기 바랍니다.

H/W디코더를 사용할 수 없는 이유가 무엇인가요?

  • H/W디코더는 장치에 내장된 멀티미디어 칩셋을 사용하기 때문에 칩셋에서 지원하는 않는 형식의 비디오는 재생할 수 없습니다. 
  • 또한 안드로이드 미디어 프레임워크는 응용프로그램과 칩셋간의 인터페이스를 담당하고 있습니다. 일부 안드로이드 빌드에서는 미디어 프레임워크의 결함으로 인해 H/W 재생이 취약할 수 있습니다.
  • H/W 재생능력의 향상을 원하신다면 제조사에 강력히 요청하시기 바랍니다.
  • 재생되는 형식은 장치 메뉴얼이나 제조사에 문의하시기 바랍니다. 

10-bit 비디오를 하드웨어 디코더로 재생할 수 없습니다.

  • 대부분의 안드로이드 장비에서, 하드웨어 디코더는 10-bit 비디오를 지원하지 않으며 H.264 basic profile 까지만 지원됩니다. 이것은 하드웨어적인 제약이므로 지원되지 않는 장비에서는 사용이 불가능합니다.

H/W 디코더로 재생이 안되는 비디오가, 같은 H/W의 다른 장비에서는 재생이 되는 이유가 무엇인가요?

비디오를 H/W디코더로 재생하기 위해서는 다음 조건이 충족되어야합니다.
  1. 비디오 디코딩 칩셋(H/W)이 해당 코덱과 프로파일을 지원해야합니다.
  2. 비디오 디코딩 미들웨어가 해당 코덱을 처리할 수 있어야합니다. 이 미들웨어는 시스템 소프트웨어로 장비제조사, ROM 제작자 또는 구글 안드로이드 팀에서 제공됩니다.
  3. 디먹서 (demuxer 또는 파일 extractor)가 비디오 파일을 읽고 처리할 수 있어야 합니다 (mkv, avi, flv, 등등)
즉, 같은 H/W나 같은 펌웨어인 경우라도 지원되는 비디오 형식은 다를 수 있습니다.

S/W고속 디코더가 없어 비디오 재생이 느려졌습니다.

  • 1.7부터 S/W고속 디코더는 S/W 디코더에 통합되었습니다. 재생 속도가 느린 경우 S/W 디코더는 자동으로 S/W고속 디코딩 모드로 전환되므로 재생속도는 느려지지 않습니다.
  • "속도 향상기법 사용" 옵션을 S/W 디코더와 함께 사용하면 구버전의 S/W 고속 디코더 사용과 같은 효과가 적용됩니다. 이 옵션은 재생화면 > 메뉴 > 재생 에 위치합니다.

비디오를 시작할 때 디코더를 선택하여 실행하는 방법은 없나요?

  • 설정화면에서 기본 디코더를 변경할 수 있습니다.
  • 기본 디코더를 유지하고 특정 비디오에서만 선택하려면, 비디오 목록에서 비디오를 선택한 후 길게 누르면 메뉴가 표시되는데, 이 때 가장 위의 "재생..." 항목을 선택하면 디코더를 선택하여 실행하실 수 있습니다.

재생을 시작하고 몇 초 지나면 소리가 멈춥니다.

  • S/W 디코더를 사용하는 경우에 발생할 수 있는 현상으로 비디오를 재생하기에 CPU가 너무 느린 경우에 발생하게 됩니다. 비디오 스펙을 장비에서 원활히 재생할 수 있는 수준으로 인코딩하여 재생하시기 바랍니다.

비디오와 오디오의 싱크가 맞지 않습니다.

  • 비디오 파일이 잘못 인코딩된 경우일 수 있습니다. PC용 플레이어나 장비의 기본 플레이어를 사용하여 테스트하여 파일자체의 싱크가 정상인지 확인하시기 바랍니다.
  • 일부 H/W 디코더의 경우 싱크 오류가 있는 것으로 알려져 있습니다. 이 경우 S/W 디코더를 대신 사용하시기 바랍니다.
  • S/W 디코더를 사용하는 경우에만 발생한다면 비디오를 재생하기에 CPU가 충분히 빠르지 못한 경우일 수 있습니다. 비디오 파일을 장비에서 원활히 재생할 수 있는 수준으로 낮춰 인코딩하여 재생하시기 바랍니다.

비디오 재생중 비디오 목록으로 나가집니다.

  • S/W 디코더를 사용한 재생이 실패한 경우입니다. 여러가지 원인이 있으나 코덱의 버그일 가능성이 높습니다. 시스템 로그를 첨부하여 버그리포트를 작성하여 주십시요.

비디오가 자꾸 끊깁니다.

  • H/W 디코더에서 끊기는 경우 S/W 디코더로 전환해 보시기 바랍니다. S/W디코더에서 끊기는 경우는 비디오를 재생하기에 CPU가 너무 느린 경우에 발생하게 됩니다. 비디오 스펙을 장비에서 원활히 재생할 수 있는 수준으로 인코딩하여 재생하시기 바랍니다.

비디오 화면이 표시되지 않습니다.

  • H/W 디코더를 사용하는 경우 일부 비디오의 경우 음성만 재생되는 경우가 있습니다. 이 경우 S/W 디코더를 사용하여 재생하여 주시기 바랍니다. 

오디오가 출력되지 않습니다.

  • H/W 디코더의 경우 비디오 코덱은 지원하나 오디오 코덱은 지원하지 않는 경우가 있습니다. 이 경우 오디오 트랙을 S/W오디오로 변경하면 오디오가 출력되게 됩니다. 다만 S/W 오디오 코덱의 경우도 지원하지 못하는 코덱이 있을 수 있습니다.
  • DTS 오디오 코덱을 포함한 일부 오디오 코덱의 경우 라이센스 문제로 지원되지 않습니다.

불륨 부스팅 기능이 사라졌습니다.

  • 현재 볼륨 부스팅은 H/W 디코더에서는 동작하지 않습니다. H/W+ 디코더나 S/W 디코더 또는 S/W 오디오를 선택하여 주십시오.

볼륨을 200%로 올렸으나 소리가 커지지 않습니다.

  • 오디오 원본의 볼륨이 이미 최대치에 가까운 경우 볼륨증가의 효과가 없을 수 있습니다. 100% 이상의 볼륨효과를 얻기 위해 MX 플레이어는 오디오 샘플을 특정 비율로 증가시키지만, 증가된 값은 최대 볼륨을 넘을 수 없습니다. 따라서 오디오 원본이 이미 최대 볼륨값에 가까운 값을 갖는 경우 볼륨은 더 이상 증가될 수 없습니다.
  • 최대 값을 넘는 볼륨이 필요한 경우 구글  Play 스토어에서 볼륨 부스터(Volume Booster) 앱들을 테스트하여 보시기 바랍니다.

아무 소리도 들리지 않습니다 / 볼륨조절이 되지 않으며 볼륨을 올려도 즉시 0으로 바뀝니다.

  • 일부 장비에서 미디오 볼륨이 차단된 경우 볼륨 조절이 안되는 현상이 있습니다. 사운드 등록정보에서 미디오 볼륨차단을 해제하여 주시기 바랍니다.

비디오 위치를 변경할 수 없습니다. 또한 비디오를 시작하면 항상 처음부터 시작됩니다.

일부 비디오는 위치를 변경할 수 없는 경우가 있습니다. 다음은 현상이 발생하는 일부 경우입니다.
  • 손상된 파일 - 원본 파일이 정상이더라도 장비로 복사하는 과정에서 손상이 발생할 수 있습니다.
  • 파일 설정 - 일부 비디오는 비디오의 위치 정보가 누락되어있습니다. 이런 파일은 일반적으로 위치 변경을 할 수 없거나 가능하더라도 긴 시간이 걸리게 됩니다.
  • 디코더 버그 - 현재 h/w, s/w 코덱 모두 모두 PC버전에 비하여 문제점이 많습니다. 여러 그룹의 개발자들이 안드로이드 버전 코덱을 향상시키기 위하여 작업하고 있습니다.

비디오가 정확한 위치로 이동되지 않습니다.

  • 고속 위치이동이 켜져있는 경우 H/W+와 S/W 디코더에서 정확한 위치로 이동되지 않을 수 있습니다. 고속 위치이동은 설정 > 플레이어 > 고속 위치이동 에서 설정하실 수 있습니다.
  • 일부 장비의 H/W 디코더는 정확한 위치로 이동되지 않는 문제가 있습니다. 이것은 펌웨어상의 문제로 정확한 이동이 필요하신 경우 H/W+나 S/W 디코더를 사용하여 주시기 바랍니다.
  • 일부 S/W 코덱의 경우 위치 이동에 오류가 있는 것으로 알려져 있으며, 이 경우 정확한 위치로 이동되지 않을 수 있습니다. S/W 코덱은 지속적으로 업그레이드 예정입니다.

.m4v나 .dcf 파일을 재생할 수 없습니다.

  • 일반적으로 .m4v, .dcf 파일은 DRM (digital rights management, 디지털 콘텐츠 권리 관리)에 의해 보호되는 비디오에 사용됩니다. 해당 파일은 DRM 보호가 해제되지 않는 한 MX 플레이어를 통하여 재생할 수 없습니다. 

3D 비디오가 재생되지 않습니다.

  • 현재 3D 비디오는 지원하지 않으며 향후 검토예정인 기능입니다. 

최신 테그라2 CPU를 장착한 장비를 사용하고 있습니다. 비디오 재생이 왜 느린가요?

  • 테그라2는 고성능의 CPU이지만 멀티미디어 처리에 필수적인 기능이 빠져있는 CPU입니다. 따라서 대부분의 다른 최신 CPU에 비하여 비디오 재생에 취약합니다.

제품 스펙에 1080p 비디오 재생을 지원한다고 되어있습니다. 그런데 재생이 왜 느린가요?

  • 제조사에서 발표하는 스펙은 H/W 디코더를 사용할 경우 지원될 수 있는 "최대" 스펙을 의미하는 것으로, 실제 성능과는 차이가 있을 수 있습니다. 특히 S/W 디코더의 경우는 이 스펙과 아무련 관련이 없습니다.

비디오 줌하거나 '자름'모드를 선택 하여도 화면 크기 이상으로 늘어나지 않습니다.

  • 일부 장비에서 H/W디코더를 사용하여 재생하는 경우 비디오 출력 크기가 물리적 화면 크기 이상으로 늘어나지 않는 경우가 있습니다. 이것은 장비 고유의 특성으로 해결이 불가능합니다. 
  • 이런 장비의 경우에도 S/W디코더를 사용하면 화면 크기 이상으로 늘일 수 있습니다. 이런 특성을 지닌 장비에는 갤럭시 최신 모델들과 Xperia Arc가 포함됩니다.

재생 도중 장비가 반응을 하지 않아 재부팅을 해야 했습니다.

  • H/W 디코더에 문제가 발생하는 경우 시스템에 영향을 미쳐 장비가 반응하지 않게 될 수 있습니다. H/W 디코더는 제작사에서 제공하는 것으로 종종 불안정한 경우가 있는 것으로 알려져 있습니다. 
  • 문제가 되는 비디오의 경우 보다 안정적인 S/W 디코더를 사용해 주시기 바랍니다.
  • 또한 일부 고성능 장비에서 발열로 인한 재부팅 현상이 있습니다. 가급적 낮은 온도에서 사용하여 주시고 충전이 온도를 높이는 원인이 되므로 전원이나 USB연결을 해제하고 사용하시기 바랍니다.

재생 도중 또는 잠금화면에서 돌아올 때 장비가 종료 됩니다.

  • 메모리(RAM) 부족으로 인한 현상일 수 있습니다. 비디오 재생은 비디오 해상도에 따라 많은 메모리를 소모할 수 있습니다. 또한 비트맵이나 ssa/ass 자막이 사용되면 추가적인 버퍼가 필요하게 됩니다. 장비에 충분한 메모리(RAM)가 없으면 예기치 않게 장비가 종료되거나 재시작될 수 있습니다. 이 경우 비디오를 재생하기 전에 메모리를 많이 소모하는 다른 앱을 종료하여 주십시오.

H/W 디코더로 재생하다 이상이 발생하여 종료 후 앱을 재시작하였으나 문제가 해결되지 않습니다. 다른 기본 플레이에서도 동일한 문제가 발생합니다.

  • 안드로이드 미디어 프레임워크는 한번 문제가 발생하면 App을 종료하여도 문제가 지속될 수 있는 구조로 되어있습니다.
  • 이 경우 장비를 재시작하는 경우 문제가 해결될 수 있습니다.

재생되지 않는 비디오가 있습니다. 왜 모든 코덱이 지원되지 않나요?

  • MX 플레이어는 FFmpeg 코덱을 사용하여 대부분의 코덱을 지원하지만, 불행히도 모든 코덱이 지원되지는 않습니다. 전세계적으로 수백개의 비디오 오디오 코덱이 존재하므로 모든 코덱을 지원하기는 현실적으로 어렵습니다.
  • 심지어 일부 코덱은 특정 운영체제에서만 작동합니다. 특히 코덱 이름에 MS또는 Microsoft가 포함된 경우 윈도우즈에서만 구동되는 코덱인 경우가 많습니다. 이런 코덱은 주로 WMV나 ASF 같은 윈도우즈 전용의 비디오 파일에 사용됩니다.
  • 간혹 같은 종류의 코덱을 사용하고 있음에도 재생되지 않는 비디오가 있을 수 있습니다. 코덱이나 코드상의 버그일 수 있으니 버그 리포트를 작성하여 주시기 바랍니다.

PC용 코덱을 사용할 수 있나요?

  • PC와 안드로이드는 서로 호환되지 않는 운영체제로 PC용 코덱은 안드로이드에서 구동되지 않습니다.

외부 코덱이란 무엇인가요?

  • MX플레이어는 소프트웨어코덱으로 FFmpeg을 사용하고 있습니다. 버전 1.7부터는 기본으로 제공되어지는 코덱외에 직접 빌드한 코덱을 선택하여 사용할 수 있는 기능을 제공하고있습니다.
  • 코덱을 빌드하는 방법은 다음 페이지를 참고하십시오: https://sites.google.com/site/mxvpen/ffmpeg
  • 코덱이 성공적으로 빌드되면 다음 5개 파일이 생성됩니다. libavcodec.mx.so, libavformat.mx.so, libavutil.mx.so, libswresample.mx.so, libswscale.mx.so. 이 파일들을 장비에 모두 복사 후 설정 > 디코더 > 외부 코덱 메뉴에서 복사한 디렉터리를 선택하면 외부 코덱을 사용할 수 있습니다.
  • 이 코덱 파일들은 버전 1.7 이전 파일과는 호환되지 않으며 libffmpeg.so의 단일파일로 되어있는 타 플레이어의 코덱들과도 호환되지 않습니다.
  • 다음 링크를 방문하여 외부 코덱의 사용법을 확인하십시오: 링크 #1

.OGG 파일을 비디오로 인식합니다.

  • OGG파일은 비디오와 오디오 모두에 사용되는 파일형식이므로 MX 플레이어는 OGG파일을 비디오 파일로 인식하여 표시합니다. 
  • OGG파일을 검색에서 제외하려면 설정 > 목록 > 파일 확장자 화면에서 OGG를 삭제하여 주시기 바랍니다.

반복 재생이 동작하지 않습니다.

  • 최신 버전에서 반복 재생은 '재생 완료 후 처리' 설정에서 메뉴상의 '반복' 메뉴로 이동되었습니다.

+ Recent posts