Intereting Posts
Определение типа сетевого подключения на Android Заполнение Logcat заставляет замораживать окна, пока не будет выполнена жесткая перезагрузка Android 2.2 Webview вызывает API OpenGL ES без текущего контекста (регистрируется один раз в потоке) Как изменить рейтинг Android? Ошибка c2dm 401 при отправке сообщений после приема идентификатора и токена аутентификации Android ScrollView отказывается прокручивать донизу Android Studio – SDK устарел или отсутствует шаблоны Android Studio: как быстро перемещать стиль из layout.xml в style.xml? Ограничения квоты на Android Geocoder Проблема со вкусом Android Studio 3.0 Переопределить анимацию для notifyItemChanged в RecyclerView.Adapter Является ли Sun Java действительно необходимым для использования Android SDK на Ubuntu 10.10? Я предпочитаю OpenJDK Просмотр и выпадающий список поиска и выпадающего списка в панели действий Ограничить запрос в CursorLoader Размер растрового изображения, возвращаемого камерой с помощью намерения?

Воспроизведение видео 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 и выше.