Android视频电视在模拟器上播放流,而不是在真实设备上播放



我正在尝试在我的Android手机上播放来自Raspberry Pi的流。我在这样的视频中找到了可以播放此流的代码:

private void playStream(String src){
 Uri UriSrc = Uri.parse(src);
    if(UriSrc == null){
     Toast.makeText(MainActivity.this, 
      "UriSrc == null", Toast.LENGTH_LONG).show();
    }else{
     streamView.setVideoURI(UriSrc);
        mediaController = new MediaController(this);
        streamView.setMediaController(mediaController);
        streamView.start();
        Toast.makeText(MainActivity.this, 
         "Connect: " + src, 
         Toast.LENGTH_LONG).show();
    }
}

其中SRC是具有IP/端口的普通字符串。

当我将其运行在模拟器中时,SRC指向我的本地Raspberry Pi @端口8090,它开始按预期显示流。

我什至发现我可以使用IP/端口字符串启动本机Android播放器,并且它将以全屏模式打开。

Intent intent = new Intent(Intent.ACTION_VIEW );
intent.setDataAndType(Uri.parse("http://192.168.2.189:8090"), "video/*");
startActivity(intent);

但是,当我创建APK并在Android 6设备(A5 2016)上安装并运行此版本时,第一个版本只会告诉我"对不起,无法播放此视频",而第二版将无限加载。曾经展示某些东西。

有人可以帮忙吗?我真的不想使用像VLC播放器这样的第三方应用程序查看流,但请在我自己的应用程序或Android本地视频播放器中显示。

注意:该流在我的手机上的VLC应用中运行得很好。

附加信息:

这是PI上使用的命令来创建流:

raspivid -o - -t 0 -w 1280 -h 720 -fps 25 | cvlc stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:8090}' :demux=h264

我的解决方案:

使用另一种流格式。

我现在使用HLS,它要求您在Raspberry Pi上设置HTTP服务器。

请注意,HLS将在Android和iPhone上使用,但在Windows PC浏览器上不使用(Microsoft Edge除外)。

我的结论:

以前使用的格式不与Android兼容。然而,它以某种方式在模拟器中起作用。

Android应用中使用的最终代码:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("http://192.168.2.189/hls/stream.m3u8"),"video/*");
startActivity(intent); 

Raspberry Pi步骤创建流数据:

在您的网站路径中创建一个新文件夹。这不是必需的,但是要使流段与其他网络范围分开。

接下来创建这样的脚本以启动您的流:

#!/bin/bash
set -x
base="/var/www/pisite/hls/"
raspivid -n -ih -t 0 -w 1280 -h 720 -fps 25 -o - | sudo ffmpeg -y 
-i - 
-c:v copy 
-map 0 
-f ssegment 
-segment_time 1 
-segment_format mpegts 
-segment_list "$base/stream.m3u8" 
-segment_list_size 10 
-segment_wrap 20 
-segment_list_flags +live 
-segment_list_type m3u8 
"$base/%03d.ts"

这将创建由Android应用访问的stream.m3u8文件。它只会使用10个段文件,因此可以无限期运行。

请注意,您的PI需要一些启动时间,然后再通过应用程序连接到流或失败。

最新更新