您的位置:首页 > 移动开发 > Android开发

Android流媒体开发之-直播自定义列表

2016-12-23 23:33 351 查看
1、Android流媒体开发之-直播实现

2、Android流媒体开发之-直播自定义列表

3、Android流媒体开发之-服务器图片的加载

4、Android流媒体开发之-直播自定义分类

5、Android流媒体开发之-获取直播节目预告-1

6、Android流媒体开发之-直播界面切换电视台频道

网上大多数直播软件都会提供一个功能就是自定义,这个由于版本问题,而为了让用户看到自己想看的频道,可以让用户自己添加找到的源,然后进行播放,俗话说法不责众,这个功能是如何实现的呢,其实也是很简单的,无法就是记录下用户添加的数据,然后保存下来,这里主要用到了数据库,用户点击自己添加的源,程序会从数据库取出链接,例如http,rtsp等开头的流媒体链接,具体的实现如下,我们是在之前流媒体开发之--直播实现的基础上继续完善。

      首先就是设计一个布局,里面使用ListView来填充,custom.xml,内容如下:

<?xml version="1.0" encoding="utf-8"?>  

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

    android:layout_width="match_parent"  

    android:layout_height="match_parent"  

    android:orientation="vertical" >  

      

    <TextView   

        android:id="@+id/custom_title"  

        android:layout_width="match_parent"  

        android:layout_height="30dp"  

        android:text="直播"  

        android:textSize="27sp"  

        android:gravity="center"  

        />  

  

    <ListView   

        android:id="@+id/custom_list"  

        android:layout_width="match_parent"  

        android:layout_height="wrap_content"  

        ></ListView>  

</LinearLayout>  

我们同时还需要一个ListView的一个Item和一个foot用来显示添加的源和实现添加功能,内容如下:

custom_list_item.xml

<?xml version="1.0" encoding="utf-8"?>  

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

    android:layout_width="wrap_content"  

    android:layout_height="wrap_content"  

    android:orientation="horizontal" >  

      

    <TextView   

        android:id="@+id/custom_list_item_name"  

        android:layout_width="100dp"  

        android:layout_height="wrap_content"  

        android:singleLine="true"  

        android:text="频道"  

        />  

    <TextView   

        android:id="@+id/custom_list_item_url"  

        android:layout_width="match_parent"  

        android:layout_height="30dp"  

        android:text="视频源链接"  

        />  

</LinearLayout>  

custom_list_foot.xml

[html] view
plain copy print?

<?xml version="1.0" encoding="utf-8"?>  

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

    android:layout_width="match_parent"  

    android:layout_height="match_parent"  

    android:orientation="vertical" >  

    <TextView   

        android:layout_width="match_parent"  

        android:layout_height="30dp"  

        android:text="点击此处添加视频源"  

        android:textSize="25sp"  

        />  

  

</LinearLayout>  

我上面只是使用TextView来显示,如果需要美化,可以添加ImageView来实现图文并茂,布局写完后,我们就要添加一个数据库用来记录添加的视频源,为了方便起见,我们还需要定义一个自定义视频内容格式的类,内容如下:

CustomVideo.Java
[java] view
plain copy print?

package com.jwzhangjie.live.type;  

  

import java.io.Serializable;  

  

public class CustomVideo implements Serializable{  

  

    private static final long serialVersionUID = 2166585200370610099L;  

  

    private String name;  

    private String url;  

    public String getName() {  

        return name;  

    }  

    public void setName(String name) {  

        this.name = name;  

    }  

    public String getUrl() {  

        return url;  

    }  

    public void setUrl(String url) {  

        this.url = url;  

    }  

}  

 

DBHelper.java
[java] view
plain copy print?

package com.jwzhangjie.live.db;  

  

import android.content.Context;  

import android.database.sqlite.SQLiteDatabase;  

import android.database.sqlite.SQLiteDatabase.CursorFactory;  

import android.database.sqlite.SQLiteOpenHelper;  

  

public class DBHelper extends SQLiteOpenHelper{  

  

    public static final String DB_NAME = "custom.sqlite";  

    public static final String TABLE_NAME_VIDEO = "custom";  

    public static final String CAMERA_SQL = "CREATE TABLE video ('_id' INTEGER PRIMARY KEY  AUTOINCREMENT, 'name' VARCHAR, 'url' VARCHAR)";  

    public static int DB_VERSION = 1;  

    public DBHelper(Context context, String name, CursorFactory factory,  

            int version) {  

        super(context, DB_NAME, null, DB_VERSION);  

    }  

  

    @Override  

    public void onCreate(SQLiteDatabase db) {  

        db.execSQL(CAMERA_SQL);  

    }  

  

    @Override  

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  

          

    }  

  

}  

当然有这个还不行,我们还需要创建一个实现数据库各种操作的类,定义如下:

package com.jwzhangjie.live.utils;  

  

import java.util.ArrayList;  

import java.util.List;  

  

import android.content.ContentValues;  

import android.content.Context;  

import android.database.Cursor;  

import android.database.sqlite.SQLiteDatabase;  

  

import com.jwzhangjie.live.db.DBHelper;  

import com.jwzhangjie.live.type.CustomVideo;  

  

public class DBUtils {  

  

    private static DBHelper mDbHelper;  

    public DBUtils(Context context){  

        mDbHelper = new DBHelper(context);  

    }  

      

    /** 

     * insert custom video 

     */  

    public void insertCustomVideo(CustomVideo customVideo){  

        SQLiteDatabase dbDatabase = null;  

        try {  

            dbDatabase = mDbHelper.getWritableDatabase();  

            if (dbDatabase == null) {  

                return;  

            }  

            ContentValues contentValues = new ContentValues();  

            contentValues.put("name", customVideo.getName());  

            contentValues.put("url", customVideo.getUrl());  

            dbDatabase.insertOrThrow("custom", null, contentValues);  

        } catch (Exception e) {  

        }finally{  

            dbDatabase.close();  

        }  

    }  

      

    public void deleteOneCustomVideo(String name){  

        SQLiteDatabase dbDatabase = mDbHelper.getWritableDatabase();  

        try {  

            String sql = "DELETE FROM custom WHERE name = "+name;  

            dbDatabase.execSQL(sql);  

        } catch (Exception e) {  

        }finally{  

            dbDatabase.close();  

        }  

    }  

      

    public List<CustomVideo> getAllCameras(){  

        List<CustomVideo> list = new ArrayList<CustomVideo>();  

        SQLiteDatabase dbDatabase = mDbHelper.getWritableDatabase();  

        String sql = "SELECT * FROM custom";  

        Cursor cursor = dbDatabase.rawQuery(sql, null);  

        while (!cursor.isLast()) {  

            cursor.moveToNext();  

            CustomVideo video = new CustomVideo();  

            video.setId(cursor.getInt(0));  

            video.setName(cursor.getString(1));  

            video.setUrl(cursor.getString(2));  

            list.add(video);  

        }  

        dbDatabase.close();  

        return list;  

    }  

      

    public int getAllCustomVideoCount(){  

        SQLiteDatabase db = mDbHelper.getReadableDatabase();  

        Cursor cursor = db.rawQuery("select count(*) from custom", null);  

        cursor.moveToNext();  

        int count = cursor.getInt(0);  

        cursor.close();  

        db.close();  

        return count;  

    }  

      

}  

做完上述事情后,我们就要设计显示界面操作,首先就是适配器的设计:

<p>package com.jwzhangjie.live.utils;</p><p>import java.util.ArrayList;  

import java.util.List;</p><p>import <a href="http://lib.csdn.net/base/android" class="replace_word" title="Android知识库" target="_blank" style="color:#df3434; font-weight:bold;">Android</a>.content.ContentValues;  

import android.content.Context;  

import android.database.Cursor;  

import android.database.sqlite.SQLiteDatabase;</p><p>import com.jwzhangjie.live.db.DBHelper;  

import com.jwzhangjie.live.type.CustomVideo;</p><p>public class DBUtils {</p><p> public static DBHelper mDbHelper;  

 public DBUtils(Context context){  

  mDbHelper = new DBHelper(context);  

 }  

   

 /** 

  * insert custom video 

  */  

 public void insertCustomVideo(CustomVideo customVideo){  

  SQLiteDatabase dbDatabase = null;  

  try {  

   dbDatabase = mDbHelper.getWritableDatabase();  

   if (dbDatabase == null) {  

    return;  

   }  

   ContentValues contentValues = new ContentValues();  

   contentValues.put("name", customVideo.getName());  

   contentValues.put("url", customVideo.getUrl());  

   dbDatabase.insertOrThrow("custom", null, contentValues);  

  } catch (Exception e) {  

  }finally{  

   dbDatabase.close();  

  }  

 }  

   

 public void deleteOneCustomVideo(String url){  

  SQLiteDatabase dbDatabase = mDbHelper.getWritableDatabase();  

  try {  

   String sql = "DELETE FROM custom WHERE url = "+url;  

   dbDatabase.execSQL(sql);  

  } catch (Exception e) {  

  }finally{  

   dbDatabase.close();  

  }  

 }  

   

 public List<CustomVideo> getAllCameras(){  

  List<CustomVideo> list = new ArrayList<CustomVideo>();  

  SQLiteDatabase dbDatabase = mDbHelper.getWritableDatabase();  

  String sql = "SELECT * FROM custom";  

  Cursor cursor = dbDatabase.rawQuery(sql, null);  

  while (!cursor.isLast()) {  

   cursor.moveToNext();  

   CustomVideo video = new CustomVideo();  

   video.setId(cursor.getInt(0));  

   video.setName(cursor.getString(1));  

   video.setUrl(cursor.getString(2));  

   list.add(video);  

  }  

  dbDatabase.close();  

  return list;  

 }  

   

 public int getAllCustomVideoCount(){  

  SQLiteDatabase db = mDbHelper.getReadableDatabase();  

  Cursor cursor = db.rawQuery("select count(*) from custom", null);  

  cursor.moveToNext();  

  int count = cursor.getInt(0);  

  cursor.close();  

  db.close();  

  return count;  

 }  

   

}  

</p>  

适配器设置完毕后,我们剩下显示界面了

package com.jwzhangjie.live;  

  

import java.util.ArrayList;  

import java.util.List;  

  

import com.jwzhangjie.live.adapter.CustomVideoAdapter;  

import com.jwzhangjie.live.type.CustomVideo;  

import com.jwzhangjie.live.utils.DBUtils;  

  

import android.app.Activity;  

import android.content.Intent;  

import android.os.Bundle;  

import android.view.View;  

import android.view.View.OnClickListener;  

import android.widget.AdapterView;  

import android.widget.AdapterView.OnItemClickListener;  

import android.widget.Button;  

import android.widget.EditText;  

import android.widget.ListView;  

  

public class CustomVideoList extends Activity implements OnItemClickListener, OnClickListener{  

  

    public ListView customVideoListView;  

    public CustomVideoAdapter listAdapter;  

    private List<CustomVideo> listVideos;  

    public Button addBtn;  

    public EditText addUrl;  

    DBUtils dbUtils = new DBUtils(this);  

    @Override  

    protected void onCreate(Bundle savedInstanceState) {  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.custom);  

        addBtn = (Button)findViewById(R.id.add);  

        addUrl = (EditText)findViewById(R.id.addurl);  

        customVideoListView = (ListView)findViewById(R.id.custom_list);  

        listAdapter = new CustomVideoAdapter(this);  

        customVideoListView.setAdapter(listAdapter);  

        customVideoListView.setOnItemClickListener(this);  

        addBtn.setOnClickListener(this);  

        addUrl.setText("http://74.82.62.53:1935/liverepeater/10.stream/playlist.m3u8");  

        int size = dbUtils.getAllCustomVideoCount();  

        if (size != 0) {  

            listVideos = dbUtils.getAllCameras();  

            listAdapter.setCustomVideoList(listVideos);  

        }else {  

            listVideos = new ArrayList<CustomVideo>();  

        }  

    }  

    @Override  

    protected void onResume() {  

        super.onResume();  

    }  

    @Override  

    public void onClick(View v) {  

        if (v == addBtn) {  

            if (addUrl.getText() != null) {  

                CustomVideo customVideo = new CustomVideo();  

                customVideo.setName("视频");  

                customVideo.setUrl(addUrl.getText().toString());  

                dbUtils.insertCustomVideo(customVideo);  

                listAdapter.insertCustomVideo(customVideo);  

                listVideos.add(customVideo);  

            }  

        }  

    }  

    @Override  

    public void onItemClick(AdapterView<?> parent, View view, int position,  

            long id) {  

        Intent intent = new Intent();  

        intent.setClass(CustomVideoList.this, JieVideoPlayer.class);  

        intent.putExtra("path", listVideos.get(position).getUrl());  

        startActivity(intent);  

    }  

      

  

}  

效果如下:







 

 

点击你选择的视频也能够播放视频,自定义功能就这些。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: