使用 Vitamio 库流式传输 m3u8
Posted
技术标签:
【中文标题】使用 Vitamio 库流式传输 m3u8【英文标题】:Streaming m3u8 using Vitamio library 【发布时间】:2016-02-13 19:03:05 【问题描述】:我正在使用 Vitamio library 流式传输 m3u8,但它不起作用。
日志猫:avformat_open_input: Invalid data found when processing input : -1094995529
这是我尝试过的:
视频流:
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_
android:layout_
android:orientation="vertical" >
<io.vov.vitamio.widget.CenterLayout
android:layout_
android:layout_
android:orientation="vertical" >
<io.vov.vitamio.widget.VideoView
android:id="@+id/buffer"
android:layout_
android:layout_
android:layout_centerHorizontal="true"
android:layout_centerVertical="true" />
</io.vov.vitamio.widget.CenterLayout>
<LinearLayout
android:layout_
android:layout_
android:layout_centerInParent="true"
android:orientation="horizontal" >
<ProgressBar
android:id="@+id/probar"
style="?android:attr/progressBarStyleSmall"
android:layout_
android:layout_ />
<TextView
android:id="@+id/download_rate"
android:layout_
android:layout_
android:layout_gravity="center"
android:text="" />
<TextView
android:id="@+id/load_rate"
android:layout_
android:layout_
android:layout_gravity="center"
android:text="" />
</LinearLayout>
</RelativeLayout>
清单:
<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 有关。我怎样才能绕过这个崩溃? 非常感谢。
【问题讨论】:
【参考方案1】:2天后,我找到了解决方案:)
所以我首先要说的是我很困惑!
您可能需要像我一样使用Vitamio。现在的问题是,如果将库作为本地库项目(File-New-Import 模块)包含在内,它应该可以正常工作,但如果通过添加依赖项来包含它(compile 'me.neavo:vitamio:4.2.2'
) 在build.gradle中,出现上述问题。
【讨论】:
【参考方案2】:当您使用https://url 时,请重新输入http://url,因为它仅支持 MMS RTSP (RTP, SDP)、RTMP HTTP 受限协议和库作为模块添加到您的项目中。
【讨论】:
以上是关于使用 Vitamio 库流式传输 m3u8的主要内容,如果未能解决你的问题,请参考以下文章
寻找一个库/框架将实时视频从 OS X 流式传输到 Wowza 服务器(RTMP)[关闭]
哪些库可用于使用 WritableStream 和 Node.js Readable 等标准流 API 将数据从浏览器流式传输到服务器? [关闭]