GaHingZ 发布的文章

一些面试笔试题_2017校招


1.音视频不同步的原因:

一般是客户端的问题。

由于音视频包都会带上时间戳,出现不同步的根本原因是客户端取出当前数据包解码放入缓冲队列,进行渲染时(在这做同步)不能从缓冲队列中同时找到当前时间戳的视频解码数据和音频解码数据,所以只能先取其中一个拿个渲染。

(注:拿去渲染后,如果时间戳同步,渲染一般不会出现不同步的情况,硬件处理相对成熟);

渲染不同步,可以说是缓冲队列设置太小,没有考虑网络不好数据包传输慢或者需要丢包重传的情况。 当然还有可能是解码的问题,音视频其中之一的解码效率太慢,而缓冲队列设置合适,稍微不好一点的网络情况导致解码数据包(音频or视频)来不及放入缓冲队列。

如果是服务端的问题,比较不好处理。

音视频线程数据采集速度不同步(和采集卡有关),封装协议时就已经出现同一时间戳的音视频包实际是不同步的情况。


《Java并发编程》笔记_


1.synchronized 基础

1.1synchronized 实例方法与静态方法的区别

1.2重入不死锁

public class Base {
    public  synchronized void say (){
        System.out.println("Base");
    }

}

public class Child extends Base{

    @Override
    public synchronized void say() {
        // TODO Auto-generated method stub
        System.out.println("Child");
        super.say();//正常super.say方法获取不到对象锁(重入),不过由于处于同一个锁,系统解决该问题了。
    }
}
    public static void main(String[] args) {
        // TODO Auto-generated method stub
//      testClassAndObject();
        Child c=new Child();
        c.say();
    }


ThreadLocal_


源码未看完,先占坑

每个Thread维护一个ThreadLocalMap

获取ThreadLocalMap

/**
     * Get the map associated with a ThreadLocal. Overridden in
     * InheritableThreadLocal.
     *
     * @param  t the current thread
     * @return the map
     */    
ThreadLocalMap getMap(Thread t) {
            return t.threadLocals;
        }


video标签下触摸坐标归一化[考虑全屏,转屏,PC/Mobile Web/WebView]


先给出一些基本知识

触摸点位置

clientX / clientY:// 触摸点相对于浏览器窗口viewport的位置  参照点会随着浏览器的滚动而变化
pageX / pageY:// 触摸点相对于页面的位置  参照点不会随着浏览器的滚动而变化
screenX /screenY:// 触摸点相对于屏幕的位置 

所以如果要算鼠标在当前div的相对位置 通过获取var offset = $("#mainScreen").offset();后 当前鼠标的绝对位置要用pageX/Y去拿 否则浏览器页面滚动后会少算一段

触摸事件

PC

onmousemove script  当鼠标指针移动到元素上时触发。
onmouseout  script  当鼠标指针移出元素时触发。
onmouseup 属性在松开鼠标按钮时触发。
提示:相对于 onmouseup 事件的事件次序(限于鼠标左/中键):
onmousedown
onmouseup
onclick
onmouseup 事件的事件次序(限于鼠标右键):
onmousedown
onmouseup
oncontextmenu
onMouseover和onMousemove有什么区别?
区别是进入后onmousemove鼠标每动一下都会执行事件,onmouseover只在鼠标进入时执行一次

Mobile

基本事件如下,其他的都是对这些事件的组合封装

mainScreen.addEventListener("touchmove", touchMove, false);//手指在屏幕上移动时触发[不动但停留太久也会触发]
mainScreen.addEventListener("touchstart", touchStart, false);//手指一触摸屏幕就触发
mainScreen.addEventListener("touchend", touchEnd, false);//手指离开屏幕触发


流媒体直播—WebRTC native 2 browser


关于browser 2 browser的网上文章很多,我就不介绍了。 可以参考我的这篇文章流媒体直播——资料整理、你想要了解的都在这 里面给的链接可以去看看 这边我要讲的是WebRTC编译后的执行文件Web端进行交互。

首先要明确的是,browser 2 browser的应用场景太狭小了:视频通话... 而编译WebRTC我们就可以做更多的事:屏幕共享.. 录播.. 远程教育【切换通话和屏幕】.. 因为视频源我们是可控的,不像Web. 【其实b2b也可以做屏幕共享,不过c2b会比较可控】

编译WebRTC是一件麻烦的事,可以参考上面那篇文章。 这里我直接给出两个可运行程序

下载地址:http://pan.baidu.com/s/1bVpx9O

如果网盘挂了请提醒我( 说的好像是什么不健康的东西是的= =