android - 使用 Vitamio 库流式传输 m3u8

标签 android video-streaming android-videoview vitamio

我正在使用 Vitamio library用于流式传输 m3u8,但它不起作用。
logcat:avformat_open_input:处理输入时发现无效数据:-1094995529

enter image description here

这是我尝试过的:

VideoStream :

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import io.vov.vitamio.LibsChecker;
import io.vov.vitamio.MediaPlayer;
import io.vov.vitamio.MediaPlayer.OnBufferingUpdateListener;
import io.vov.vitamio.MediaPlayer.OnInfoListener;
import io.vov.vitamio.widget.VideoView;


public class VideoStream extends Activity implements OnInfoListener, OnBufferingUpdateListener {
    private static final String TAG = "VideoStream";
    private String path;

    private VideoView mVideoView;
    private ProgressBar pb;
    private TextView downloadRateView, loadRateView;
    private Uri uri;



    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        if (!LibsChecker.checkVitamioLibs(this))
            return;
        setContentView(R.layout.video_stream);

        path = "http://video4.earthcam.com/fecnetwork/fridays_5th.flv/playlist.m3u8";

        mVideoView = (VideoView) findViewById(R.id.buffer);
        pb = (ProgressBar) findViewById(R.id.probar);

        downloadRateView = (TextView) findViewById(R.id.download_rate);
        loadRateView = (TextView) findViewById(R.id.load_rate);
        uri = Uri.parse(path);
        mVideoView.setVideoURI(uri);
        mVideoView.setMediaController(new MediaController(this));
        mVideoView.requestFocus();
        mVideoView.setOnInfoListener(this);
        mVideoView.setOnBufferingUpdateListener(this);
        mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mediaPlayer) {
                // optional need Vitamio 4.0
                mediaPlayer.setPlaybackSpeed(1.0f);
            }
        });
    }
    @Override
    public boolean onInfo(MediaPlayer mp, int what, int extra) {
        switch (what) {
            case MediaPlayer.MEDIA_INFO_BUFFERING_START:
                if (mVideoView.isPlaying()) {
                    mVideoView.pause();
                    pb.setVisibility(View.VISIBLE);
                    downloadRateView.setText("");
                    loadRateView.setText("");
                    downloadRateView.setVisibility(View.VISIBLE);
                    loadRateView.setVisibility(View.VISIBLE);

                }
                break;
            case MediaPlayer.MEDIA_INFO_BUFFERING_END:
                mVideoView.start();
                pb.setVisibility(View.GONE);
                downloadRateView.setVisibility(View.GONE);
                loadRateView.setVisibility(View.GONE);
                break;
            case MediaPlayer.MEDIA_INFO_DOWNLOAD_RATE_CHANGED:
                downloadRateView.setText("" + extra + "kb/s" + "  ");
                break;
        }
        return true;
    }

    @Override
    public void onBufferingUpdate(MediaPlayer mp, int percent) {
        loadRateView.setText(percent + "%");
    }
}

video_stream.xml :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <io.vov.vitamio.widget.CenterLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <io.vov.vitamio.widget.VideoView
            android:id="@+id/buffer"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true" />
    </io.vov.vitamio.widget.CenterLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:orientation="horizontal" >

        <ProgressBar
            android:id="@+id/probar"
            style="?android:attr/progressBarStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/download_rate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="" />

        <TextView
            android:id="@+id/load_rate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="" />
    </LinearLayout>

</RelativeLayout>

Manifest :

    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name">
      <activity android:name=".VideoStream"
                android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden"
                android:label="@string/app_name"
                android:launchMode="singleTop"
                android:screenOrientation="landscape">
             <activity
                android:name="io.vov.vitamio.activity.InitActivity"
                android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
                android:launchMode="singleTop"
                android:theme="@android:style/Theme.NoTitleBar"
                android:windowSoftInputMode="stateAlwaysHidden" />

这个问题好像和Vitamio有关。我怎样才能解决这个崩溃?
非常感谢。

最佳答案

2天后,我找到了解决方案:)
所以我首先要说的是我很困惑!

您可能需要使用 Vitamio就像我做的那样。现在的问题是,如果将库作为本地库项目(File-New-Import 模块)包含它应该可以正常工作,但如果通过添加依赖项(compile 'me.neavo:vitamio: 4.2.2')在build.gradle中,出现上述问题。

关于android - 使用 Vitamio 库流式传输 m3u8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35384086/

相关文章:

ffmpeg - 如何使用 avconv/ffmpeg 从流式 RTMP 中连续提取视频帧?

Android:无法将 VideoView 背景设置为透明

android - 我们可以在android VideoView中播放.swf文件吗?

android - 如何在 Android 布局的多个组件中拥有一个唯一的按钮?

Android 从服务获取屏幕尺寸

ffmpeg - 为什么我会收到 testsrc ffmpeg 的输入/输出错误?

javascript - 动态更改 HTML 视频流源/质量

java - 无法使用 Android 默认视频播放器使用 Intent 播放视频

android - Android APK 文件里面有什么

java - Android 和 SSL 证书加载