Module lib.webpage.camerapage
Function define the web page to see the camera streaming
Expand source code
# Distributed under Pycameresp License
# Copyright (c) 2023 Remi BERTHOLET
""" Function define the web page to see the camera streaming """
import server.httprequest
from htmltemplate import *
import webpage.mainpage
import webpage.streamingpage
import video.video
import tools.lang
import tools.info
import tools.tasking
import tools.features
@server.httpserver.HttpServer.add_route(b'/camera', menu=tools.lang.menu_camera, item=tools.lang.item_camera, available=tools.info.iscamera() and video.video.Camera.is_activated() and tools.features.features.camera)
async def camera_page(request, response, args):
""" Camera streaming page """
framesizes = []
config = video.video.Camera.get_config()
webpage.streamingpage.Streaming.set_config(config)
for size in [
#b"1600x1200", # Disabled because it doesn't work on freenove
b"1280x1024",
b"1024x768",
b"800x600",
b"640x480",
#b"400x296",b"320x240",b"240x176",b"160x120" # Format not very useful therefore deleted
]:
framesizes.append(Option(value=size, text=size, selected= True if config.framesize == size else False))
page = webpage.mainpage.main_frame(request, response, args, tools.lang.camera,
Form([
webpage.streamingpage.Streaming.get_html(request),
ComboCmd(framesizes, text=tools.lang.resolution, path=b"camera/configure", name=b"framesize"),
SliderCmd( text=tools.lang.quality , path=b"camera/configure", name=b"quality", min=b"10", max=b"63", step=b"1", value=b"%d"%config.quality),
#SliderCmd( text=tools.lang.brightness, path=b"camera/configure", name=b"brightness", min=b"-2", max=b"2" , step=b"1", value=b"%d"%config.brightness),
#SliderCmd( text=tools.lang.contrast , path=b"camera/configure", name=b"contrast" , min=b"-2", max=b"2" , step=b"1", value=b"%d"%config.contrast),
#SliderCmd( text=tools.lang.saturation, path=b"camera/configure", name=b"saturation", min=b"-2", max=b"2" , step=b"1", value=b"%d"%config.saturation),
SliderCmd( text=tools.lang.flash_level, path=b"camera/configure", name=b"flash_level", min=b"0" , max=b"256", step=b"1", value=b"%d"%config.flash_level),
SwitchCmd( text=tools.lang.hmirror , path=b"camera/configure", name=b"hmirror" , checked=config.hmirror),
SwitchCmd( text=tools.lang.vflip , path=b"camera/configure", name=b"vflip" , checked=config.vflip),
Link(text=tools.lang.item_full_screen , class_=b"btn btn-outline-primary ", href=b"/fullscreen")
]))
await response.send_page(page)
@server.httpserver.HttpServer.add_route(b'/fullscreen', available=tools.info.iscamera() and video.video.Camera.is_activated() and tools.features.features.camera)
async def full_screen_camera_page(request, response, args):
""" Full screen camera page """
framesizes = []
config = video.video.Camera.get_config()
webpage.streamingpage.Streaming.set_config(config)
page = webpage.mainpage.main_page(request, response, args, b"",
content=[\
webpage.streamingpage.Streaming.get_html(request),
Tag(b'''
<script>
window.addEventListener('DOMContentLoaded', (event) =>
{
const img = document.getElementById('video-stream');
img.addEventListener('click', () =>
{
window.location.href = '/camera';
});
});
document.addEventListener('DOMContentLoaded', (event) =>
{
document.addEventListener('keydown', (event) =>
{
window.location.href = '/camera';
});
});
</script>
''')], menu_visible=False)
await response.send_page(page)
@server.httpserver.HttpServer.add_route(b'/camera/configure', available=tools.features.features.camera)
async def camera_configure(request, response, args):
""" Real time camera configuration """
tools.tasking.Tasks.slow_down()
# print(strings.tostrings(b"%s=%s"%(request.params[b"name"],request.params[b"value"])))
config = video.video.Camera.get_config()
config.update(request.params)
config.save()
webpage.streamingpage.Streaming.set_config(config)
webpage.streamingpage.Streaming.activity()
await response.send_ok()
@server.httpserver.HttpServer.add_route(b'/camera/onoff', menu=tools.lang.menu_camera, item=tools.lang.item_onoff, available=tools.info.iscamera() and tools.features.features.camera)
async def camera_on_off(request, response, args):
""" Camera command page """
config = video.video.Camera.get_config()
command = request.params.get(b"action",b"none")
if command == b"on":
config.activated = True
elif command == b"off":
config.activated = False
if command in [b"on",b"off"]:
config.save()
alert = AlertError(text=tools.lang.taken_into_account)
else:
alert = None
page = webpage.mainpage.main_frame(request, response, args, tools.lang.camera_onoff,
Form([
Submit(text=tools.lang.camera_off if config.activated else tools.lang.camera_on, name=b"action", value=b"off" if config.activated else b"on" ), alert
]))
await response.send_page(page)
Functions
async def camera_configure(request, response, args)-
Real time camera configuration
Expand source code
@server.httpserver.HttpServer.add_route(b'/camera/configure', available=tools.features.features.camera) async def camera_configure(request, response, args): """ Real time camera configuration """ tools.tasking.Tasks.slow_down() # print(strings.tostrings(b"%s=%s"%(request.params[b"name"],request.params[b"value"]))) config = video.video.Camera.get_config() config.update(request.params) config.save() webpage.streamingpage.Streaming.set_config(config) webpage.streamingpage.Streaming.activity() await response.send_ok() async def camera_on_off(request, response, args)-
Camera command page
Expand source code
@server.httpserver.HttpServer.add_route(b'/camera/onoff', menu=tools.lang.menu_camera, item=tools.lang.item_onoff, available=tools.info.iscamera() and tools.features.features.camera) async def camera_on_off(request, response, args): """ Camera command page """ config = video.video.Camera.get_config() command = request.params.get(b"action",b"none") if command == b"on": config.activated = True elif command == b"off": config.activated = False if command in [b"on",b"off"]: config.save() alert = AlertError(text=tools.lang.taken_into_account) else: alert = None page = webpage.mainpage.main_frame(request, response, args, tools.lang.camera_onoff, Form([ Submit(text=tools.lang.camera_off if config.activated else tools.lang.camera_on, name=b"action", value=b"off" if config.activated else b"on" ), alert ])) await response.send_page(page) async def camera_page(request, response, args)-
Camera streaming page
Expand source code
@server.httpserver.HttpServer.add_route(b'/camera', menu=tools.lang.menu_camera, item=tools.lang.item_camera, available=tools.info.iscamera() and video.video.Camera.is_activated() and tools.features.features.camera) async def camera_page(request, response, args): """ Camera streaming page """ framesizes = [] config = video.video.Camera.get_config() webpage.streamingpage.Streaming.set_config(config) for size in [ #b"1600x1200", # Disabled because it doesn't work on freenove b"1280x1024", b"1024x768", b"800x600", b"640x480", #b"400x296",b"320x240",b"240x176",b"160x120" # Format not very useful therefore deleted ]: framesizes.append(Option(value=size, text=size, selected= True if config.framesize == size else False)) page = webpage.mainpage.main_frame(request, response, args, tools.lang.camera, Form([ webpage.streamingpage.Streaming.get_html(request), ComboCmd(framesizes, text=tools.lang.resolution, path=b"camera/configure", name=b"framesize"), SliderCmd( text=tools.lang.quality , path=b"camera/configure", name=b"quality", min=b"10", max=b"63", step=b"1", value=b"%d"%config.quality), #SliderCmd( text=tools.lang.brightness, path=b"camera/configure", name=b"brightness", min=b"-2", max=b"2" , step=b"1", value=b"%d"%config.brightness), #SliderCmd( text=tools.lang.contrast , path=b"camera/configure", name=b"contrast" , min=b"-2", max=b"2" , step=b"1", value=b"%d"%config.contrast), #SliderCmd( text=tools.lang.saturation, path=b"camera/configure", name=b"saturation", min=b"-2", max=b"2" , step=b"1", value=b"%d"%config.saturation), SliderCmd( text=tools.lang.flash_level, path=b"camera/configure", name=b"flash_level", min=b"0" , max=b"256", step=b"1", value=b"%d"%config.flash_level), SwitchCmd( text=tools.lang.hmirror , path=b"camera/configure", name=b"hmirror" , checked=config.hmirror), SwitchCmd( text=tools.lang.vflip , path=b"camera/configure", name=b"vflip" , checked=config.vflip), Link(text=tools.lang.item_full_screen , class_=b"btn btn-outline-primary ", href=b"/fullscreen") ])) await response.send_page(page) async def full_screen_camera_page(request, response, args)-
Full screen camera page
Expand source code
@server.httpserver.HttpServer.add_route(b'/fullscreen', available=tools.info.iscamera() and video.video.Camera.is_activated() and tools.features.features.camera) async def full_screen_camera_page(request, response, args): """ Full screen camera page """ framesizes = [] config = video.video.Camera.get_config() webpage.streamingpage.Streaming.set_config(config) page = webpage.mainpage.main_page(request, response, args, b"", content=[\ webpage.streamingpage.Streaming.get_html(request), Tag(b''' <script> window.addEventListener('DOMContentLoaded', (event) => { const img = document.getElementById('video-stream'); img.addEventListener('click', () => { window.location.href = '/camera'; }); }); document.addEventListener('DOMContentLoaded', (event) => { document.addEventListener('keydown', (event) => { window.location.href = '/camera'; }); }); </script> ''')], menu_visible=False) await response.send_page(page)