Skip to main content

Tedshd's Dev note

miiiTV for Samsung Smart TV

Table of Contents

# miiiTV for Samsung Smart TV

## Time 4~5 week(20 days)

appInfo = {
	did: <did>,
  secretCode: <secret code>
}
  • 儲存 user data uid.data
uid = ['<uid 1>', '<uid 2>'];
  • 儲存每個 Channel 播放的影片與時間 <uid>/channelLog.data
channelLog = {
	<pid>: {
		videoCount: 0,
		t: 200
	}
};
  • server & browser keep connect(polling or long polling)
  • error handle
    • app load(network, API server, check reg, check did)
  • 處理 channel 為空的情況

## TV UI

  • 音量 SOD (1 day)
  • 退出 confirm (1 day)
  • 按鍵控制資訊
  • Menu 選台(已有初版,需優化)
  • Channel sort by number
  • 數字鍵轉台 (3 day)
    • 在建立 menu 時在建一個新結構
var channelsNumber = {
	100: {
		pid: <pid>,
		title: <channel name>
	},
	200: {
		pid: <pid>,
		title: <channel name>
	},
	201: {
		pid: <pid>,
		title: <channel name>
	}
};
  • 方向鍵選 video (已有初版)
  • Video List (已有 prototype) (1 day)
  • binding page(ping code)

## Server-side

  • 過濾影片內容,排除只能 Flash Player 播放的影片
  • v2 API:media$content 需要有 1, 5, 6 三種格式

## flow

使用者第一次進入 確認是否註冊

  • 沒註冊過

app info(partner, brand, model, lang) to server get did 要 pre-share key 註冊帶 appinfo, re-share key(json format 用 base64)

  • 註冊過
function checkRegistration() {
	if(!reg) {
		// bind app
		checkRegistration();
	} else {
		startApp();
	}
}
checkRegistration();

function startApp() {
	// start do something
  // check did to get default channel
  // get user channel
  // build channel data(menu video number)
  // videoSelect(open update)
  // menuSelect(open update)
  // bind user(get new user channel)
  // load videos(after select channel, number switch channel)
  // load player
}

## pin code

TV(sync app) - request(did) -> API server(gen pin code) - response -> TV(show pin code) TV(polling) - request(polling)(check pin code) -> API server App(input pin code) - request(pin code) -> API server(check pin code)

### UI control

  1. welcome view

welcomeState: 0

  1. load view

  2. setting view

settingStatus: 0

  1. Menu UI

menuStatus: 0

  1. Video list UI

videoListStatus: 0

  1. control info UI

infoStatus: 0

  1. channel info UI

channelInfo: 0

## key

  • red(playlist)

  • green(ch_info, control_info)

  • yellow(setting view like box)

  • blue(menu)

## 20 days

影片快轉與倒轉

在 Video Info 出現:影片播放時間軸,台長大頭貼與名字

多位使用者列表同步與切換

訂閱頻道被台長設為私人頻道的訊息

訂閱頻道被台長刪除的訊息

記住所有頻道最後看的影片與時間

Page 4-8:menu 的最下方多一個 “更多頻道”

Playlist一次移一列

Page 4-9 :影片格式或直播訊源為 html5 不支援格式,要有額外處理 Page 4-10:目前無法判定頻道內含 html5 不支援格式,待討論替代方案

播放中遇到網路中斷機制

## Bind users

### API

/tvservice2/device/unbind ‘did’ ‘uid’

/tvservice2/device/getAllProfileInfo ‘did’

save current user uid

save last bind user data show in setting

setting userslist sort uew -> old

usersChannelLists = {
	<uid>: {
  	<channels number>: {
    	pid: '<pid>',
      title: '<channel title>'
    }
  }
	16: {
  	200: {
    	pid: 1324,
      title: 'channel name'
    },
    201: {
    	pid: 1999,
      title: 'name'
    }
  }
  40: {
  	200: {
    	pid: 2003,
      title: 'video title'
    },
    203: {
    	pid: 4032,
      title: 'title name'
    }
  }
}

Users data

Main.users = {
	<uid>: {
  	uid: <uid>,
    name: '<user name>',
    img: '<image url>'
  },
  16: {
  	uid: 16,
    name: 'Ted',
    img: 'image url'
  }
}

### Flow

解除綁定會切回上一個使用者列表的使用者直到沒有使用者成為預設頻道 綁定後 channel list 與 menu 為新綁定的使用者 綁定使用者後維持播原本的 channel, 但頻道上下轉台為新綁定使用者的 channel(第一個 channel 或 最後一個 channel) 設定頁的使用者列表大頭貼與名字為當前使用者的名字與大頭貼 menu 切換 focus 會維持在同樣位置, 但 focus 在最後一個 channel 時, 由 channel 多的 user 切到 channel 少的 user 時會切到最後一個 channel

## 記憶 channel 最後播放的影片和時間

Main.usersChannelsLog = {
	<uid>: {
  	<pid>: {
  		breakVideo: <youtube hash>,
    	breakTime: <number sec>
    }
  }
}