Replies: 27 comments 36 replies
-
少し考えてみたいと思います. 以下の記述は決してmirakcにapiを追加することを拒否しているわけではありません. 現状,私自身は
のように複数のサーバーを動かしています.recmanはrecording/simple-rules.jsを改造したものとなっており, client.on('recording.stopped', async (schedule) => {
console.info(`Recording stopped: ${schedule.program.id}: ${schedule.program.name}: ${schedule.state}`);
// update metadata
await Deno.writeTextFile(
`/recording/${schedule.options.contentPath}.json`,
JSON.stringify(schedule));
if (schedule.state === 'finished') {
const job = await addTranscodeJob(client, transcodeQueue, schedule);
console.info(`Recording stopped: ${schedule.program.id}: ${schedule.program.name}: transcode#${job.id}`);
}
}); のような感じで録画終了後の処理をしています.mirakcを直接改造しなくても,別サーバーに必要なエンドポイントを追加すれば,恐らく欲しい機能は実装できるのではないかと思います. ただ,この場合はサーバーを2つ動かすことになりますし,mirakcのマウント機能を使ってフロントエンドを動かす場合,same originの制限をいくらか緩和しないといけないだろうとは思います.そう考えると,mirakcにapiを追加することには十分利点があると思われます. mirakcにapiを追加した場合,恐らく以下のような要望が自然と発生すると想像します.
これらはごく自然な要望ですし(私は必要としていませんが),実装するべきなのでしょうが,すべてをmirakcに追加していった場合,メンテできるか少し不安があります.追加するにしても,オーナー制などを導入して機能を実装した人たちだけでメンテしていけるような仕組みを作ってから追加しないと,後で面倒なことになるのではないかと少し心配です.
録画済みの情報は一時的なもので,録画後15時間が経過すると自動で削除されます.これはある種のログみたいなもの(録画完了通知みたいなもの)なので,消さなくても大丈夫ではないかと思います. |
Beta Was this translation helpful? Give feedback.
-
確かにあるといいなとは思いましたが、検索の実現には色々あるのでmirakc自体が提供する必要はないかなと思いました
これも分かるのですが、最低限にして空き容量の取得だけが出来るようになれば、クライアント側で監視して必要に応じて削除処理をしていけば良いのかなと思います(そのためにも削除APIが欲しい)
あれ、そうなんでしたっけ・・・ |
Beta Was this translation helpful? Give feedback.
-
スレッドが別れてしまったので,新たに作成します.
ファイルを1つ削除するのも2つ削除するのも同じことなので,対応は難しくないと思います. 録画用フォルダーにはmirakcが作成するファイル以外を入れないことを前提条件として,録画一覧jsonやデータベースを導入しない実装をまずは考えてみようと思います. |
Beta Was this translation helpful? Give feedback.
-
(ここまでやってきて言うのもなんですが) |
Beta Was this translation helpful? Give feedback.
-
この場合でも,
なるほど,idを使う場合,idとパスのマッピングが必要になり,結局管理ファイルが必要になるのか.
これはいいアイディアです. |
Beta Was this translation helpful? Give feedback.
-
メタデータには録画予約情報も入っているから,当然パスも入ってますね. |
Beta Was this translation helpful? Give feedback.
-
はい。ほぼschedule.jsonに入ってるうちの1レコードがファイルに切り出されたもの、というイメージでした |
Beta Was this translation helpful? Give feedback.
-
録画ファイルを手動で消されたりすると内部矛盾が発生しますが,まあ何とかなるでしょう. |
Beta Was this translation helpful? Give feedback.
-
実際の作業は作業ブランチで行います. PRを作成するので問題ないかコードレビューをお願いしたいです. |
Beta Was this translation helpful? Give feedback.
-
そうですね。jsonがあって.tsが無いときには404か500とかで返る感じでしょうか |
Beta Was this translation helpful? Give feedback.
-
確かに,それだけでいけるかもしれませんね. |
Beta Was this translation helpful? Give feedback.
-
今日はもうこれ以上返信しませんが,なにかあればいつでもここにコメントを書いてください. |
Beta Was this translation helpful? Give feedback.
-
GET系の何かで「あ、jsonがあってtsが無い状態だな」って分かるようなレスポンスになってるとやりやすいですね
リアルタイムでレスが返ってきたので助かりました!ありがとうございました! |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
とりあえずapiだけ追加しました. 実装はダミーなのでそのまま使うことはできません. 足りない機能があれば,ここでコメントしてください. |
Beta Was this translation helpful? Give feedback.
-
ありがとうございます! 録画終了前にstreamにアクセスしたときの挙動が気になりました |
Beta Was this translation helpful? Give feedback.
-
最終的には録画開始時にrecordを作成するので,録画中のデータを読み出すことも可能になります. 現状,単純にファイルをopenしてreadしていますが, |
Beta Was this translation helpful? Give feedback.
-
どうもrange requestsが謎実装になっていることがわかったので,しばらくの間は使わないでください.チケットを作ってあるので後で修正します. |
Beta Was this translation helpful? Give feedback.
-
データベースなしでrecord idがユニークであることを保証するのは面倒なので,record idの型を数値から文字列に変更しようと思います. |
Beta Was this translation helpful? Give feedback.
-
タイミングなどの問題から,recordの作成・更新・削除のイベントを別途追加します. |
Beta Was this translation helpful? Give feedback.
-
@kounoike 実験に使えるレベルまで実装が完了しました.ドキュメントやテストを追加することはあると思いますが,不具合がない限りapiが変わることはないと思います. 差分確認用に PR #2073 を作成してありますが,まだ作業は完了していません.完了したらapiなどの確認のためレビュー依頼を出します. |
Beta Was this translation helpful? Give feedback.
-
@kounoike githubでreviewerに設定するためにはメンバーとしてどこかに追加しないといけないみたいなので,とりあえずreadでmirakc/mirakcに追加してみました.この機能を使ったことがないのでわからないのですが,もしかするとteam設定とかをいじらないと無理かもしれません.あまりにも面倒な場合にはgithubの機能を使うのを諦めることにします. |
Beta Was this translation helpful? Give feedback.
-
まだ本格的に使い始めていないですが、ちょっと試したところ、「contentPathに興味がない(実体が何て名前のファイルでも良い)のに、必須項目で面倒くさい」と感じました。 |
Beta Was this translation helpful? Give feedback.
-
8f97c45 にて |
Beta Was this translation helpful? Give feedback.
-
今更で申し訳ないのですが,recordの構造を以下のように変更しようと思います. {
"id": ".."
"program": { .. },
"service": { .. },
"tags": [ .. ]
"recording": {
"options": /* record.options から移動 */,
"status": /* record.recordingStatus から移動 */,
"startTime": /* record.recordingStartTime から移動 */,
"endTime": /* record.recordingEndTime から移動 */,
"duration": /* record.recordingDuration から移動 */
},
"content": {
"path": /* record.contentPath から移動 */,
"type": /* record.contentType から移動 */,
"length": /* record.contentLength から移動 */
}
} |
Beta Was this translation helpful? Give feedback.
-
実装は終わりました. |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
(性懲りもなくまた)mirakcのフロントエンドになる録画管理アプリを作ろうとしているのですが、
録画されたTSファイルにアクセスするときにmirakcの設定やdockerのボリュームマウントなど色々と複雑になって頭を悩ませていました。
https://github.com/mirakc/mirakc/blob/main/docs/web-api.md#web-api-endpoints-for-recording ではListing/Getting metadata/Streamingの3つのAPIはout of scopeとなっていますが、この3つのAPI+削除(schedule.jsonからの削除&ファイルシステムからの削除)の機能を実装することは出来ないでしょうか?
以前タイムシフト機能を使って全録システムを構築したときは番組終了のイベントを拾って https://github.com/mirakc/mirakc/blob/main/docs/web-api.md#get-apitimeshiftrecorderrecordsrecordstream でTSファイルを取得して処理することで、mirakcとクライアント側の独立性を保ててシステムを構築しやすかったです。
同じ開発体験を通常の録画時にもしたいため、この機能の実装を検討していただけると助かります。
Beta Was this translation helpful? Give feedback.
All reactions