Code Monkey home page Code Monkey logo

libarib25's Introduction

libarib25 (STZ版)

Build Status Build Status License

STZ版について

オリジナルのコードは、茂木 和洋 (MOGI, Kazuhiro) 氏によって「ARIB STD-B25 仕様確認テストプログラムソースコード」という名称で Windows 向けに開発され VisualStudio(Visual C++)をターゲットに開発されました。

後に、有志の手により libarib25 として Linux でビルド可能なパッチが書かれ、同時期に複数の無名の開発者により 2ch 等で公開されましたが、その後時間の経過とともに機能改善が散逸的に行われていったため、パッチをかき集めないとビルドするのが難しい状態となっていました。

このソフトウェアは、これらの無名の開発者の成果を Github のリポジトリにまとめ上げたものがベースとなっています。

Linux に移植された libarib25 ですが、元々 Windows 上の VisualStudio で書かれたコードであるため、Windows でも同一のコードベースにより DLL ファイル等をビルドできるようにするため、ビルドシステムを CMake に移行し、再度 Windows をサポート。macOS X のサポートや、Raspberry Pi 等の ARM 環境のサポート。オプションで Intel の AVX2, ARM の NEON 等 SIMD による MULTI2 復号処理に対応するなどより幅広い環境をサポートするよう改良が加えられています。

また、ライセンスが不明瞭であったことによる不便さを解消する目的でコミュニティの同意のもと Apache License 2.0 に移行していますが、オリジナルの作者である 茂木 和洋 氏はじめ無名の有志の方々の著作権は消失していないことにご留意下さい。詳しくは、NOTICE ファイルを参照下さい。また 免責事項 もあわせて参照してください。

ビルド方法

Linux

依存関係のインストール

事前にビルドに必要な開発環境及びライブラリをインストールします。

Ubuntu
sudo apt-get install build-essential pkg-config git cmake libpcsclite-dev
Redhat
sudo dnf install "@Development tools" gcc-c++ cmake pcsc-lite-devel

ソースコードの取得とビルド

ソースコードを GitHub から取得します。

git clone https://github.com/stz2012/libarib25.git
cd libarib25

ビルド用のディレクトリを作成しcmake コマンドを実行しビルドに必要なコンフィグファイルを生成します。この際、cmake コマンドにオプションとしてビルドオプションを指定することができます。詳細は ビルドオプション の項を参照してください。何も指定しない場合デフォルトの設定でコンフィグファイルを生成します。

cmake コマンドを実行するフォルダは build 以外の任意の名前で構いません。ビルドオプションを変えて異なるバイナリを生成したい場合等には、別の名前のフォルダを作っておくと異なる設定でのビルドを互いに影響を及ぼすことなく独立して管理できます。

mkdir build
cd build

cmake ..

正常にコンフィグファイルが生成されると、デフォルトでは GNU make 用の Makefile が同時に生成されます。下記のように make コマンドを実行するとビルドが始まります。

make

ビルドが正常に完了すると libarib25.sob25 コマンドが生成されるので、システムにこれらのライブラリや実行ファイル、ヘッダーファイル一式をインストールするには、下記のように管理者権限で make install を実行してください。

sudo make install

下記のように b25 コマンドを実行しヘルプメッセージが表示されれば正常にインストールが完了しています。

b25
b25 - ARIB STD-B25 test program version stz-0.2.5 (v0.2.5-20190204-20-gbfc502d)
  built with GNU 9.4.0 on Linux-5.10.76-linuxkit
usage: b25 [options] src.m2t dst.m2t [more pair ..]
options:
  -r round (integer, default=4)
  -s strip
     0: keep null(padding) stream (default)
     1: strip null stream
  -m EMM
     0: ignore EMM (default)
     1: send EMM to B-CAS card
  -p power_on_control_info
     0: do nothing additionally
     1: show B-CAS EMM receiving request (default)
  -v verbose
     0: silent
     1: show processing status (default)
  -V, --version
     show version
  -h, --help
     show this help message

Windows

VisualStudio

依存関係のインストール

VisualStudio 2019 以上の場合
  • VisualStudio 2022
    ワークロードから 「C++ によるデスクトップ開発」を選択してインストールします。
VisualStudio 2017 以前の場合

VisualStudio 2017 以前では、VisualStudio の他に Git for Windows を手動でインストール必要があります。

  • VisualStudio 2017
    ワークロードから 「C++ によるデスクトップ開発」を選択してインストールします。

  • Git for Windows
    上記リンクより Git for Windows をダウンロードしインストールします。

VisualStudio 2015 以前の場合

VisualStudio 2015 以前の場合 CMake が統合されていないため、Git for Windows に加えて CMake もインストールする必要があります。

  • VisualStudio
    ワークロードから 「C++ によるデスクトップ開発」を選択してインストールします。
  • Git for Windows
    上記リンクより Git for Windows をダウンロードしインストールします。
  • CMake
    上記リンクより最新の Windows 版 (msi) パッケージをダウンロードしインストールします。

ソースコードの取得

VisualStudio 2019 以上の場合

VisualStudio を起動後のスタート画面右側「開始する」から「リポジトリのクローン」を選択し、リポジトリの場所に Github のリポジトリ URL を入力するとソースコードを取得することができます。

VisualStudio 2017 以前の場合

Git for Windows の bash シェルを起動し、Github のリポジトリを手動でクローンします。

mkdir -p ~/source/repos/
cd ~/source/repos

git clone https://github.com/stz2012/libarib25.git

ソースコードのビルド

VisualStudio 2019 以上の場合

VisualStudio ビルトイン機能でクローンした場合は、右側のソリューションエクスプローラから「フォルダービュー」をダブルクリックするとプロジェクトを開くことができます。VisualStudio に統合された CMake により自動でビルドに必要な設定ファイルが生成されるので「ビルド」メニューより「全てビルド」を選択することでビルドすることができます。

VisualStudio 2017

VisualStudio 2017 の場合は、VisualStudio 起動後「ファイル」メニューから「開く」→「フォルダ」を選択し、ソースコードの取得でクローンしたフォルダを選択し開きます。VisualStudio 2017 では CMake が統合されているため、フォルダを開いた後 VisualStudio 2019 以上と同様に CMake により自動で設定ファイルが構成されます。「ビルド」メニューより「全てビルド」を選択しビルドしてください。

VisualStudio 2015 以前

VisualStudio 2015 以前の場合は、CMake が統合されておらず手動で VisualStudio のソリューションファイルを生成する必要があります。

CMake GUI を起動します

  1. 「where is the source code」欄右側の「Browse source...」ボタンを選択し、ソースコードの取得でクローンしたパスを指定します
  2. 「where to build the binaries」欄にソリューションファイルの生成するディレクトリを指定します
    1 の手順で指定したディレクトリの配下に build 等の名前でディレクトリを生成し指定することを推奨しますが、1 で指定したパスと同じでも構いません。
  3. 「Configure」ボタンを押す
    「CMakeSetup」画面が表示されるので、「Specify the generator for this project」欄より該当する VisualStudio のバージョンを選択し「Finish」ボタンを押します。
    正常に完了すると CMake GUI の下部ログ画面に「Configure done」と表示されます。
  4. 「Generate」ボタンを押して VisualStudio のソリューションファイルを生成します。

手順 2 で指定したディレクトリにソリューションファイル (.sln) ファイルが生成されているので、VisualStudio で開きます。「ビルド」メニューより「ソリューションのビルド」を選択することでビルドすることができます。

ビルドオプション

コンパイラの指定

既定では CMake によりシステムにインストールされているコンパイラが自動で検出されます。クロスコンパイルをしたい場合や、何らかの理由で別のコンパイラを使用したい場合には下記のように指定することで使用するコンパイラを変えることができます。

例) コンパイラとして clang を使用する場合

cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang ..

PC/SC ライブラリの指定

既定では各 OS における PC/SC の API やライブラリを自動で検出しリンクします。Linux では libpcsclite、Windows では WinSCard (winscard.dll)、macOS X では winscard にリンクされます。

Option Default
WITH_PCSC_PACKAGE libpcsclite
WITH_PCSC_LIBRARY

WITH_PCSC_PACKAGE に pkg-config が認識するパッケージ名を入力すると、自動でインクルードパスの設定及びリンクを行うように構成します。このオプションを使用することで、PC/SC 互換のサードパーティライブラリとリンクすることができます。ただし、この方法は pkg-config 用設定ファイル(拡張子 .pc)のファイルが提供されていること、pkg-config のインクルードパス以外に展開サれている場合は環境変数 PKG_CONFIG_PATH を事前に通しておく必要があります。

例) libpcscmod という名前の PC/SC 互換ライブラリとリンクする場合。

PKG_CONFIG_PATH=/usr/local/lib/pkgconfig  cmake -D WITH_PCSC_PACKAGE=libpcscmod ..

サードパーティのライブラリが pkg-config 形式の設定ファイルを提供していない場合は、ライブラリ名を入力することでシステムから探索し自動でリンクするように構成します。ただし、事前にシステムに libpcsclite パッケージがインストールされていると優先的に WITH_PCSC_PACKAGE で指定された pkg-config 形式のライブラリ設定が読み込まれるためこれを無効にする必要があります。

例) pkg-config がデフォルトで検出する libpcsclite を無効化し libpcscmod にリンクする場合。

cmake -DWITH_PCSC_PACKAGE=NO -DWITH_PCSC_LIBRARY=pcscmod ..

一般的なディレクトリ以外にインストールされたライブラリの場合自動で検出されます。クロスコンパイル等で特殊なディレクトリを参照させたい場合は CMAKE_FIND_ROOT_PATH を指定する必要があるかもしれません。

オプション機能

UNICODE 対応(Windows のみ)

デフォルトで ON になっています。コマンドラインで日本語を含むファイルパスを指定する場合、UNICODE 対応を ON の状態でビルドする必要があります。無効化するメリットはありませんが、何らかの理由で無効化したい場合は -DUSE_UNICODE=OFF と指定してビルドすることができます。

Option Default
USE_UNICODE ON

SIMD 対応

それぞれ -DUSE_AVX2=ON, -DUSE_NEON=ON とすることで有効化できます。NEON については、Windows 以外の ARM CPU (現時点では リトルエンディアンのみ)に対応。

Option Default
USE_AVX2 OFF
USE_NEON OFF Windows は未対応

ARM CPU は、バイエンディアンですが Raspberry Pi 等の既定ではリトルエンディアンとなっているはずなので多くの場合問題にはなりません。ビッグエンディアン環境で NEON を有効化しビルドしようとするとエラーになります。

免責事項

本ソフトウェアは現状有姿で提供され、明示であるか暗黙であるかを問わず、いかなる保証も致しません。ここでいう保証とは、商品性、特定の目的への適合性、および権利非侵害についての保証も含みますが、それに限定されるものではありません。作者または著作権者は、契約行為、不法行為、またはそれ以外であろうと、ソフトウェアに起因または関連し、あるいはソフトウェアの使用またはその他の扱いによって生じる一切の請求、損害、その他の義務について何らの責任も負わないものとします。

ライセンス

このソフトウェアは Apache License 2.0 の下で提供されます。

参考

libarib25's People

Contributors

eru avatar eternalharvest avatar kazuki0824 avatar kazuohagihara avatar mittyorz avatar noriy avatar pinterior avatar stz2012 avatar uru2 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

libarib25's Issues

ライブラリのインストール先について

現状のライブラリのインストール先はlibになっていますが, ディストリビューションによっては正しいlib32やlib64にインストールされないようなものが出てきました.
https://wiki.gentoo.org/wiki/Project:AMD64/Multilib_layout
そこでシンボリックリンクを介さずに適切なパスを指定するため, cmakeのGNUInstallDirsを使用したいのですが, cmakeのバージョンアップは可能でしょうか?

cmakeでのldconfigの実行について

度重なるissue申し訳ありません
どうしてもcmake内でのldconfigの実行が必要でしょうか?
もしそうならoptionでldconfigの実行を選択できるようにしていただけないでしょうか?
必要でない場合cmakeでのldconfigを削除し, build.sh, build.batを経由してビルドするようにしていただけないでしょうか?
ldconfigはユーザーが叩くかshで呼ぶものだと考えていましたが, マルチプラットフォームやライトユーザー向けの配慮, 歴史的経緯があるなど, 理由がある場合は教えていただけると幸いです.

ライセンスについて

このソフトウェアのライセンスは独自のものですが一般的なライセンスへの変更予定などはないでしょうか?

READMEを更新する

現状、READMEでビルドの手順が説明されていません。
派生元のREADMEを残す意義は少ないと思いますので、ファイルをリネーム(例えばREADME_orig.md)した上で、新たなREADMEを作り、そこにビルドの手順を記述してはどうでしょうか。

ldconfig を実行すると libarib25.so.0 がデグレてしまう可能性がある問題

ldconfig を実行すると libarib25.so.0 がデグレてしまう問題

私が以前書いた CMake へのマイグレーションパッチがそもそもの原因です。大変ご迷惑をおかけて申し訳ありません。ごめんなさいm(_ _)m。症状としては、ldconfig コマンドを実行すると意図せずして古いライブラリにリンクされる可能性があという問題です。

以前取り込んでいただいたチェンジセット以降 libarib25.so の機能自体にはほとんど変更がなく、仮にデグレてしまったとしても現時点では実害はほぼないと思います。
また、前回の CMake マイグレーションパッチでは make install を実行しても ldconfig が自動で実行されることはありません。また、CMake の機能によりインストール時点では適切にシンボリックリンクが張られるため問題は発生しません。

問題が発生するのは、過去に libarib25 をインストールしたことがある環境で、新たに最新の libarib25 を
インストールした後 ldconfig を実行した場合のみです。ldconfig が実行されるまで問題が発覚しない恐れもあり、問題の発見が遅れる可能性があるので注意が必要です。

再現方法

以前に libarib25 をインストールしたことのある環境などで、すでに libarib25.so.0.2.5 ファイルが以下のように存在している状態を想定します。

ubuntu@localhost:~$ ls -l /usr/local/lib
lrwxrwxrwx 1 root root     14  6月  7 02:20 /usr/local/lib/libarib25.so -> libarib25.so.0
lrwxrwxrwx 1 root root     22  6月  7 02:30 /usr/local/lib/libarib25.so.0 -> libarib25.so.0.2.5
-rwxr-xr-x 1 root root 179392  6月  7 02:11 /usr/local/lib/libarib25.so.0.2.5

CMake に移行後のリビジョンを Git でチェックアウトしてビルドする。

ubuntu@localhost:~$ mkdir ~/work/
ubuntu@localhost:~/work$ git clone https://github.com/stz2012/libarib25.git
ubuntu@localhost:~/work$ cd libarib25
ubuntu@localhost:~/work/libarib25$ git checkout 741377f65a7ca1482e47d78cfecc8f3d5802b537

ubuntu@localhost:~/work/libarib25$ mkdir build
ubuntu@localhost:~/work/libarib25$ cd build
ubuntu@localhost:~/work/libarib25/build$ cmake ..
ubuntu@localhost:~/work/libarib25/build$ make
ubuntu@localhost:~/work/libarib25/build$ sudo make install

この時点で /usr/local/lib 配下は以下のようになっている。

ubuntu@localhost:~$ ls -l libarib*
-rw-r--r-- 1 root root  45176  6月  7 02:30 libarib25.a
lrwxrwxrwx 1 root root     14  6月  7 02:20 libarib25.so -> libarib25.so.0
lrwxrwxrwx 1 root root     22  6月  7 02:30 libarib25.so.0 -> libarib25.so.stz-0.2.5
-rwxr-xr-x 1 root root 179392  6月  7 02:11 libarib25.so.0.2.5
-rwxr-xr-x 1 root root  45424  6月  7 02:30 libarib25.so.stz-0.2.5

CMake の機能によってシンボリックリンクは今回インストールした libarib25.so.stz-0.2.5 に向けられている。これは正しい状態ですが、CMake の機能によって偶然にも正しい状態になっているだけです。
この状態で、以下のように ldconfig を実行する。

ubuntu@localhost:~$ sudo ldconfig

/usr/local/lib 配下のシンボリックリンクが ldconfig により更新され、旧バージョンに向いてしまう。依然として libarib25.so.0 にリンクされている b25 コマンドやその他のアプリケーションは現在のところ正常に動作し続けるが、このまま状態は将来的にあまり良くない結果を招くかもしれない。また、もとからあった libarib25.so.0.2.5 が著しく古い場合等では意図せずして古いバージョンを使用し続けることになるので注意が必要です。

ubuntu@localhost:~$ ls -l libarib*
-rw-r--r-- 1 root root  45176  6月  7 02:30 libarib25.a
lrwxrwxrwx 1 root root     14  6月  7 02:20 libarib25.so -> libarib25.so.0
lrwxrwxrwx 1 root root     18  6月  7 03:36 libarib25.so.0 -> libarib25.so.0.2.5
-rwxr-xr-x 1 root root 179392  6月  7 02:11 libarib25.so.0.2.5
-rwxr-xr-x 1 root root  45424  6月  7 02:30 libarib25.so.stz-0.2.5

原因

この問題の根本原因は、CMake マイグレーションパッチでバージョン情報を表示する部分でいわゆるバージョンを明確にするために、stz- プレフィックスをつけたことによる副作用で、共有ライブラリの名前にも stz- が付いてしまったことによります。
これによって ldconfig が解釈できないバージョン名となってしまったため、libarib25.so.0 のリンクが ldconfig の解釈できる最も最新のバージョンに向いてしまうこととなったということのようです。

進捗状況

現在、パッチを書いて検証中です。できるだけはやく修正をプルリク出したいと思います。

x86_64とi386以外のアーキテクチャでビルド不可

Raspberry Pi 3にてビルドを試みましたが、version.c のアーキテクチャ確認処理で引っかかりビルドが出来ませんでした。

デバッグ情報を表示するように変更(デバッグビルド時のみ)時点ではビルドが可能ですが、ビルド時にバージョン情報を埋め込むように変更からx86_64とi386以外のアーキテクチャでビルドができなくなっています。

pi@raspberrypi:~/.builds/libarib25/cmake $ make
Scanning dependencies of target arib25-objlib
[ 11%] Building C object CMakeFiles/arib25-objlib.dir/src/arib_std_b25.c.o
[ 22%] Building C object CMakeFiles/arib25-objlib.dir/src/b_cas_card.c.o
[ 33%] Building C object CMakeFiles/arib25-objlib.dir/src/multi2.c.o
[ 44%] Building C object CMakeFiles/arib25-objlib.dir/src/ts_section_parser.c.o
[ 55%] Building C object CMakeFiles/arib25-objlib.dir/src/version.c.o
/home/pi/.builds/libarib25/src/version.c:10:6: error: #error architecture not supported!
 #    error architecture not supported!
      ^
CMakeFiles/arib25-objlib.dir/build.make:158: recipe for target 'CMakeFiles/arib25-objlib.dir/src/version.c.o' failed
make[2]: *** [CMakeFiles/arib25-objlib.dir/src/version.c.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/arib25-objlib.dir/all' failed
make[1]: *** [CMakeFiles/arib25-objlib.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2

Tvheadend + libarib25について

お力を貸してください。
今 Docker (Alpine)で Tvheadend という録画サーバーを使用しています。
フルセグで見れないのでカードリーダー&B-CASカードを用意して、libarib25 をインストールしましたが、まだ見れないです。
pcsc_scan を実行してみたのですが、問題なくカードの読み込みができています。

コンテナに入って以下のコマンドでインストールしました。

git clone https://github.com/stz2012/libarib25.git
cd libarib25
cmake -DLDCONFIG_EXECUTABLE=IGNORE ./
make
make install

[ 55%] Built target arib25-objlib
[ 66%] Built target arib25-shared
[ 77%] Built target arib25-static
[100%] Built target b25
Install the project...
-- Install configuration: "Release"
-- Up-to-date: /usr/local/bin/b25
-- Up-to-date: /usr/local/lib64/libarib25.a
-- Up-to-date: /usr/local/lib64/libarib25.so.0.2.5
-- Up-to-date: /usr/local/lib64/libarib25.so.0
-- Up-to-date: /usr/local/lib64/libarib25.so
-- Up-to-date: /usr/local/include/arib25/arib_std_b25.h
-- Up-to-date: /usr/local/include/arib25/b_cas_card.h
-- Up-to-date: /usr/local/include/arib25/multi2.h
-- Up-to-date: /usr/local/include/arib25/ts_section_parser.h
-- Up-to-date: /usr/local/include/arib25/portable.h
-- Up-to-date: /usr/local/include/arib25/arib25_api.h
-- Up-to-date: /usr/local/lib64/pkgconfig/libarib25.pc

libarib25 のインストール方法については参考になるサイトがいくつかあったのですが、上記のコマンド以外は特に皆何もしていないので、上記のコマンドと別で何か実行する必要がありますか?

b25コマンドに --version オプションを実装する

現在、引数なしで実行した際に表示される文言から

b25 - ARIB STD-B25 test program version stz-0.2.5 (v0.2.5-20180204)
built with GNU 10.2.1 on Linux-5.10.0-8-amd64

という部分を取り除き、代わりに--versionをつけて実行した際に表示することを提案します。
短い別名は、大文字の-Vでどうでしょうか。

進行状況のパーセント表示について

サイズが2GBを超えるファイルの変換時、進行状況のパーセント表示が正しくない件について、
td.cの282行目の
m = (int)(10000offset/total);
を、
m = (int)((uint64_t)10000
offset/total);
と修正すれば直るようです。
Linuxで確認しました。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.