tags: Golang

tvfrontend and tvbackend, and say good bye to epgrec

This is my another reinventing the wheel. You can view TV program in realtime and record them.

Tl;Dr

I’ve compiled my personal project that show TV program in realtime and record them using RECPT1. This is snap-in replacement of epgrec.

Screenshots

Motivation

I had been long time user of epgrec. epgrec works well in beginning a few years, but I had to tweak some per several year because of configuration change held by broadcast station. Sometimes channel number and sid moved among satellite transponder and epgrec could not follow them. Another time some channel disappear and new channel come into list because of lineup renewal, but epgrec could not follow them. I had to tweak by hand to follow these changes.

epgrec consists of mysql(mariadb) database and some configuration file. These several configuration made me confuse which change should be applied and some try takes corruption of channel list and other thing. original EPG is divided and reformatted in order to fit among some mysql table with its own schema, but cannot reconstruct original. It results that I had to come some fresh install and re-config entire things. It behavior is confusing and hard to trace in case of wrong function. It frustrates me so much.

epgrec is made on the top of mysql, php, and some shell script. It looks stable, but also looks some old-fashioned. Today, there is many reactive web framework among there, but epgrec still stays old-fashioned CGI style web interface. It’s not cool. Some people have forked and tried to improve epgrec, but their effort goes to feature improvement such as support for 1seg-broadcast(more minor format for mobile phone) and I don’t need them.

So, I decide to walk away from epgrec and re-create another wheel for me.

Subject to resolve

These are my initial goal of this project.

  • Basic function
    • compile program guide without tweaking original EPG. In other words, when EPG changes some (eg. ch, sid changes, name of broadcaster changes, new channel comes, some channel leave), program guide will silently follow these changes. It makes me friction-less and stress-free so much because only thing I have to do is capture EPG and send it to database. the program automatically compiles the guide from original EPG in any time!
    • shows real-time video stream on web browser. This results that I can select any operating system such as Linux, Windows, Macintosh, and many minor operating system like ChromeOS as playback client. It also let me possible to send video stream to mobile device such as Android, iOS smartphone.
    • program search with keywords
    • reservation
    • full reactive behavior on the top of modern web browser and reactive framework. I don’t want to see loading animation and full change of browser document.
      • on demand program compilation
      • follow or on-demand move to current time
      • customizable channel list (ground terrestrial/bs/cs/each channel)
    • basic client identification (NOT authorization). I want for this program to send programs and video stream to multiple web browser in real time. It takes me comfortable that I can view TV program in the living room and my room simultaneously.
  • Advanced function
    • minimal configuration by hand. I want to kill configuration file and each config should be stored into browser itself instead of central database or some easy-to-crap config file.
    • keyword sensitive auto program capture
    • support for multiple bitrate video stream using MPEG Dash. It works good for rich client in my home and relatively poor device like smart phone in outside.
  • Side (and helps me so much) effect
    • my learn about modern web and api framework
    • takes back product control to myself. I won’t depend on other’s unstable product in case I use it for daily use.

Modern framework

I’ve used Vue.js, Vuex, Go, echo, and MongoDB. In short, MEAN-like framework. Number of line of codes is 3.3k. epgrec has roughly 6k lines of codes. I’ve be able to archive roughly 50% efficiency. It has some subject to improve performance and lack of function for now, but I suspect it can be improved. It efficiency does not comes from my skill but from framework improvement.

Frontend frameworks are rapidly improving now, so I may recompile some using other framework but basic reactive design will stay live for many years and document database can be migrated to another product with minimal work.

stays in private

The code is in private repository in github. I won’t publish them to public for now. This project is definitely my personal project and anyone doesn’t think to use them or improve code and contribute them. So I won’t publish temporally. This is not final decision and current thought, so I may change my thought in the future.

See you in other day !