web-dev-qa-db-ja.com

Android 3.0およびシーク中のHLS(httpライブストリーミング)

HLSストリーム用のm3u8ファイルを提供するプロバイダーがあります(元々はiOSアプリでの使用を目的としていました)。

Android 3.0+はhttpライブストリーミング(http://developer.Android.com/guide/appendix/media-formats.html)をサポートしています-実際、これらのm3u8ファイルはAndroid 3.0+。

編集:Androidはこれを「リアルタイム」のビデオフィードとして扱い、ビデオの長さをシークまたは計算する機能を無効にしているようです。 )

Android 3.0+にこれらのファイル内をシークさせる方法はありますか?

他の人がテストするためのサンプルアクティビティは次のとおりです。

import Android.app.Activity;
import Android.os.Bundle;
import Android.widget.MediaController;
import Android.widget.VideoView;

public class SandboxActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        VideoView vw = (VideoView) findViewById(R.id.videoView);
      vw.setVideoPath("http://devimages.Apple.com/iphone/samples/bipbop/gear4/prog_index.m3u8"); 
        vw.setMediaController(new MediaController(this));
        vw.requestFocus();
        vw.start();
    }
}

およびサンプルレイアウト:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:gravity="center" Android:id="@+id/root">

    <VideoView
        Android:id="@+id/videoView"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent" />
</RelativeLayout>

これは、AppleのサンプルHLSリンクを使用しています。

25
NPike

これを見てください(あなたも参照しました) ページ

それは言う:

  • プロトコルバージョン3(Android 4.0以降)
  • プロトコルバージョン2(Android 3.x)

そして、ここで確認できます HLSのドラフト 。ページ上部でバージョンを選択できます。

シークへの最初の言及はドラフト3に登場しました(ドラフト2と比較してAndroid 3.x)

日付と時刻の値は、メディアのタイムラインの適切な実時間への有益なマッピングを提供します。これは、シークの基礎として使用できます。 -)

念のため。ドラフト全体を読み通しませんでした。しかし、私の推測では、AndroidはAndroid 3.0でかなり初期のドラフトを実装しており、部分的に実装している可能性があります。これで十分ですが、そうではありません。求めるのに十分です。

サードパーティのHLSクライアントでブライニングすることを除いて、これを簡単に修正できるとは思いません(vipwによって提案されています)

13
Victor Ronin

申し訳ありませんが、あなたは石から血を得ようとしています。 Android 3.0はHLSの非常に限られたサブセットをサポートしており、ライブストリームでのシークをサポートするには、Googleが提供するよりも優れたHLSクライアントが必要になります。

5
vipw

よくわかりませんが、VideoViewはケースの検索をサポートしていないため、次のようないくつかの異なるオプションを試すことができます。 http://wiki.videolan.org/AndroidCompile (コンパイルは簡単)

1
wertigom

私の推測では、あなたが説明したシーク動作は、iframeのみのプレイリスト(#EXT-X-I-FRAMES-ONLY)を使用して実装されました。これには、少なくともバージョン4のPantos仕様をサポートするクライアントが必要です。

0
John Saxton

これにいくらか関連しています-ライブHLSフィードがライブポイントで開始されないようにするバグがあるようです。これは、このシークの制限によるものかもしれないと思います。 AndroidでライブHLSフィード(EXT-X-ENDLISTタグがない)を開始すると、コアHLS解析コンポーネントにバグがあり、ライブポイント(フィードの終わり)で開始できず、代わりにストリームの先頭から開始します。

これについてcode.google.comにバグが報告されています。「スター」を付けるか、そこで賛成することができます。

http://code.google.com/p/Android/issues/detail?id=37156

0
Bob Cowherd