gpt4 book ai didi

android - 使用 ffmpeg 将低延迟 RTSP 视频流式传输到 android

转载 作者:行者123 更新时间:2023-12-04 22:50:53 27 4
gpt4 key购买 nike

我正在尝试使用 KitKat 将实时网络摄像头视频从 Ubuntu 12.04 PC 流式传输到 android 设备。到目前为止,我已经编写了 ffserver 配置文件来接收 ffm 提要并通过 rtsp 协议(protocol)进行广播。我可以使用 ffplay 在同一 LAN 中的另一台计算机上观看流。

如何在安卓设备上观看直播?当使用 vlc 流式传输网络摄像头图像但不使用 ffmpeg 时,以下代码运行良好:

public class MainActivity extends Activity implements MediaPlayer.OnPreparedListener,
SurfaceHolder.Callback {

final static String RTSP_URL = "rtsp://192.168.1.54:4424/test.sdp";

private MediaPlayer _mediaPlayer;
private SurfaceHolder _surfaceHolder;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set up a full-screen black window.
requestWindowFeature(Window.FEATURE_NO_TITLE);
Window window = getWindow();
window.setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
window.setBackgroundDrawableResource(android.R.color.black);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.activity_main);

// Configure the view that renders live video.
SurfaceView videoView =
(SurfaceView) findViewById(R.id.videoView); //where R.id.videoView is a simple SurfaceView element in the layout xml file
_surfaceHolder = videoView.getHolder();
_surfaceHolder.addCallback(this);
_surfaceHolder.setFixedSize(320, 240);
}
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
_mediaPlayer = new MediaPlayer();
_mediaPlayer.setDisplay(_surfaceHolder);
Context context = getApplicationContext();
Uri source = Uri.parse(RTSP_URL);
try {
// Specify the IP camera's URL and auth headers.
_mediaPlayer.setDataSource(context, source);

// Begin the process of setting up a video stream.
_mediaPlayer.setOnPreparedListener(this);
_mediaPlayer.prepareAsync();
}
catch (Exception e) {}
}
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
_mediaPlayer.start();
}
}

我的 ffserver.config 文件:
HTTPPort 8090
RTSPBindAddress 0.0.0.0
RTSPPort 4424
MaxBandwidth 10000
CustomLog -

<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 20M
ACL allow 127.0.0.1
</Feed>
<Stream test1.sdp>
Feed feed1.ffm
Format rtp
VideoCodec libx264
VideoSize 640x480
AVOptionVideo flags +global_header
AVOptionVideo me_range 16
AVOptionVideo qdiff 4
AVOptionVideo qmin 10
AVOptionVideo qmax 51
Noaudio
ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255
</Stream>

我正在使用以下命令启动流: ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -b:v 600k http://localhost:8090/feed1.ffm

最佳答案

此错误很可能是由 VLC 和 FFmpeg 的不同编码参数引起的 - VLC 可以使用 Android 能够支持的编码参数,但 FFmpeg 可能使用不受支持的参数(很可能是 AVC 配置文件和级别)。尝试通过 FFmpeg 命令行选项和 ffserver.config 强制基线或主配置文件和 YUV 4:2:0 像素格式。

关于android - 使用 ffmpeg 将低延迟 RTSP 视频流式传输到 android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26456535/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com