Android 2.1之前的安卓电视直播技术

7

我正在开发一款应用程序,需要实现直播电视流。我的谷歌搜索让我相信,在Android 2.1之前不可能进行直播流。

这是对的吗?

当我从Mediaplayer获取了音乐流的代码后,通过设置以下方法,就可以使用它的类型:

mp.setAudioStreamType(2);

但我想知道,仅仅像上述代码那样保存文件是否足够进行流媒体传输?

private void setDataSource(String path) throws IOException {
        if (!URLUtil.isNetworkUrl(path)) {
            mp.setDataSource(path);
        } else {
            Log.i("enter the setdata","enter the setdata");
            URL url = new URL(path);
            URLConnection cn = url.openConnection();
            cn.connect();
            InputStream stream = cn.getInputStream();
            if (stream == null)
                throw new RuntimeException("stream is null");
            File temp = File.createTempFile("mediaplayertmp", "dat");
            String tempPath = temp.getAbsolutePath();
            FileOutputStream out = new FileOutputStream(temp);
            byte buf[] = new byte[128];
            do {
                int numread = stream.read(buf);
                if (numread <= 0)
                    break;
                out.write(buf, 0, numread);
            } while (true);
            mp.setDataSource(tempPath);

            try {
                stream.close();
                Log.i("exit the setdata","exit the setdata");
            }
            catch (IOException ex) {
                Log.e(TAG, "error: " + ex.getMessage(), ex);
            }
        }
    }

直播电视流需要额外的东西吗?


什么是流媒体电视?你使用的协议是什么? - dongshengcn
有一个适用于Android 1.x的移动电视应用(例如SFR TV)。只有在您拥有SFR订阅时才能在法国使用。 - david
请分享一下你是如何解决这个问题的? - Hardik Joshi
1个回答

5

针对“是否足够”的问题:绝对不足够。

您正在将URL中的所有数据保存到设备上,然后进行播放。如果您可以保证它是一个小片段,那么这样做是可行的,但“实时电视流”意味着我们正在谈论以实时速率发送的未知长度的流。

这会产生以下影响:

  1. N分钟长的节目将在播放开始之前需要N分钟来流式传输到设备。
  2. 长时间的广播有可能填满所有可用的存储空间。

MediaPlayer.setDataSource(FileDescriptor fd)方法应从任何您可以获得FileDescriptor的源中读取数据,包括套接字。

如何使用此方法的确切细节将基于您使用的协议而异,但基本上您需要从广播源中读取数据,将其转码为适当的形式,并将其导入fd。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接