尝试在 exoplayer 中播放原始文件,但我收到错误并且该文件不存在,我不太确定为什么,我将不胜感激,谢谢您的帮助。
Source error
com.google.android.exoplayer2.upstream.HttpDataSource$HttpDataSourceException: Unable to connect to android.resource://com.onBoarding.app2131689472
@UnstableApi public class FirstFragment extends Fragment {
private TextView titleTextView,descriptionTextView;
private Button prevButton,nextButton;
private CustomVideoView videoView;
private ViewPager viewPager;
SimpleExoPlayerView exoPlayerView;
SimpleExoPlayer exoPlayer;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.first_fragment_layout, container, false);
titleTextView = view.findViewById(R.id.titleTextView);
// videoView = view.findViewById(R.id.videoView);
exoPlayerView = view.findViewById(R.id.idExoPlayerVIew);
descriptionTextView = view.findViewById(R.id.descriptionTextView);
nextButton = view.findViewById(R.id.nextButton);
viewPager = requireActivity().findViewById(R.id.viewPager);
return view;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
titleTextView.setText(Utils.getTitle().get(0));
descriptionTextView.setText(Utils.getDescriptions().get(0));
playVideo();
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewPager.setCurrentItem(1);
}
});
}
private void playVideo() {
try {
Uri uri = Uri.parse("android.resource://"+ getContext().getPackageName() +"/"+ R.raw.sample);
BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
TrackSelector trackSelector = new DefaultTrackSelector(new AdaptiveTrackSelection.Factory(bandwidthMeter));
exoPlayer = ExoPlayerFactory.newSimpleInstance(requireContext(), trackSelector);
DefaultHttpDataSourceFactory dataSourceFactory = new DefaultHttpDataSourceFactory("exoplayer_video");
ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
MediaSource mediaSource = new ExtractorMediaSource(uri, dataSourceFactory, extractorsFactory, null, null);
exoPlayerView.setPlayer(exoPlayer);
exoPlayer.prepare(mediaSource);
exoPlayer.setPlayWhenReady(true);
} catch (Exception e) {
Log.e("TAG", "Error: " + e.toString());
}
}
}
implementation 'com.google.android.exoplayer:exoplayer:r2.4.0'
implementation 'com.google.android.exoplayer:exoplayer-core:r2.4.0'
implementation 'com.google.android.exoplayer:exoplayer-dash:r2.4.0'
implementation 'com.google.android.exoplayer:exoplayer-hls:r2.4.0'
implementation 'com.google.android.exoplayer:exoplayer-smoothstreaming:r2.4.0'
implementation 'com.google.android.exoplayer:exoplayer-ui:r2.4.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.11.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.media3:media3-exoplayer:1.3.0-alpha01'
testImplementation 'junit:junit:4.13.2'
implementation 'androidx.core:core:1.12.0'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
我认为最好使用资产文件夹来存放媒体文件 我希望这段代码可以帮助你。
String videoPath = "your_video_filename.mp4"; // Replace with your video file name
AssetFileDescriptor assetFileDescriptor;
try {
assetFileDescriptor = getAssets().openFd(videoPath);
videoView.setVideoURI(Uri.parse("asset:///" + videoPath));
videoView.setMediaController(new MediaController(this));
videoView.requestFocus();
videoView.start();
} catch (IOException e) {
e.printStackTrace();
}
}
它使用videoview 替换为exoplayer