我正在尝试将视频从VLC流式传输到HTC G1。经过几次“这应该工作”之后,我发现了一个让我通过VLC观看流的sout-chain。我也能听到android上的音频。
我正在使用的sout-chain:
vlc some_file.mp4 -I http --sout "#transcode{soverlay,ab=128,samplerate=44100,channels=2,acodec=mp4a,vcodec=h264,width=480,height=270,vfilter="canvas{width=480,height=270,aspect=16:9}",fps=25,vb=800,venc=x264{level=12,no-cabac,subme=20,threads=4,bframes=0,min-keyint=1,keyint=50}}:gather:rtp{mp4a-latm,sdp=rtsp://0.0.0.0:5554/stream.sdp}"
这就是我在机器人上做的事情:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
vv = (VideoView) findViewById(R.id.video_view);
vv.setVideoURI(Uri.parse("rtsp://<local_ip>:5554/stream.sdp"));
vv.start();
}
我尽量保持尽可能小(这实际上是我在另一个线程中找到的一个例子)。 我也尝试过使用MediaPlayer:
MediaPlayer mp = MediaPlayer.create(this, Uri.parse("rtsp://<local_ip>:5554/stream.sdp"));
mp.setDisplay(vv.getHolder());
mp.start();
我使用setDisplay(SurfaceHolder)导致有人提到MediaPlayer,否则不知道要使用什么显示器。
知道我错过了什么或做错了吗?
编辑:我用MP4Box暗示了该文件
答案 0 :(得分:0)
首先,我认为您的音频编码器存在问题,它显示“MPEG-1/2视频”不是音频编码器,请您试试“mpga”吗?
另一个问题是你试图将帧调整到指定的大小,宽度= 480,高度= 270,你能删除这个部分吗?
我的命令有效:
vlc /Users/chenyu/Sites/BBC.mp4 -I http --sout“#transcode {soverlay,ab = 128,samplerate = 44100,channels = 2,acodec = mpga,vcodec = h264,fps = 25, VB = 800,VENC = X264 {等级= 1,无CABAC,次亚= 20,线程= 4,B-帧= 0,最小在keyint = 1,在keyint = 50}}:收集:RTP {MP4A-个大气压,SDP = RTSP://10.0.1.2:5554 / stream.sdp}“
你也可以在android端尝试以下代码吗?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final VideoView vidView = (VideoView)findViewById(R.id.myVideo);
MediaController vidControl = new MediaController(this);
vidControl.setAnchorView(vidView);
vidView.setMediaController(vidControl);
vidView.setVideoPath("rtsp://10.0.1.2:5554/stream.sdp");
vidView.start();
}