2012年2月17日 星期五

H264 over RTP

http://my-tech-knowledge.blogspot.com/2008/02/rfc-3984-rtp-payload-format-for-h264.html

2012年2月14日 星期二

cross build curl for arm with ipv6, openssh, libssl2

zlib (1.2.5) 官網:http://zlib.net/
build steps
CROSS_PREFIX=arm-none-linux-gnueabi- ./configure --shared --prefix=/home/shaw/work/qemu/src/busybox-1.19.3/_install/usr

make
make install
openssl(1.0.0e) 官網:http://www.openssl.org/
build steps
./Configure linux-armv4 zlib-dynamic shared --prefix=/home/shaw/work/qemu/src/busybox-1.19.3/_install/usr --cross-compile-prefix=arm-none-linux-gnueabi- --with-zlib-include=/home/shaw/work/qemu/src/busybox-1.19.3/_install/usr/include --with-zlib-lib=/home/shaw/work/qemu/src/busybox-1.19.3/_install/usr/lib

make
make install
libssh2(1.4.0) 官網:http://www.libssh2.org/
build steps
./configure --host=arm-none-linux-gnueabi --prefix=/home/shaw/work/qemu/src/busybox-1.19.3/_install/usr --with-openssl --with-libz --with-libssl-prefix=/home/shaw/work/qemu/src/busybox-1.19.3/_install/usr --with-libz-prefix=/home/shaw/work/qemu/src/busybox-1.19.3/_install/usr

make
make install
curl & libcurl(7.23.1) 官網:http://curl.haxx.se/
build steps
./configure --host=arm-none-linux-gnueabi --prefix=/home/shaw/work/qemu/src/busybox-1.19.3/_install/usr --enable-ipv6 --with-ssl=/home/shaw/work/qemu/src/busybox-1.19.3/_install/usr --with-libssh2=/home/shaw/work/qemu/src/busybox-1.19.3/_install/usr

make
make install
備註:openssh安裝
openssh (5.9p1) 官網:http://www.openssh.com/
build steps
./configure --host=arm-wrs-linux-gnueabi --with-zlib=/home/shaw/work/qemu/src/busybox-1.19.3/_install/usr --with-ssl-dir=/home/shaw/work/qemu/src/busybox-1.19.3/_install/usr/lib --disable-etc-default-login --prefix=/home/shaw/work/qemu/src/busybox-1.19.3/_install/usr --with-pid-dir=/home/shaw/work/qemu/src/busybox-1.19.3/_install/var/run --with-privsep-path=/home/shaw/work/qemu/src/busybox-1.19.3/_install/var/empty

make
make install

2012年2月4日 星期六

H264 RTP payload 判斷 IDR (I frame)

RTP payload判斷為iframe:
1.single nal unit packet
=> nal_unit_type(first byte & 0x1f)=5(IDR)

2.fragmentation unit
=> 先看 fu indicator(first byte & 0x1f) = 28 or 29
=> nal_unit_type(second byte & 0x1f) = 5(IDR)
=> fu header start bit(second byte & 0x80) = 0x80
範例程式:
public static bool isH264iFrame(byte[] paket)
{
    int RTPHeaderBytes = 0;

    int fragment_type = paket[RTPHeaderBytes + 0] & 0x1F;
    int nal_type = paket[RTPHeaderBytes + 1] & 0x1F;
    int start_bit = paket[RTPHeaderBytes + 1] & 0x80;

    if (((fragment_type == 28 || fragment_type == 29) && nal_type == 5 && start_bit == 128) || fragment_type == 5)
    {
        return true;
    }

    return false;
}

參考