mpegtsプレゼンテーションタイムスタンプを作成しようとしています。これは5バイトの長さです。私はVLCプレーヤーのソースコードに解決策を見つけました。Javaでバイト配列にビットを書き込むにはどうすればよいですか?
bits_write(&bits, 4, i_pts_dts); // '0010' or '0011'
bits_write(&bits, 3, i_pts >> 30);
bits_write(&bits, 1, 0x01); // marker
bits_write(&bits, 15, i_pts >> 15);
bits_write(&bits, 1, 0x01); // marker
bits_write(&bits, 15, i_pts);
bits_write(&bits, 1, 0x01); // marker
i_header_size -= 0x5;
これは、40ビットから5バイトを収集する必要があることを意味します。これは、次のようになります(C言語コード)。 たとえば、2350の10進数から5バイトが必要です。バイナリビュー:
0010 000 1 000000000000000 1 000100100101110 1
六角ビュー:私はJavaでそれを行うことができますどのように
21 00 01 12 5D
VLC操作後
私はこのバイナリビューを持っている必要がありますか?
またGitHubでJavaソリューションが見つかりました:https://github.com/taktod/myLib/blob/master/myLib.MIT/myLib.container.mpegts/src/main/java/com/ttProject/container/mpegts/field/PtsField.java しかし、この実現は難しすぎます。 1回の操作のために、などのビット1、ビット2、ビット3、のようにあまりにも多くのヘルパークラスを作成する必要がある...
あなたの入力がマップをビット方法を決定出力バイトに、例えば紙に書いてから、[Javaビット操作演算子](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html)を使用してその結果を作成します。 – Andreas
@Andreas、私はビット操作演算子について知っています。例えば、私はStringで40ビットを処理することができ、longに変換した後にはlongに4バイトのサイズがあります。 Doubleには8バイトがあります。しかし、私は5バイトにする必要があります。どうすればいいのか分かりません。 – Virkom