OgvKit: native Ogg Vorbis/Theora playing on iOS

In addition to my in-browser ogv.js media player, I’ve got an OgvKit framework in progress for native iPhone and iPad apps, which I hope to integrate into Wikipedia’s new iOS app somewhere down the line. I took a little Independence Day holiday time and made a bunch of improvements from where I last left it a few months ago:

(If the video is sideways, sorry — it’s still “processing” as of this writing.)

  • Color conversion is OpenGL ES-accelerated, cutting CPU usage in half when playing video.
  • Audio output actually works, more or less in sync.
  • Framework now packaged as a Cocoa Touch Static Library project

Shiny new A7-based 64-bit devices play 480p and even 720p happily (iPhone 5S, iPad Air) but still struggle with some 1080p originals. My oldest devices like an iPhone 3Gs and iPod Touch 4th-gen can’t go higher than 160p or so at present — still significantly faster than the JavaScript ogv.js version which can’t handle video on those devices at all.

Future work for another weekend:

  • It turns out the xiph.org git mirrors of theora etc are not being maintained; will switch fetching of library source to SVN.
  • Improved controls, seeking, fullscreen
  • Cache downloaded data on disk instead of RAM!
  • Move more of the player code from the demo into the library so it can be reused…
  • Test standalone packaging of the library so it can be dropped in to other projects easily
  • Try to get assembly in libtheora to build, and/or replace the ARM assembly code with C SIMD intrinsics
  • Find and test on an armv7s device (iPhone 5, 5C or iPad 4th-generation)

2 thoughts on “OgvKit: native Ogg Vorbis/Theora playing on iOS”

  1. Hi Brionv,
    I am an iOS developer, I pull your source from Github and try to build project but I encounter this error:
    Undefined symbols for architecture x86_64:
    “_vpx_codec_dec_init_ver”, referenced from:
    -[OGVDecoderWebM processBegin] in OGVDecoderWebM.o
    “_vpx_codec_decode”, referenced from:
    -[OGVDecoderWebM decodeFrame] in OGVDecoderWebM.o
    “_vpx_codec_destroy”, referenced from:
    -[OGVDecoderWebM dealloc] in OGVDecoderWebM.o
    “_vpx_codec_get_frame”, referenced from:
    -[OGVDecoderWebM decodeFrame] in OGVDecoderWebM.o
    “_vpx_codec_vp8_dx”, referenced from:
    -[OGVDecoderWebM processBegin] in OGVDecoderWebM.o
    “_vpx_codec_vp9_dx”, referenced from:
    -[OGVDecoderWebM processBegin] in OGVDecoderWebM.o
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    I tried to fix but can not. Could you help me?
    Thank in advance.

Comments are closed.