IPB

Welcome Guest ( Log In | Register )

Opus inside OggPages, Decoding a live Opus internet stream
thinktink
post Nov 14 2012, 06:15
Post #1





Group: Members
Posts: 12
Joined: 14-November 12
Member No.: 104501



I'm currently working on a Winamp input plugin to provide better native support for the Opus codec than the one that dshow could provide linking in the k-lite codec pack. Metadata and whatnot.

Anyways, I'm dynamically linking in the official opusfile-0.1-win32 libraries from the opus-codec site and I have been able to succesfully decode and get Winamp to play a local .opus file. However, I've not been so fortunate with online streams.

I am not familiar at all with any of the internals/packets/pages/whatevers of live streams. I can get my plugin to connect to a server, get the data it's outchucking, parse out the HTTP header, parse the seperate Ogg Pages, get the OpusHead, and get the OpusTags, but that's it. I tried sending, just the Ogg pages, a chain of Ogg pages, individual segments in the pages, to all of the in-memory functions of the libraries but they all either return error code -133 (OP_EBADHEADER), -137 (OP_EBADLINK), or -139 (OP_EBADTIMESTAMP).

I know nothing of "granules", whatever that means.

Can somebody tell me how to decode an Ogg Opus stream with those libraries or if it's not possible to?

C++

tia

This post has been edited by thinktink: Nov 14 2012, 06:19
Go to the top of the page
+Quote Post
 
Start new topic
Replies
thinktink
post Nov 18 2012, 15:01
Post #2





Group: Members
Posts: 12
Joined: 14-November 12
Member No.: 104501



I've made significant progress but I'm still having problems. I'm parsing the OggS pages myself to retrieve the stream header and metadata and am sending all of the OggS segments (except the ones containing OpusHead and OpusTags) from those pages directly to the "opus_decode" function which sometimes returns the number of samples and sometimes returns -4 (OPUS_INVALID_PACKET). And when the function does return with a sample count some of the audio sounds distorted or it introduces junk audio data.

I'm testing it with actual radio station servers (which aren't anywhere near as bad sounding but still introduces bad audio data here-and-there) and a file from a local webserver (that sounds absolutely fine when played back locally with the opuslibfile*.dll functions.

What am I doing wrong? Am I supposed to treat the segments differently in certain situations? Do I need to combine some? If I do, how do I figure out when and how?

tia
Go to the top of the page
+Quote Post

Posts in this topic


Reply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 



RSS Lo-Fi Version Time is now: 27th December 2014 - 22:00