Languages

Menu
Sites
Language
Metadata Extractor 질문입니다.

현재 저는 hybrid Application을 제작하고 있습니다.

webApp과 nativeApp은 messagePort를 이용하여 정보를 주고 받습니다.

현재 webApp에서 비디오의 파일경로(ex>file:///usr/media/Videos/video_sample.mp4)를 MessagePort로 NativeApp에 전송을 합니다.

NativeApp(Service Applicaion)은 WebApp에서 받은 경로를 가지고 metadata_extractor_set_path(g_metadata_h,filePath));

를 요청하게 됩니다. (이전에 metadata_extractor_create는 실행 된 상태입니다. 또한 filePath의 경우, 위의 비디오 파일경로입니다.)

이 후 metadata_extractor_get_metadata(g_metadata_h,METADATA_DURATION,&value));를 이용하여 비디오의 시간을 가져오는데 

-17 (file does not exist)  error가 발생하게 됩니다. 

제 생각에는 webApp에서 사용하는 file url과 nativeApp에서 사용되는 file url이 달라서 발생하는것 같아

파일경로를 /usr/media/Videos/video_sample.mp4로 수정하여도 똑같은 에러가 발생합니다.

몇일째 이 문제로 머리 아프네요....

 

============================================================================================

추가 질문 사항> 궁극적으로 저는 AUDIO_CHANNEL을 분리해 내고자 합니다. metadata extractor에서 제공되는 get_metadata를 이용하면

채널의 수를 value에 담아서 주나요? 아니면 Audio의 버퍼를 주나요?

만약 지원하는 channel 수를 돌려준다고 한다면, 해당 파일의 각 채널별로 분리된 AUDIO_BUFFER를 가져올 방법이 있나요?

View Selected Answer

Responses

7 Replies
Jeongsu Kim

1. 미디어 스토리지 경로는  /opt/usr/media로 시작합니다.

2. api 동작은 file:// 로 시작해도 동작하도록 구현되어 있는 것 같습니다.

3. 채널 수를 담아줍니다. 버퍼를 주지 않습니다.

김동완 Kim

제가 질문상에 오타가 있었습니다.

경로가 /opt/usr/media로 했는데 -17을 리턴하네요.

다른 해결방법이 있을까요?

김동완 Kim

/opt/usr/media/Videos/video_sample.mp4 

이렇게 filePath로 넘겨줍니다..

Mark as answer
pius lee

Virtual Filesystem을 사용하셔야 합니다.

기본적으로 Videos와 같은 directory는 언제나 path가 폰에 따라 디바이스에 따라 또한 구현과 버전에 따라 항상 바뀔 수 있습니다.

그래서 절대경로를 쓰시면 안됩니다.

web에는 다음과 같은 virtual path가 있습니다.

https://developer.tizen.org/dev-guide/2.3.0/org.tizen.web.apireference/html/device_api/mobile/tizen/filesystem.html

  • images - the location for images
  • videos - the location for videos
  • music - the location for sounds
  • documents - the location for documents
  • downloads - the location for downloaded items
  • ringtones - the location for ringtones (read-only location)
  • camera - the location for the pictures and videos taken by a device (supported since Tizen 2.3)
  • wgt-package - the location for widget package which is read-only
  • wgt-private - the location for a widget's private storage
  • wgt-private-tmp - the location for a widget's private volatile storage

이에 대응되는 native api 는 storage api 입니다. 

https://developer.tizen.org/dev-guide/2.3.0/org.tizen.native.mobile.apireference/group__CAPI__SYSTEM__STORAGE__MODULE.html

기본적으로 web virtual path에 등장하는 path들은 internal storage라고 보시면 되기 때문에, 

사용하려고 하셨던 directory의 경우 다음처럼 표현 됩니다.

질문상 경로  /usr/media/Videos/video_sample.mp4
현재 device 맞는 경로 /opt/usr/media/Videos/video_sample.mp4
Web virtual path videos/video_sample.mp4
native api statement

char *path = NULL;

storage_get_directory(0, STORAGE_DIRECTORY_VIDEOS, &path);

// use path in here

free(path);

web app에서는 virtual path를 사용하시고, message port를 사용해  native에서 virtual path root name (videos 등)을 적절한 enum으로 변경하여 storage api를 통해 path를 가져와서 쓰시면 호환성 있는 코드를 작성할 수 있습니다.

 

참고로 storage_get_directory의 첫인자인 storage_id에 0이 들어간 이유는 디바이스에서 internal storage는 0으로 표현되기 때문입니다.

이걸 완전히 호환성 있는 코드로 가져오고 싶다면, 

storage_foreach_device_supported 함수를 통해 callback으로 각 storage id별 type을 확인하여 internal storage를 가져와야 합니다.

김동완 Kim

다시 확인해보니 Native App쪽에서 권한이 없었네요...

웹앱에서만 권한이 있어서 안되는거였어요 ^^ 감사합니다.

pius lee

체널별로 버퍼를 분리하는 이유는 체널별로 이펙트를 주거나 3D sound를 구현하시기 위함인가요?

이를 위해서는 2.3에 public api로 탑재된 openAL을 사용하시면 됩니다.

http://www.openal.org/

김동완 Kim

친절한 답변 정말로 감사합니다 ^^