블로그 이미지
우주청년
집구석 음악가, 잡식성 프로그래머

calendar

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

Notice

2011.05.26 18:26 GsNC 창고/안드로이드

예전에 "안드로이드 자막 지원 동영상 플레이어 만들기" 강좌를 올리면서 만든 어플입니다.
약간의 버그 수정이 있었습니다.

- 휴대폰의 자체 코덱을 이용해서 재생하므로, 휴대폰에서 지원하지 않는 동영상 포멧은 재생이 안됩니다.
- 자막은 *.smi 파일만 지원합니다. 다국어 자막은 지원하지 않습니다.
- 웹에 있는 동영상의 경우, 같은 주소같은이름.smi 파일이 있으면 같이 불러옵니다.
- 용량이 46.1KB로 매우 작습니다.




버그 관련 문의는 받지 않습니다.

안드로이드를 공부하고 싶은 사람들을 위해 소스가 공개되어 있습니다.
소스를 상업적으로 이용해도 상관없습니다.

안드로이드 자막 지원 동영상 플레이어 만들기 강좌 링크
1 - http://gsroom.tistory.com/126
2 - http://gsroom.tistory.com/127
3 - http://gsroom.tistory.com/142
4 - http://gsroom.tistory.com/143
5 - http://gsroom.tistory.com/144
posted by 우주청년

댓글을 달아 주세요

  1. Favicon of http://vbc.ba.ro 레몬 2011.05.26 23:08  Addr Edit/Del Reply

    안녕하세요 ㅎㅎ
    우연히 자막스트리밍 플레이어를 찾던중에 좋은 어플하나 구하고 갑니다 ㅎㅎ정말 제가 원하는 플레이언데
    코덱지원이 흠이네요 ㅠㅠ
    디자이어HD쓰는데 자막스트리밍기능은 정말좋은데 하드웨어코덱이 엉망이라 빛을내지 못하는 듯합니다..ㅠㅠ
    소프트웨어 코덱지원여부는 힘들까요??

    • Favicon of https://gsroom.tistory.com 우주청년 2011.05.27 07:26 신고  Addr Edit/Del

      소프트웨어 코덱까지 손대기에는 제 실력이 한참 모자른지라..
      소프트웨어 코덱을 지원하는 Vital플레이어 개발자에게 자막스트리밍을 요청하는게 빠를듯해요ㅎㅎ

  2. 안드로이드 2011.07.19 16:18  Addr Edit/Del Reply

    자막 어플 찾아헤매다가 마침내 빛을 발견했네요. 실행 잘됩니다. 정말 감사합니다. ^^

  3. lecin 2011.08.31 21:27  Addr Edit/Del Reply

    감사합니다. 공부삼아 플레이어 만들어보려고 했는데 좋은 참고가 되겠네요~

  4. 신형철 2012.01.14 10:24  Addr Edit/Del Reply

    감사합니다. 잘쓸게용~

  5. 미카사 2012.02.19 00:12  Addr Edit/Del Reply

    비슷한 질문 드려서 죄송합니다;;ㅎㅎ

    자막 재생하는데, 끝까지 재생하면 FC가 발생하네요.

    핸들러와 getSyncIndex 부분에 문제가 있는 것 같은데, 아무리 생각해봐도 어디에 문제가 있는지 잘 모르겠습니다(사실은 getSyncIndex부분이 잘 이해가 가지 않는 것도 있습니다).

    어느 방법으로 개선을 해야할지 도움 주시면 감사하겠습니다...

    mPlayer 서피스뷰가 Destroy 될때, 그리고 컴플리트 리스너에

    핸들러를 사용하는(싱크 맞추는 핸들러) 스레드를 중지하도록 해보았습니다만,

    FC는 그대로 발생하고, 로그캣은 똑같은 부분을 지적하더군요.

    • 미카사 2012.02.19 00:18  Addr Edit/Del

      흠... FC가 발생하는 자세한 타이밍은,

      자막 파일의 마지막 자막을 불러올 때 같습니다.

      마지막 전 자막까지는 불러오고, 마지막 자막을 불러오려는 타이밍에 FC가 나네요.

      자세한건 로그를 찍어봐야겠지만, 더이상 출력할 자막이 없을때 문제가 생기는 것 같습니다.

  6. 미카사 2012.02.19 01:14  Addr Edit/Del Reply

    원인은 이진 검색에서,

    if (parsedSmi.get(m).gettime() <= playTime && playTime < parsedSmi.get(m + 1).gettime()) {return m; // Logcat 이 지적한 부분}

    이 부분에서, parsedSmi.get(m+1).gettime() 여기서, m이 h와 같을때 m에 1을 더하게 되면 parsedSmi.size() 보다 큰 값이 되어서 생기는 것 같습니다.

    그러나 어떻게 고쳐야 할지는 여전히 막막합니다ㅎㅎ;; 비전공자라, 이진 검색 자체를 이해하는 것도 참 어려웠네요.

  7. 미카사 2012.02.19 01:54  Addr Edit/Del Reply

    해결 했습니다ㅎㅎ;;

    while의 첫번째 조건문을 다른 조건문으로 감쌌습니다.

    if (m + 1 < parsedSmi.size()) 인데요, m+1이 parsedSmi.size() 보다 작으면, 원래의 방식 그대로 처리하도록 했고,

    else 로 그것보다 작을 경우, 조건문을 if(parsedSmi.get(m).gettime() <= playTime && playTime < mPlayer.getDuration()) 이렇게 바꾸고 m을 리턴했습니다.

    본래는 m+1의 시간을 불러올텐데, 그것이 없고, m+1이 이미 parsedSmi.size()보다 크기 때문에, 영상의 끝 시간으로 조건을 바꾼 것입니다ㅎㅎ;;

    이렇게 하면 FC없이 정상 작동 하네요.

    이게 올바른 해결책인지는 모르겠습니다만, 어쨌든 해결 봐서 기분 좋네요(2시간정도 걸렸습니다ㅠㅠ).