JavaFX MediaPlayer静默无法播放Shinobi生成的H264/MPEG4视频
问题:JavaFX MediaView无法播放Shinobi生成的视频文件/流
我尝试用MediaView播放Shinobi媒体服务器生成的视频流及文件,但始终无法正常播放。当前使用Java 18搭配JavaFX 19,也试过更低版本,问题依然存在。
我有一个Shinobi生成的MP4示例文件,它能在VLC中正常播放,文件属性如下:
编码格式: H264 - MPEG-4 AVC (part 10) (avc1)
视频分辨率: 1280x720
解码格式: Planar 4:2:2 YUV full scale
色度位置: left
我已经为MediaPlayer、MediaView和Media对象都添加了错误处理器,但尝试播放该文件时,没有任何错误信息输出。
请问有人知道为什么播放器无法播放这类文件吗?有没有人成功播放过Shinobi生成的文件(Shinobi底层基于FFMPEG)?
我的播放器可以正常播放其他MP4文件,比如公开测试视频。我期望视频能正常播放,或者播放器能明确告知无法播放的原因。
以下是我的测试代码:
package com.example.videotester; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.GridPane; import javafx.scene.media.Media; import javafx.scene.media.MediaPlayer; import javafx.scene.media.MediaView; import javafx.stage.Stage; import java.io.File; public class HelloApplication extends Application { @Override public void start(Stage stage) throws Exception { Button button1 = new Button("Play"); Button button2 = new Button("Pause"); Button button3 = new Button("Stop"); String path = "C:/Users/Rob/Desktop/rlrO5DVBJS-2022-10-26T20-52-34.mp4"; File f = new File(path); path = f.toURI().toString(); // path="http://192.168.1.239:8080/532046fecc8da376f3f32f5518bad33b/videos/NUW6mXm9CF/rlrO5DVBJS/2022-10-26T14-32-07.mp4"; // path="http://192.168.1.239:8080/2921f1ca7204e640734709e29fc2033f/hls/NUW6mXm9CF/rlrO5DVBJS/s.m3u8"; // path="http://192.168.1.239:8080/2921f1ca7204e640734709e29fc2033f/h265/NUW6mXm9CF/rlrO5DVBJS/s.hevc"; // path="http://192.168.1.239:8080/2921f1ca7204e640734709e29fc2033f/mp4/NUW6mXm9CF/rlrO5DVBJS/s.mp4"; // path="http://192.168.1.239:8080/5ee9ca532fd17f860e3cef43a288b951/mjpeg/NUW6mXm9CF/rlrO5DVBJS"; //mjpeg // path="http://192.168.1.239:8080/f7fb8d581d5aab4ebb8732de13b61337/videos/NUW6mXm9CF/rlrO5DVBJS/2022-10-26T15-57-19.mp4"; // path="http://192.168.1.239:8080/5ee9ca532fd17f860e3cef43a288b951/videos/NUW6mXm9CF/rlrO5DVBJS/2022-10-27T19-49-31.mp4"; // path="http://192.168.1.239:8080/c6c8a86382548433c505d9e7cf7c2085/videos/NUW6mXm9CF/rlrO5DVBJS/2022-10-26T04-05-00.mp4"; // path="https://coderslegacy.com/wp-content/uploads/2020/07/Pygame_Platformer-1.mp4"; // path="https://www.dropbox.com/s/h1ky0he5dvclhkt/rlrO5DVBJS-2022-10-30T20-53-29.mp4?dl=0"; final Media media; final MediaPlayer mediaPlayer; MediaView mediaView = null; try { media = new Media(path); if (media.getError() == null) { media.setOnError(() -> System.out.println("media player error : " + media.getError())); try { mediaPlayer = new MediaPlayer(media); mediaPlayer.setAutoPlay(true); button1.setOnAction(e -> mediaPlayer.play()); button2.setOnAction(e -> mediaPlayer.pause()); button3.setOnAction(e -> mediaPlayer.stop()); mediaPlayer.setOnReady(() -> System.out.println("Video player ready")); if (mediaPlayer.getError() == null) { mediaPlayer.setOnError(() -> System.out.println("media player error : " + mediaPlayer.getError())); mediaView = new MediaView(mediaPlayer); mediaView.setOnError(mee -> System.out.println("media view error : " + mee)); } else System.out.println("Error in media player: " + mediaPlayer.getError()); } catch (Exception mediaPlayerException) { System.out.println("media player exception " + mediaPlayerException); } } else System.out.println("Error media creating media " + media.getError()); } catch (Exception mediaException) { System.out.println("Handle exception " + mediaException); System.exit(1); } GridPane layout = new GridPane(); layout.setHgap(10); layout.setVgap(10); layout.add(button1, 0, 0); layout.add(button2, 1, 0); layout.add(button3, 2, 0); layout.add(mediaView, 0, 1, 4, 1); Scene scene = new Scene(layout, 300, 200); stage.setTitle("Video Player Tester"); stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(); } }
内容的提问来源于stack exchange,提问作者Rob Ratcliff
相关产品推荐
相关产品推荐

