cordova+ionic播放视频方案

10 篇文章 0 订阅
2 篇文章 0 订阅

场景 : 

 技术栈选型:aj2 + cordova + ionic

 需要解决的问题 :无法通过<video>的src指定file:///sdcard 播放本地缓存的视频

 根本原因 : aj2无法访问外部资源

 解决思路 :  

       因为此方案可以通过通过http/https方式访问网络资源。由此可见,我们可以通过移动端自身构建本地服务来解决此类问题,提供一个接口用以提供流媒体资源,当访问http://localhost:xxx/xxx的请求方式来获取媒体资源。构建一个基于本地服务的虚拟网络请求。

 

解题方法:

  1.使用添加第三方本地服务构建工具。(在此使用的是android anync)

 

2.提供媒体访问接口服务

LocalHttpServer


package io.ionic.starter;

import android.os.Environment;
import android.util.Log;

import com.koushikdutta.async.http.server.AsyncHttpServer;
import com.koushikdutta.async.http.server.AsyncHttpServerRequest;
import com.koushikdutta.async.http.server.AsyncHttpServerResponse;
import com.koushikdutta.async.http.server.HttpServerRequestCallback;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class LocalHttpServer implements HttpServerRequestCallback {
    private static final String TAG = "LocalHttpServer";

    private static LocalHttpServer mInstance;

    public static int PORT_LISTEN_DEFALT = 5000;

    AsyncHttpServer server = new AsyncHttpServer();

    public static LocalHttpServer getInstance() {
        if (mInstance == null) {
            //增加类锁,保证只初始化一次
            synchronized (LocalHttpServer.class) {
                if (mInstance == null) {
                    mInstance = new LocalHttpServer();
                }
            }
        }
        return mInstance;
    }


    public void stopServer(){
        server.stop();
    }


    public void startServer() {
        server.addAction("OPTIONS", "[\\d\\D]*", this);
        server.addAction("GET", "[\\d\\D]*", this);
        server.get("[\\d\\D]*", this);
        server.post("[\\d\\D]*", this);
        server.listen(PORT_LISTEN_DEFALT);

    }

    @Override
    public void onRequest(AsyncHttpServerRequest request, AsyncHttpServerResponse response) {
        Log.d(TAG, "come in");
        String uri = request.getPath();
        Log.d(TAG, "uri="+uri);
        try {
            sendAssignFile(response,"yoga.mp4");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void sendAssignFile(AsyncHttpServerResponse response, String pathTemp) throws IOException {
        File file = new File(Environment.getExternalStorageDirectory(), pathTemp);
        FileInputStream stream = new FileInputStream(file);
        response.setContentType(AsyncHttpServer.getContentType(pathTemp));
        response.sendStream(stream, stream.available());
    }
}

3.在cordova启动页启动服务

注意:

参数:

端口监听:

请求方式限制:

path限制:

为了测试方便固定返回文件名:

4.所以可以进行 测试<video src = "http://localhost:5000/1">

5.结论 可以正常获得媒体流。

原理:

通过构建本地服务打通本地资源跟aj2的一个访问桥梁,通过接口也可以代理更多的sd卡资源,比如图片,音频,等等        

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值