stz2012 / recpt1 Goto Github PK
View Code? Open in Web Editor NEWPT1/PT2/PT3をLinuxで使う為の録画ツール(STZ版)
PT1/PT2/PT3をLinuxで使う為の録画ツール(STZ版)
表題の件、特定の条件で絵音データの破損が起こります。
発生条件・発生状況:
・同一TSIDを共有するチャンネルの--b25オプションによるストリームデコード中に起こる。
※スターチャンネル2&3で確認
・チャンネルAの番組が終わって番宣や次番組で音声の5.1ch/2chが切替わる
(=音声PIDが遷移する)瞬間に、チャンネルB番組で数十~数百におよぶTSの
ペイロード破損が発生し、その後回復する。
破損はペイロードのみでTSヘッダは全く異常がないため録画アプリのdrop
チェックには引っかからないが、Pegasys社TMSR6の再エンコード箇所
チェックで該当箇所が検出可能。
※破損はもしかしてデコード漏れなのかも知れません
・recpt1の出力を--b25で復号化せず、arib-b25-stream-testに渡すと破損なく
正常にデコードできることを確認。
これまでの経緯はこちらです
なお、本件は派生元であるhoneyplanet版から内在しているのではないかと思われますが
メンテが停止しているようなので、私が普段使わせていただいているこちらで報告
させていただきました。
プルリクエストの本文にバグの内容を書いていましたが、検証不足の点があったため再度検証した後 Issue として書き直しました。
recpt1 の HTTP モードにおいて --sid オプションを指定しないで起動すると、クライアントからの接続時に SIGSEGV が発生し recpt1 自身がクラッシュして落ちてしまいクライアントの接続が強制的に切断されてしまう。ただし、発生するのは地上波・BS放送のみで CS 放送の場合はクライアントによりアクセスされる URL に sid が含まれるので問題は発生しない。
[recpt1@localhost:~]$ recpt1 --b25 --http 8080
using B25...
creating a http daemon
run as a daemon..
pid = 11269
listening at port 8888
connect from: NONAME [10.1.1.212] port 39356
request command is GET /101 HTTP/1.1
channel is 101
ただし、接続 URL が CS 放送の場合(例 http://localhost:8888/CS4/100 )のように sid が URL に含まれているとエラーが発生せずに接続できる。また、起動時のオプションで以下のように指定すれば URL で指定されなかった場合のデフォルトの sid として使用されるので問題は発生しない。
[recpt1@localhost:~]$ recpt1 --b25 --sid hd --http 8080
ログを見ると録画時間が86399secとあり録画はされているのですが、録画されたデータを確認すると放送停止の画面(カラーバー)が表示された以降データを確認することができませんでした。
ffmpegでその時間以降切り出してみましたが再生できませんでした。
他の放送局(Eテレとテレビ東京)で放送停止時間があったので放送停止時間を含むよう録画しましたがそちらはデータが正常に再生されていることを確認しています。
放送停止中も録画できるようにするコマンドオプションなどあれば教えていただけますでしょうか。
以下にログなどを記載させていただきます。
録画コマンド
recpt1 --b25 --device /dev/px4video3 --sid 56336 31 86399 date "+%Y%m%d_%H%M%S"
.m2ts
ログ
b25->put failed
b25_decode failed (code=-4). fall back to encrypted recording.
Rescan PID
PMT reading..
PMT reading..
同一メッセージ
Recorded 86399sec
using B25...
using device: /dev/px4video3
pid = 2841305
device = /dev/px4video3
C/N = 32.521852dB
Recording...
Available sid = 56336 56337 56720
Chosen sid = 56336
Available PMT = 0x1f0 0x2f0 0x1fc8
バージョンなど
$ uname -a
Linux recclient0101 5.8.0-50-generic #56~20.04.1-Ubuntu SMP Mon Apr 12 21:46:35 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
$ recpt1 -version
recpt1 rev.39 by stz2012
recorder command for PT1/2/3 digital tuner.
channelが変わってしまったので、修正が必要だと思います。
Docker によるコンテナ化を試みてイメージ作成をしていたところ、ベースイメージが Alpine Linux 5.3 の場合にビルドできない問題に遭遇しました。調べて見たところ軽量化のために、標準Cライブラリに musl を使っているのが原因のようです。他にも Rasberry Pi の一部のディストリビューションや、組み込み環境で使われているようで、他の環境でも同様の問題が発生していると思われます。
[recpt1@localhost:~]$ docker run --rm -it alpine:3.5 /bin/sh
/ # apk add --update build-base git autoconf automake
/ # mkdir -p /usr/local/src
/ # git clone https://github.com/stz2012/recpt1.git /usr/local/src/recpt1
/ # cd /usr/local/src/recpt1/recpt1
/usr/local/src/recpt1/recpt1 # ./autogen.sh
/usr/local/src/recpt1/recpt1 # ./autogen.sh ./configure
/usr/local/src/recpt1/recpt1 # make
revh="`git rev-list HEAD | wc -l 2> /dev/null`"; \
if [ -n "$revh" ] && [ "$revh" != "0" ] ; then \
echo "const char *version = \"rev.$revh by stz2012\";" > version.h; \
else \
echo "const char *version = \""c8688d7d6382_with_http_server_RC4 by stz2012"\";" > version.h; \
fi
gcc -MM recpt1.c decoder.c mkpath.c tssplitter_lite.c recpt1core.c recpt1ctl.c recpt1core.c -I../driver -Wall -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 > .deps
gcc -O2 -g -pthread -I../driver -Wall -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -c -o recpt1.o recpt1.c
In file included from recpt1.c:33:0:
recpt1core.h:53:16: error: redefinition of 'struct msgbuf'
typedef struct msgbuf {
^~~~~~
In file included from recpt1.c:24:0:
/usr/include/sys/msg.h:42:8: note: originally defined here
struct msgbuf {
^~~~~~
make: *** [<builtin>: recpt1.o] Error 1
// CH11
{ 5, CHTYPE_SATELLITE, 0, "231"}, /* 231ch:放送大学ex /
{ 5, CHTYPE_SATELLITE, 0, "232"}, / 232ch:放送大学on /
{ 5, CHTYPE_SATELLITE, 1, "251"}, / 251ch:BS釣りビジョン */
tssplitter_lite.c#L688-L689のunsigned charをunsigned shortに変更する必要があります。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.