1.思路
RTSP 协议和解码采用VLC核心库libvlc。
2.移植libvlc库
环境 ubuntu 10.4
安装工具
apt-get install gitcore
apt-get install gcc
apt-get install g++
apt-get install autoconf
apt-get install automake
这只是一部分 后面需要再装
下周 andriod vlc 工程
下载代码 git clone git://git.videolan.org/vlc-ports/android.git
进入 android-vlc 目录
执行 sh compile.sh
有几个问题 主要
ANDROID_NDK 全局变量
<!---
android:minSdkVersion="10" //支持的最小版本,兼容低版本
android:targetSdkVersion="18" //当前编译的版本
-->
3.使用官方工程创建VLC播放器测试
将vlc-android、SlidingMenu、appcompat、WheelView 添加到eclipse中,build生成VLC.apk
4.创建自己的播放器
创建videoview ,拷贝libvlcjni.so、libiomx-ics.so、libiomx-hc.so、libiomx-gingerbread.so 动态库到工程的lib目录
参考VLC程序,初始化mlibvlc实例
try {
mLibVLC = VLCInstance.getLibVlcInstance();
} catch (LibVlcException e) {
Log.i(TAG, "LibVLC.getInstance() error:" + e.toString());
e.printStackTrace();
return;
}
mLibVLC = VLCInstance.getLibVlcInstance();
} catch (LibVlcException e) {
Log.i(TAG, "LibVLC.getInstance() error:" + e.toString());
e.printStackTrace();
return;
}
mLibVLC.eventVideoPlayerActivityCreated(true);
mLibVLC.setNetworkCaching(3000);//设置缓存 貌似作用不大
mLibVLC.setHardwareAcceleration(2); //设置硬件解码
mLibVLC.setNetworkCaching(3000);//设置缓存 貌似作用不大
mLibVLC.setHardwareAcceleration(2); //设置硬件解码
mLibVLC.setMediaList();
rtspmedia = new Media( mLibVLC, rtspurl);
mLibVLC.getMediaList().add(rtspmedia);
savedIndexPosition = mLibVLC.getMediaList().size() - 1;
//mLibVLC.playIndex(index);
//mLibVLC.play();
Log.i("leon",rtspurl);
mLibVLC.playMRL(rtspurl);
rtspmedia = new Media( mLibVLC, rtspurl);
mLibVLC.getMediaList().add(rtspmedia);
savedIndexPosition = mLibVLC.getMediaList().size() - 1;
//mLibVLC.playIndex(index);
//mLibVLC.play();
Log.i("leon",rtspurl);
mLibVLC.playMRL(rtspurl);
5.增加TCP client
由于4.0以后不能再主线程操作socket ,绕了一大圈才发现这个问题(本人第一开发android),创建两个线程,一个发送线程通过全局标识控制发送信号,另一个实时获取状态
public class SendThread extends Thread {
private Socket clientSocket = null;
byte[] cmdBuffer = null;
byte[] mforce = null;
byte[] Aforce = null;
@Override
public void run() {
InetSocketAddress addr = new InetSocketAddress(ip_adress,7236);
try {
//mforce AUTOFOCUS
mforce = "MANUALFOCUS\r\n".getBytes("utf-8");
Aforce = "AUTOFOCUS\r\n".getBytes("utf-8");
}catch (IOException e) {
}
while (true)
{
try {
if (!g_command.equals(""))
{
private Socket clientSocket = null;
byte[] cmdBuffer = null;
byte[] mforce = null;
byte[] Aforce = null;
@Override
public void run() {
InetSocketAddress addr = new InetSocketAddress(ip_adress,7236);
try {
//mforce AUTOFOCUS
mforce = "MANUALFOCUS\r\n".getBytes("utf-8");
Aforce = "AUTOFOCUS\r\n".getBytes("utf-8");
}catch (IOException e) {
}
while (true)
{
try {
if (!g_command.equals(""))
{
//..............................
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
connected = false;
clientSocket = null;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
connected = false;
clientSocket = null;
}
e.printStackTrace();
connected = false;
clientSocket = null;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
connected = false;
clientSocket = null;
}
}
};
}