Intereting Posts
Почему в шаблоне ViewHolder класс ViewHolder статичен? Панель действий Android, как добавить поддерживающую библиотеку v7 appcompat для Eclipse Android Полностью прозрачная панель состояния? Как использовать аннотации Java для руководства Android Proguard? Android Studio 2.0 Preview: ': app: transformClassesWithInstantRunForDebug' FAILED Самые популярные размеры экрана / разрешения на телефонах Android Исходный ресурс Android не найден? Запросить разрешения во время выполнения из v4.Fragment и выполнить обратный вызов в Fragment? Как я могу сделать элементы на ActionBar одинаковыми слева, один в центре и один справа? Android Gallery на Android 4.4 (KitKat) возвращает другой URI для Intent.ACTION_GET_CONTENT Установите ориентацию на пейзаж в андроиде с обеих сторон Добавление многооконной поддержки Samsung в приложение для Android Чтобы активность Android всегда использовалась в режиме ландшафта Нужно хранить данные LOTS на устройстве Android, думая о выходе OODB Как обновить Android ListView динамическими данными в реальном времени?

Воспроизведение видео m3u8 в android

Я хочу жить потоковым видео, и он находится в формате m3u8. Поэтому я попробовал код ниже

public class StreamingPlayer extends Activity implements OnBufferingUpdateListener, OnCompletionListener, OnPreparedListener, OnVideoSizeChangedListener, SurfaceHolder.Callback{ private static final String TAG = StreamingPlayer.class.getSimpleName(); private int mVideoWidth; private int mVideoHeight; private MediaPlayer mMediaPlayer; private SurfaceView mPreview; private SurfaceHolder holder; private String path; private boolean mIsVideoSizeKnown = false; private boolean mIsVideoReadyToBePlayed = false; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.mediaplayer_2); mPreview = (SurfaceView) findViewById(R.id.surface); holder = mPreview.getHolder(); holder.addCallback(this); holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } private void playVideo() { doCleanUp(); try { /* * TODO: Set path variable to progressive streamable mp4 or * 3gpp format URL. Http protocol should be used. * Mediaplayer can only play "progressive streamable * contents" which basically means: 1. the movie atom has to * precede all the media data atoms. 2. The clip has to be * reasonably interleaved. * */ path = "httplive://xboodangx.api.channel.livestream.com/3.0/playlist.m3u8"; if (path == "") { // Tell the user to provide a media file URL. Toast .makeText( this, "Please edit MediaPlayerDemo_Video Activity," + " and set the path variable to your media file URL.", Toast.LENGTH_LONG).show(); } Log.e("PATH", "Path = " + path); // Create a new media player and set the listeners mMediaPlayer = new MediaPlayer(); mMediaPlayer.setDataSource(path); mMediaPlayer.setDisplay(holder); mMediaPlayer.setOnBufferingUpdateListener(this); mMediaPlayer.setOnPreparedListener(this); mMediaPlayer.prepare(); mMediaPlayer.setOnCompletionListener(this); mMediaPlayer.setOnVideoSizeChangedListener(this); mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); } catch (Exception e) { Log.e(TAG, "error: " + e.getMessage(), e); } } public void onBufferingUpdate(MediaPlayer arg0, int percent) { Log.d(TAG, "onBufferingUpdate percent:" + percent); } public void onCompletion(MediaPlayer arg0) { Log.d(TAG, "onCompletion called"); } public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { Log.v(TAG, "onVideoSizeChanged called"); if (width == 0 || height == 0) { Log.e(TAG, "invalid video width(" + width + ") or height(" + height + ")"); return; } mIsVideoSizeKnown = true; mVideoWidth = width; mVideoHeight = height; if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) { startVideoPlayback(); } } public void onPrepared(MediaPlayer mediaplayer) { Log.d(TAG, "onPrepared called"); mIsVideoReadyToBePlayed = true; if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) { startVideoPlayback(); } } public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k) { Log.d(TAG, "surfaceChanged called"); } public void surfaceDestroyed(SurfaceHolder surfaceholder) { Log.d(TAG, "surfaceDestroyed called"); } public void surfaceCreated(SurfaceHolder holder) { Log.d(TAG, "surfaceCreated called"); playVideo(); } @Override protected void onPause() { super.onPause(); releaseMediaPlayer(); doCleanUp(); } @Override protected void onDestroy() { super.onDestroy(); releaseMediaPlayer(); doCleanUp(); } private void releaseMediaPlayer() { if (mMediaPlayer != null) { mMediaPlayer.release(); mMediaPlayer = null; } } private void doCleanUp() { mVideoWidth = 0; mVideoHeight = 0; mIsVideoReadyToBePlayed = false; mIsVideoSizeKnown = false; } private void startVideoPlayback() { Log.v(TAG, "startVideoPlayback"); holder.setFixedSize(mVideoWidth, mVideoHeight); mMediaPlayer.start(); } } 

В logcat это показывает onBufferingUpdate percent:100 Но я не вижу видео.

Звук работает, но внезапно он был поражен.

И я пробовал эту видео ссылку http://devimages.apple.com/iphone/samples/bipbop/gear1/prog_index.m3u8, она работает. Но моя видеосвязь не работает, и я изменил httplive://... instead of http:// но не использовал.

И я увидел этот ответ и потоки видео в формате Android mms и m3u8 .

В приведенной выше ссылке показано, что видео невозможно воспроизвести.

Solutions Collecting From Web of "Воспроизведение видео m3u8 в android"

Видео было в http://www.livestream.com . В этом есть Mobile Api для прямой трансляции.

Апи:

http://www.livestream.com/userguide/index.php?title=Mobile_API#How_to_get_mobile_compatible_clips_from_a_channel.27s_library

В приведенной ссылке есть полная информация для мобильных устройств. Чтобы получить ссылку rtsp с канала, чтобы использовать эту ссылку

http://xproshowcasex.channel-api.livestream-api.com/2.0/getstream

Замените имя своего канала вместо proshowcase . А затем получите все мобильные совместимые URL-адреса, такие как IPhone, Android, Blackberry и т.

Используя этот URL-адрес, вы можете транслировать видео на Android с помощью видео-просмотра или медиаплеера.

Для получения дополнительной информации, пожалуйста, прочитайте ссылку Mobile Api.

Если кто-то получит ту же проблему, я надеюсь, что этот ответ поможет вам.

Удачи.

У меня нет проблем играть в поток:

 videoView1.setVideoPath("http://***.net/livedemo/_definst_/stream3.stream/playlist.m3u8?wowzasessionid=773395207"); videoView1.start(); 

О сообщении:

Видео нельзя воспроизвести

Возможно, вам нужно добавить разрешения в файл манифеста:

 <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

Я думаю, вы должны переместить это:

 mMediaPlayer.setOnPreparedListener(this); 

Быть перед вызовом для prepare()

Вы пытались сыграть свою связь с родным игроком напрямую через веб-браузер? Если вы не можете воспроизвести его с помощью родного проигрывателя, это означает, что ваш файл не поддерживается текущей версией Android. Формат HTTP Live Streaming может иметь некоторые особенности, которые не очень хорошо поддерживаются Android, тогда как он может воспроизводиться на IOS.

Я пробовал формат видео m3u8 более 6 месяцев, и это не удалось. Он играет в моем приложении для iPhone и в собственных приложениях. Мой потоковый сервер – Red5, и у него нет плагина RTSP. Он выдает RTMP-потоки и не может транслироваться в Android. Я ждал один год, чтобы получить ОС, поддерживающую потоки RTSP, но у google нет. Тем не менее, я использую веб-представление с флеш-плеером для потокового видео в реальном времени (у него мало ясности). Мне стыдно сказать это моему клиенту и продолжить поиск, чтобы играть в прямом эфире в Android-плеерах по умолчанию.

Я думаю, что ваш URL-адрес видео может не быть RTSP.

Как играть .M3U8 Потоковая передача в Android

activity_main.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <VideoView android:id="@+id/myVideoView" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> 

Main.java

 package com.grexample.ooyalalive; import java.net.URL; import android.app.Activity; import android.net.Uri; import android.os.Bundle; import android.widget.MediaController; import android.widget.VideoView; public class Main extends Activity { private String urlStream; private VideoView myVideoView; private URL url; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_vv);//*************** myVideoView = (VideoView)this.findViewById(R.id.myVideoView); MediaController mc = new MediaController(this); myVideoView.setMediaController(mc); urlStream = "http://jorgesys.net/i/irina_delivery@117489/master.m3u8"; runOnUiThread(new Runnable() { @Override public void run() { myVideoView.setVideoURI(Uri.parse(urlStream)); } }); } } 

Я видел, что у многих людей проблемы с воспроизведением .M3U8, это зависит от кодеков, используемых для потоковой передачи и совместимости с устройством, например некоторые из моих файлов .m3u8 поддерживаются только в устройствах с экранами 1200 x 800 и выше.