Difference between revisions of "Ogg"
From GiderosMobile
Line 5: | Line 5: | ||
=== Description === | === Description === | ||
− | Adds support for Ogg audio and Theora | + | Adds support for Ogg audio and video (Theora). |
− | + | There are two ways to use the Ogg plugin: | |
− | + | * to read Ogg files use: | |
<syntaxhighlight lang="lua"> | <syntaxhighlight lang="lua"> | ||
− | + | local theora = require "Theora" | |
− | + | </syntaxhighlight> | |
− | + | * to encode/decode Ogg files use: | |
− | local | + | <syntaxhighlight lang="lua"> |
− | + | -- Theora system | |
− | + | local theora = require "theora.core" | |
</syntaxhighlight> | </syntaxhighlight> | ||
+ | === Example === | ||
'''Recording your mic and camera to an .ogg video file''' | '''Recording your mic and camera to an .ogg video file''' | ||
<syntaxhighlight lang="lua"> | <syntaxhighlight lang="lua"> | ||
Line 25: | Line 26: | ||
require "camera" | require "camera" | ||
-- Theora system (from ogg plugin) | -- Theora system (from ogg plugin) | ||
− | local theora=require "theora.core" | + | local theora = require "theora.core" |
--Locate available cameras | --Locate available cameras | ||
Line 53: | Line 54: | ||
mic:setOutputFile("|T|mic.ogg") | mic:setOutputFile("|T|mic.ogg") | ||
− | -- | + | --Launch recording process |
Core.asyncCall(function() | Core.asyncCall(function() | ||
--Wait a frame and disable auto yield | --Wait a frame and disable auto yield | ||
Line 62: | Line 63: | ||
--Encode video header immediately, before audio data gets encoded | --Encode video header immediately, before audio data gets encoded | ||
--Parameters are: | --Parameters are: | ||
− | -- | + | -- stream id, codec name, frame rate, image width, image height, |
− | + | -- image format (use 3 for now, nothing else is supported), image quality | |
− | |||
− | |||
− | |||
− | -- | ||
− | |||
theora.beginVideo(id,"theora",30,cw,ch,3,0.6) | theora.beginVideo(id,"theora",30,cw,ch,3,0.6) | ||
-- Now encode 120 video frames, every other gideros frame (60fps->30fps) | -- Now encode 120 video frames, every other gideros frame (60fps->30fps) | ||
for i=1,120 do | for i=1,120 do | ||
--Parameters: | --Parameters: | ||
− | -- | + | -- stream id, frame id (zero based), image texture, end of stream indicator |
− | |||
− | |||
− | |||
theora.encodeVideoFrame(id,(i-1),Camera.texture,(i==120)) | theora.encodeVideoFrame(id,(i-1),Camera.texture,(i==120)) | ||
Core.yield(true) | Core.yield(true) |
Revision as of 06:12, 26 August 2024
Supported platforms:
Available since: Gideros 2017.10
Description
Adds support for Ogg audio and video (Theora).
There are two ways to use the Ogg plugin:
- to read Ogg files use:
local theora = require "Theora"
- to encode/decode Ogg files use:
-- Theora system
local theora = require "theora.core"
Example
Recording your mic and camera to an .ogg video file
-- Microphone plugin, for recording in gideros
require "microphone"
-- Camera plugin, to get images from
require "camera"
-- Theora system (from ogg plugin)
local theora = require "theora.core"
--Locate available cameras
lst=Camera.availableDevices()
for k,cam in ipairs(lst) do
print("#"..k.." Desc:"..cam.description.." Pos:"..cam.position.." Dev:"..cam.name)
end
-- Pick the first available
local cname=lst[1].name
cw,ch=640,480
--Theora needs full 16x16 blocks
ch=(ch+15)&~15
cw=(cw+15)&~15
--Create texture and start camera
Camera.texture=RenderTarget.new(cw,ch)
Camera.start(Camera.texture,cname)
--Set our stage size
application:setLogicalDimensions(cw,ch)
--Show our live video
local b=Bitmap.new(Camera.texture)
stage:addChild(b)
--Prepare for recording
local mic=Microphone.new("",24000,2,16)
mic:setOutputFile("|T|mic.ogg")
--Launch recording process
Core.asyncCall(function()
--Wait a frame and disable auto yield
Core.yield(true)
--Start recording and get recording stream id
mic:start()
local id=mic:getStreamId()
--Encode video header immediately, before audio data gets encoded
--Parameters are:
-- stream id, codec name, frame rate, image width, image height,
-- image format (use 3 for now, nothing else is supported), image quality
theora.beginVideo(id,"theora",30,cw,ch,3,0.6)
-- Now encode 120 video frames, every other gideros frame (60fps->30fps)
for i=1,120 do
--Parameters:
-- stream id, frame id (zero based), image texture, end of stream indicator
theora.encodeVideoFrame(id,(i-1),Camera.texture,(i==120))
Core.yield(true)
Core.yield(true)
end
-- Stop recording
mic:stop()
-- For testing, read encoded file and print its size
local f=io.open("|T|mic.ogg","rb")
local ct=f:read("*all")
f:close()
print("Ended",#ct)
end)
MethodsTheora.new creates a new Ogg/Theora object |
EventsConstants |