VLC播放画质延迟改善方法

         前几天写的android录制视频h263编码通过rtp打包,服务器接收数据并转发,VLC通过rtsp协议请求服务器播放画质较差。后来通过以下方法改善了下画质质量以及延迟。

 1、设置合适的帧率,在这里使用24帧每秒。一般来说,这个值较大,画质较好。

2、设置合适的缓冲区,服务器接收数据的速率远大于服务器中转的速率,在接收的时候设置一个合适的缓冲区很重要,缓冲区设置过小,服务器来不及转发数据,就会出现丢帧现象。缓冲区设置过大,VLC观看会有较大的延迟。在这里,服务器接收数据的缓冲区最好比转发数据的缓冲区大得多,在这里,设置接收数据缓冲区大小是1500*10 ,转发缓冲区大小为每个packet的大小。

    

   DatagramSocket RTPsocket;	; //socket to be used to send and receive UDP packets
	  DatagramPacket receivedp; //UDP packet containing the video frames
	  byte[] buf = new byte[15000]; 
	
	
	private Thread t;
	
	public H263Packetizer() throws IOException {
		    super();	   
	   
	}
	
	public void start() throws IOException {
	 	RTPsocket= new DatagramSocket(Config.video_port);	
		if (!running) {
			running = true;
			t = new Thread(this);
			t.start();
		}
	}


public void run() {
		
			
		   while(true)
		   {
			   try 
			   {
				   receivedp = new DatagramPacket(buf,buf.length);			
				   //senddp = new DatagramPacket(buf1,buf1.length);
						 RTPsocket.receive(receivedp);
							 
			           if(receivedp.getData().length>0)
			           {  		   			        	 
			        	//   System.out.println("video length is: "+receivedp.getLength());
			        	//   System.out.println("port is"+getRtpSocket().getPort());
			        	   buffer=receivedp.getData();
			        	   getRtpSocket().upack.setData(buffer);
			        	   getRtpSocket().send(receivedp.getLength());
			           }					         
				} catch (SocketException e) {
					// TODO Auto-generated catch block
					System.out.println("Error : H263 run()");
				e.printStackTrace();
				} catch (IOException e) {	
					e.printStackTrace();
				}	
			}
	}			


 

        通过这些修改,现在VLC播放实时视频,延迟缩小到3秒以内,画质有明显的改善。

        接下来,考虑android录制音频实时播放的问题,因为spydroid里的音频编码,VLC没有效果显示。且个人认为,mediaRecorder用于语音通话等方面会有噪音等问题,打算看看speex编码库,参照sipdroid 、android recorder来实现。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值