Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android应用程序片段上的视频流_Java_Android_Firebase_Kotlin_Video Streaming - Fatal编程技术网

Java android应用程序片段上的视频流

Java android应用程序片段上的视频流,java,android,firebase,kotlin,video-streaming,Java,Android,Firebase,Kotlin,Video Streaming,我想在我的android应用程序片段中,从firebase存储流式传输视频。但是,即使我尝试我的视频也无法启动,或者当我请求片段时,应用程序崩溃。作为一名初学者,我跟随了一首芭蕾舞曲,所以我使用了一名外星手。 这是我的片段代码: import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx

我想在我的android应用程序片段中,从firebase存储流式传输视频。但是,即使我尝试我的视频也无法启动,或者当我请求片段时,应用程序崩溃。作为一名初学者,我跟随了一首芭蕾舞曲,所以我使用了一名外星手。 这是我的片段代码:

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;



public class PubliciteFragment extends Fragment  {
private RecyclerView recyclerView;

@Override
public View onCreateView(
        LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState
){
    View view = inflater.inflate(R.layout.fragment_publicite,container,false);
    recyclerView = view.findViewById(R.id.recyclerview);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext()));

    return view;
}}
吸毒成瘾:

import android.app.Application;
import android.net.Uri;
import android.util.Log;
import android.view.View;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.google.android.exoplayer2.ExoPlayerFactory;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory;
import com.google.android.exoplayer2.extractor.ExtractorsFactory;
import com.google.android.exoplayer2.source.ExtractorMediaSource;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.trackselection.TrackSelector;
import com.google.android.exoplayer2.ui.PlayerView;
import com.google.android.exoplayer2.upstream.BandwidthMeter;
import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter;
import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory;

public class RecyclerViewHolder extends RecyclerView.ViewHolder {
   SimpleExoPlayer exoPlayer;
   PlayerView playerView;
public RecyclerViewHolder(@NonNull View itemView){
    super(itemView);
}

public void setExoPlayer(Application application){
    playerView = itemView.findViewById(R.id.exoplayer_item);
    try {
        BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter.Builder(application).build();
        //TrackSelector trackSelector = new DefaultTrackSelector(new 
        AdaptiveTrackSelection.Factory(bandwidthMeter))
        exoPlayer = (SimpleExoPlayer) ExoPlayerFactory.newSimpleInstance(application);
        Uri video = Uri.parse("https://firebasestorage.googleapis.com/v0/b/gombo03- 
        450bb.appspot.com/o/Forza%20Horizon%204%202020-07-01%2018-16-35_Trim.mp4? 
        alt=media&token=443a28c2-0838-4957-a6cf-86093772a90d");
        DefaultHttpDataSourceFactory dataSourceFactory = new DefaultHttpDataSourceFactory("video");
        ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
        MediaSource mediaSource = new 
        ExtractorMediaSource(video,dataSourceFactory,extractorsFactory,null,null);
        playerView.setPlayer(exoPlayer);
        exoPlayer.prepare(mediaSource);
        exoPlayer.setPlayWhenReady(false);
    }catch (Exception e){
        Log.e("PubliciteFragment", "exoplayer error"+e.toString());
    }

}}
xml文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/recyclerview"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardUseCompatPadding="true"
app:cardCornerRadius="2dp">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
<com.google.android.exoplayer2.ui.PlayerView
    android:layout_width="match_parent"
    android:layout_height="230dp"
    android:id="@+id/exoplayer_item"
    android:layout_margin="3dp"
    app:use_controller="true"
    app:resize_mode="fill"/>

</LinearLayout>

</androidx.cardview.widget.CardView>

您将收到以下错误:

java.lang.ClassCastException:androidx.cardview.widget.cardview不能是
强制转换为androidx.recyclerview.widget.recyclerview

因为在“PubliciteFragment”中声明了一个变量:

private RecyclerView recyclerView;
其实例化如下所示:

recyclerView = view.findViewById(R.id.recyclerview);
cardView = view.findViewById(R.id.card_view);
这是不正确的,因为在“fragment_publicite”布局文件中,具有“recyclerview”id的视图实际上是CardView,而不是recyclerview,因此出现错误:

要解决此问题,您需要将XML文件中CardView的ID从以下位置更改为:

android:id="@+id/recyclerview"
致:

添加新的变量声明:

private CardView cardView;
并将其实例化如下:

recyclerView = view.findViewById(R.id.recyclerview);
cardView = view.findViewById(R.id.card_view);
老实说,我在XML中看不到一个文件是一个RecyclerView。假设有一个不是最初添加的,要找到它,请使用以下代码行:

recyclerView = cardView.findViewById(R.id.recycler_view);

请添加应用程序崩溃时出现的错误。此外,我没有看到你设置的球员的看法。exoPlayer.setView(playerView);。在准备播放机之前尝试此操作。如果应用程序崩溃,则会出现堆栈跟踪。请在logcat上查找,并将其添加到您的问题中。请回复@AlexMamo@AkshayShenoyexoPlayer.setView(playerView)不存在,但我认为playerView.setPlayer(exoPlayer)存在。@AlexMamo,当应用程序在logcat中崩溃时,我没有任何特定的错误行,因此我添加了运行错误。如果这还不够,我将尝试复制粘贴更多的日志行,我可以。thk的为您的帮助