Ogg

From GiderosMobile
Revision as of 16:38, 27 June 2024 by MoKaLux (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Supported platforms: Platform android.pngPlatform ios.pngPlatform mac.pngPlatform pc.png
Available since: Gideros 2017.10

Description

Adds support for Ogg audio and Theora video.

Examples

A Video Sprite

Theora=require "Theora"
local videoSource = Theora.new("videos/file_example_OGG_480_1_7mg.ogg")
local videoStream = videoSource:play()
local videoSprite = videoStream:getVideo()
videoSprite:setPosition(0, 64)
stage:addChild(videoSprite)

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")

--Laucnh 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 (here 30fps)
	-- . 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)

Methods

Theora.new creates a new Ogg/Theora object

Events

Constants