## 目次
- プロジェクト概要
- 期間
- 課題
- 課題1. JavaのモジュールをKotlinで利用する際の不具合
- 課題2. 降雨時の放送に関する設計/検討
- その他の業務内容
---
## プロジェクト概要
【業務】
日本向けに発売するAndroidテレビの放送再生部分に
関する設計/検討/プロトタイプの作成に携わりました。
開発手法として、アジャイルが採用されており、
スプリント毎に振り返りを行いながら、作業を行っていました。
---
## 期間
2021/04 ~ 2022/03
---
## 課題1. JavaのモジュールをKotlinで利用する際の不具合
### 課題の詳細
Javaで記載された再生モジュールの関数
Kotlinから呼び出すとき、nullを許容した型を引数として渡したとき、
warningが出てしまう問題がありました。
### 取り組み
モジュールの中身を確認し、原因の特定を行いました。
再生モジュールの公式ドキュメントは[こちら](https://developer.android.com/guide/topics/media/exoplayer?hl=ja
)です。
### 成果
原因の特定ができました。
原因としてはJavaモジュール内で設定されていたAnnotationが原因で、
Kotlinから関数が呼ばれたときに、
すべてnullを許容しない型で呼ばれるように設定されていました。
---
## 課題2. 降雨時の放送に関する設計/検討
### 課題の詳細
日本の放送規格には、放送波を伝送する2種類の
周波数の階層が設定されています。
高階層は伝送効率が良い代わりに、ノイズに弱く、
低階層は伝送効率が悪い代わりに、ノイズに強い性質があります。
ほとんどの番組は高階層で送出されていますが、
一部の番組は高階層/低階層の両方で送出されているものもあります。
通常時は、高階層の放送波を再生し、
降雨時などの受信状態が悪い環境では、
低階層の放送波を再生する必要があります。
### 取り組み
Aribドキュメントからの仕様確認
前世代のコードからの処理の確認を経て、
シーケンス図やクラス図の作成を行いました。
### 成果
作成資料をもとに、プロトタイプの実装を進めることができました。
このプロトタイプが、実放送を用いた検証に利用されました。
---
## その他の業務内容
#### 再生モジュールの調査/検討
Android Open Source Projectの再生モジュールを用いて、
動画の再生や、動画/音声の切り替え時の挙動をコードを追いながら、調査しました。
また、前世代の組み込みソフト(C#)の実態調査も並行して行いました。
[再生モジュールについて](https://developer.android.com/guide/topics/media/exoplayer?hl=ja)
---
#### 放送規格の理解
日本向けのテレビ放送アプリを作るにあたって、放送規格の学習が必要でした。
そのため、規格の標準化を行なっている電波産業会の仕様書を確認し、
自分の担当箇所だけにはなりますが、理解を深めることができました。
[仕様書の参考](https://www.arib.or.jp/kikaku/kikaku_hoso/hoso_kikaku_number.html)
---
#### 設計/検討
上記の2つのタスクで学んだことを活かして、設計/検討を行いました。
クラス図や状態遷移表、シーケンスを作成して、様々なパターンの放送時の検討を進めました。
---
#### プロトタイプの実装
設計/検討を踏まえて、放送再生のためのプロトタイプの作成を行いました。
コードはGerritで管理し、チーム内レビューを行いながら、実装を進めていきました。
Nullの扱いやAnnotation, Kotlin Coroutineなどの接続面でたびたび、問題が発生しました。
その都度、解決策を2~3つを用意し、Pros&Consを出して、打ち合わせに臨みました。
---