Skip to content

Commit

Permalink
#4 drop a configurable number of frames to improve performance
Browse files Browse the repository at this point in the history
  • Loading branch information
andykrohg committed Feb 18, 2022
1 parent fcade60 commit a9ba69c
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 3 deletions.
1 change: 1 addition & 0 deletions .clivrt
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ loglevel = ERROR
videostyle = ascii-color
webcam = FAKE
framerate = 30
frame_interval = 4
video_size = 800x600
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ loglevel = WARN
videostyle = just-ascii
webcam = /dev/video0
framerate = 30
frame_interval = 4
video_size = 800x600
```
* signalinghosturl = Which server to connect to for finding/connecting/chatting with peers (note once a peer connection is established this is no longer required for video chat). Must begin with ws:// or wss://
Expand Down
10 changes: 8 additions & 2 deletions cli/media/videotransformtrack.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@

from configparser import ConfigParser
from video_to_ascii import video_engine
from aiortc.contrib.media import MediaStreamTrack
import sys
Expand All @@ -14,17 +15,22 @@ class VideoTransformTrack(MediaStreamTrack):

kind = "video"
ve = None
frame_count:int = 0
frame_interval:str

def __init__(self, track):
def __init__(self, track, config:ConfigParser):
super().__init__()
self.track = track
self.frame_interval = config.defaults().get('frame_interval', '4')
if PLATFORM: sys.stdout.write("echo -en '\033[2J' \n")
else: sys.stdout.write('\033[2J')
self.ve = video_engine.VideoEngine()

async def recv(self):
self.frame_count+=1
frame = await self.track.recv()
# TODO into correct frame when we update prompt
# currently each strategy does sys.stdout.write(msg)
await self.ve.render_strategy.render_frame(frame.to_ndarray(format="bgr24")) # why dont we use render()?
if (self.frame_count % int(self.frame_interval) == 0):
await self.ve.render_strategy.render_frame(frame.to_ndarray(format="bgr24")) # why dont we use render()?
return frame
2 changes: 1 addition & 1 deletion clivrt.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ async def networktick():
def on_track(track):
logging.debug('Receiving %s' % track.kind)
if track.kind == 'video':
videotransform = videotransformtrack.VideoTransformTrack(network_mgr.remote_relay.subscribe(track)) # Create a 'proxy' around the video for transforming
videotransform = videotransformtrack.VideoTransformTrack(track=network_mgr.remote_relay.subscribe(track), config=config) # Create a 'proxy' around the video for transforming
videotransform.ve.set_strategy(vidstyle)
network_mgr.recorder.addTrack(videotransform)
# TODO: play audio track if present
Expand Down

0 comments on commit a9ba69c

Please sign in to comment.