小编Keb*_*man的帖子

Android bindProcessToNetwork 和 RTSP 流通过 MediaPlayer

我有一个应用程序使用 bindProcessToNetwork() 强制通过 wifi 连接断开所有连接。这样做是因为 wifi 连接连接到没有 Internet 连接的相机,因此自然而然,android 会尝试通过具有完整 Internet 连接的蜂窝数据连接将所有流量推送出去。代码如下:

final ConnectivityManager connection_manager =
            (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkRequest.Builder request = new NetworkRequest.Builder();
    request.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);

    connection_manager.requestNetwork(request.build(), new ConnectivityManager.NetworkCallback()
    {
        @Override
        public void onAvailable(Network network)
        {
            try {
                connection_manager.bindProcessToNetwork(network);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

这在通过 HTTP 连接到相机以发出命令等时工作正常。但是,当启动 RTSP 流并尝试通过 android MediaPlayer 查看它时,它不会连接。媒体播放器的代码:

mMediaPlayer = new MediaPlayer();
mMediaPlayer.setSurface(new Surface(mTextureView.getSurfaceTexture()));
mMediaPlayer.setWakeMode(getActivity().getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
mMediaPlayer.setDataSource(loc);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.prepareAsync();
Run Code Online (Sandbox Code Playgroud)

如果我禁用手机上的蜂窝数据,代码运行良好,RTSP 流播放正常,因为默认路由通过 wifi 网络。但是,当两个网络都连接时,RTSP 请求似乎没有通过 wifi 连接到达相机。就好像只有 HTTP 请求被 bindProcessToNetwork() 强制通过 wifi 一样。情况并非如此,因为在应用程序的其他地方,相机正在使用 [InetAddress.isReachable()][1]

有没有办法强制 …

networking android rtsp

5
推荐指数
1
解决办法
1262
查看次数

Android 7 ConnectivityManager requestNetwork()行为

我正在使用一些代码来检测移动数据和蜂窝网络是否可用,如下所示:

final ConnectivityManager connection_manager =
                (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);

boolean mobileDataEnabled = false;

try {
    Class cmClass = Class.forName(connection_manager.getClass().getName());
    Method method = cmClass.getDeclaredMethod("getMobileDataEnabled");
    method.setAccessible(true); // Make the method callable
    // get the setting for "mobile data"
    mobileDataEnabled = (Boolean)method.invoke(connection_manager);
} catch (Exception e) {
}

if(mobileDataEnabled == true) {
    Log.d(TAG, "mobileDataEnabled == true");
} else {
    Log.d(TAG, "mobileDataEnabled == false");
}

NetworkRequest.Builder request = new NetworkRequest.Builder();
request.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);

connection_manager.requestNetwork(request.build(), new ConnectivityManager.NetworkCallback()
{
    @Override
    public void onAvailable(Network network)
    {Log.d(TAG, "requestNetwork onAvailable()");}

    @Override
        public void …
Run Code Online (Sandbox Code Playgroud)

android android-networking

2
推荐指数
1
解决办法
2693
查看次数

标签 统计

android ×2

android-networking ×1

networking ×1

rtsp ×1