Menu Home

Author Archives

lnmcc

boost serialization(备忘)

/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 // demo.cpp // // (C) Copyright 2002-4 Robert Ramey – http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include <cstddef> // NULL #include <iomanip> #include <iostream> #include <fstream> #include <string> #include […]

Android: JNI方法签名规则

JNI中对Java方法的签名格式为:(参数)返回值类型 其中参数部分的编码如下: I : Integer B : Byte S : Short C : Char V : Void LJava_Class; : Java中非基本类型 … … 一个例子: (LJava/lang/String;I)V 上面的方法签名表示该方法接受String和Integer两个参数,返回Void。

Java语言中对象的部分序列化

public class TestExternalizable implements Externalizable { //只对下面2个变量序列化 int No; String name; //下面的变量没有被序列化 int age = 0; public TestExternalizable() { // 在恢复Externalizable对象的时候,默认构造函数会被调用,这一点跟恢复一个Serializable对象不同 System.out.println(“Default Constructor”); } public TestExternalizable(int No, String name, int age) { System.out.println(“Other Constructor”); this.name = name; this.No = No; this.age = age; } @Override public String toString() { return […]

Java基本IO操作(备忘)

#java 1.1 public class IODemo { public static void main(String[] args) { try { // 1a.Reading input by lines BufferedReader in = new BufferedReader(new FileReader(args[0])); String s, s2 = new String(); while ((s = in.readLine()) != null) { s2 += s + “\n”; } in.close(); // 1b.Reading standard input BufferedReader […]

kindle paperwhite白屏处理

        在使用kpw阅读书籍时,如果碰到书籍中有错误,会出现死机、白屏现象。这种情况没有必要进行刷机这么复杂的处理。正确的处理方式如下: 长按电源键20秒以上,然后等待系统自动重启。重启成功后,删除出现问题的书籍即可。

Java构建类型安全的枚举类型

在《Java编程思想-网络版》一书中看到一段有意思的代码。 先来看一段Java实现C/C++枚举效果的非类型安全的版本: public interface Months { int JANUARY = 1, FEBRUARY = 2, MARCH = 3, APRIL = 4, … …; } 上面的代码实际上是在利用Java中interface的成员变量会自动成为public static final的事实,这样我们可以使用Months.JANUARY的方法来引用这些值。但是这个方法的缺陷是非类型安全的,因为我们最终获得的其实是个int。这种方法带来的好处只是减少了硬编码。 接下来看看Bruce Eckel提供的类型安全的版本: public final class Month2 { private String name; private Month2(String nm) { name = nm; } public String toString() { return name; } […]

ffmpeg UINT64_C 未定义错误

在C++项目中使用ffmpeg时报错: $ /usr/local/include/libavutil/common.h:170:47: 错误: ‘UINT64_C’在此作用域中尚未声明 解决方法: extern “C”{ #ifdef __cplusplus #define __STDC_CONSTANT_MACROS #ifdef _STDINT_H #undef _STDINT_H #endif # include <stdint.h> #endif }

ubuntu搭建git服务器

安装git服务器 github实在是个好东西,奈何不花钱就不能创建私用仓库,只能在自己的vps上搭建git服务器了。 所有在git服务器上的操作默认都是root用户 安装必备的软件 $ apt-get install git-core openssh-server openssh-client 增加git用户 $ useradd -m git -s /bin/bash $ passwd git 建立git仓库的保存位置 $ mkdir /home/git/repo $ chown git:git /home/git/repo/ $ chmod 700 /home/git/repo/ 安装和配置gitosis $ apt-get install python-setuptools $ cd /tmp #把gitosis的源代码clone到/tmp目录下 $ git clone git://github.com/res0nat0r/gitosis.git $ python setup.py install #安装gitosis […]

Mac OS X: “can’t be opened because it is from an unidentified developer”

OS: MAC OS X 10.9 系统升级到MAX OS X 10.9后,在安装非App Store中的App时,经常会出现下面的报错: 出现这个错误的原因是Apple在新系统中增加了一个叫”GateKeeper”的安全机制。 解决方法 方法一:选择App,弹出上右键 —-> 选择Open:     在弹出的对话框中选择Open:     接下来就是正常的安装过程了。   方法二: 打开System Preference —-> Security&Privacy —-> Allow apps downloaded from:     打开Anywhere后就可以直接安装非App Store中的App了。

Android使用SAX解析XML

String xml = “<?xml version=\”1.0\”?>\n” + “<user>\n” + “<name>lnmcc</name>\n” + “<age>10</age>\n”; class XMLUser { String name; String age; public XMLUser() { name = “”; age = “”; } } private class UserXMLHandler extends DefaultHandler { static final int NONE = 0; static final int NAME = 1; static final int […]

Android VideoGallery

activity_main.xml : <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android” android:layout_width=”fill_parent” android:layout_height=”fill_parent” android:orientation=”vertical” > <ListView android:id=”@+id/lv” android:layout_width=”fill_parent” android:layout_height=”fill_parent” /> </LinearLayout> list_view.xml : <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android” android:layout_width=”fill_parent” android:layout_height=”fill_parent” android:orientation=”horizontal” > <ImageView android:id=”@+id/imgView” android:layout_width=”80dp” android:layout_height=”80dp” /> <TextView android:id=”@+id/tv” android:layout_width=”wrap_content” android:layout_height=”wrap_content” /> </LinearLayout> MainActivity.java : public class MainActivity extends Activity implements OnItemClickListener { Cursor cursor; @Override protected void onCreate(Bundle savedInstanceState) […]

linux c 解析FLV文件

FLV文件组成 FLV文件由Header和Body两部分组成。 FLV Header 域名 类型 说明 Signature UI8 Signature byte always ‘F’ (0x46) Signature UI8 Signature byte always ‘L’ (0x4C) Signature UI8 Signature byte always ‘V’ (0x56) Version UI8 File version (for example, 0x01 for FLV version 1) TypeFlagsReserved UB[5] Must be 0 TypeFlagsAudio UB[1] Audio tags are present […]

Android使用MediaPlayer播放视频步骤

MediaPlayer状态变换图: public class MainActivity extends Activity { Display display; SurfaceHolder surfaceHolder; SurfaceView surfaceView; MediaPlayer mediaPlayer; // 视频宽高 int width = 0; int height = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); display = getWindowManager().getDefaultDisplay(); String file = Environment.getExternalStorageDirectory() .getAbsolutePath() + “/Movies/1.m4v”; surfaceView = (SurfaceView) findViewById(R.id.sv); surfaceHolder = surfaceView.getHolder(); […]

AudioRecord录制音频的基本步骤

采样定理,又称香农采样定理,奈奎斯特采样定理:         在进行模拟/数字信号的转换过程中,当采样频率fs.max大于信号中最高频率fmax的2倍时(fs.max >= 2fmax),采样之后的数字信号完整地保留了原始信号中的信息。         一般实际应用中保证采样频率为信号最高频率的5~10倍。要使实信号采样后能够不失真还原,采样频率必须大于信号最高频率的两倍。 //设置声音采样率 int frequency = 8000; //设置声道 int channelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO; //设置声音编码格式 int audioEncoding = AudioFormat.ENCODING_PCM_16BIT; //获取AudioRecord的最小缓冲区大小 int minSize = AudioRecord.getMinBufferSize(frequency, channelConfig, audioEncoding); //录制缓冲区 short audioBuffer = new short[BUFSZ]; AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, frequency, channelConfig, audioEncoding,minSize); //开始录制 audioRecord.startRecording(); while(true) { audioRecord.read(audioBuffer, 0, BUFSZ); } ref:http://zh.wikipedia.org/zh-cn/%E5%A5%88%E5%A5%8E%E6%96%AF%E7%89%B9%E9%87%87%E6%A0%B7%E5%AE%9A%E7%90%86

编译ffmpeg使支持PIPE输入

查看ffmpeg支持的输入协议 ./configure –list-protocols 可能的输出: applehttp httpproxy rtmp bluray https rtmpe cache librtmp rtmps concat librtmpe rtmpt crypto librtmps rtmpte ffrtmpcrypt librtmpt rtmpts ffrtmphttp librtmpte rtp file md5 sctp gopher mmsh tcp hls mmst tls http pipe udp 增加PIPE支持 ./configure –enable-protocol=pipe 一个完整的编译参数 ./configure –enable-libmp3lame –enable-vdpau –enable-libx264 –enable-gpl –disable-static –enable-shared –disable-armv5te –disable-armv6 […]

linux c 使用socket处理HTTP请求

#include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <time.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/select.h> #define BUFSIZE 4096 int main(int argc, char **argv) { int sockfd; struct sockaddr_in servaddr; charhttpRequest[BUFSIZE], buf[BUFSIZE]; bzero(httpRequest, sizeof(httpRequest)); //构建请求信息,这里请求http://192.168.2.184:8090/test.flv,这是一个由ffserver搭建的流媒体服务 strcat(httpRequest, “GET /test.flv HTTP/1.1\n”); strcat(httpRequest, “Host: 192.168.2.184:8090\n”); strcat(httpRequest, “User-Agent: Mozilla/5.0 (X11; […]

linux网络编程: AF_INET, AF_INET6, AF_UNSPEC

int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res); struct addrinfo { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; socklen_t ai_addrlen; struct sockaddr *ai_addr; char *ai_canonname; struct addrinfo *ai_next; }; ai_family参数指定调用者期待返回的套接口地址结构的类型。 它的值包括三种: AF_INET: 函数返回IPV4相关的地址信息 AF_INET6: 函数返回IPV6相关的地址信息 AF_UNSPEC: 函数返回的是适用于指定主机名和服务名且适合任何协议族的地址 如果某个主机既有AAAA记录(IPV6)地址,同时又有A记录(IPV4)地址,那么AAAA记录将作为sockaddr_in6结构返回,而A记录则作为sockaddr_in结构返回。 ref: http://blog.sina.com.cn/s/blog_8184e033010134c4.html

Android使用MediaRecorder录音

MediaRecorder状态流程 MediaRecorder输出格式 格式 描述 AAC_ADTS AAC ADTS格式 AMR_NB 自适应多速率窄带格式 AMR_WB 新型可变速率多模式宽带格式 DEFAULT MPEG_4 MPRG-4文件格式 RAW_AMR 不使用任何容器的原始文件,这个选项不适合有视频的录制文件,而且音频编码器是AMR_NB时才有效 THREE_GPP 3GP格式 MediaRecorder编码格式 格式 描述 AAC AAC Low Complexity (AAC-LC) audio codec HE_AAC High Efficiency AAC (HE-AAC) audio codec AAC_ELD Enhanced Low Delay AAC (AAC-ELD) audio codec AMR_NB AMR (Narrowband) audio codec AMR_WB AMR […]