LVC 播放器提供buffer自定义读写的方法,但是并没有开放到Java层,并且关于此类的应用也并不多;不过用到的也很少;下面就简单介绍应用的方法:

在LVC 中的lvc\lib\media.c中已经提供其应用接口,接口如下:

libvlc_media_t *libvlc_media_new_callbacks(libvlc_instance_t *p_instance,
                                           libvlc_media_open_cb open_cb,
                                           libvlc_media_read_cb read_cb,
                                           libvlc_media_seek_cb seek_cb,
                                           libvlc_media_close_cb close_cb,
                                           void *opaque);

简单的使用方法就是在lvclibjni_media.c 实现其jni的接口;方法如下:

static int opaque;
static bool isFifoReadStop = false;int media_open_cb(void *opaque, void **datap,uint64_t *sizep)
{<pre name="code" class="objc">printf("%s", __FUNCTION__);

return 0;}ssize_t media_read_cb(void *opaque, unsigned char *buf, size_t len){ int readLen = 0; int oneLen = 0; void *p_read_buffer = NULL; readLen = 0;while(isFifoReadStop == false){ oneLen = getFifobuf(&p_read_buffer,len - readLen); if(oneLen > 0) { memcpy(buf+readLen,p_read_buffer,oneLen); readLen += oneLen; } if(readLen >= len) { break; }} if(isFifoReadStop != false) {

printf("media_read_cb  stop read data\n");

return -1; } //printf("read:%ld byte ~ %ld byte\n",readLen,len); if((readLen <= 0) ||(readLen > len)) { printf("media_read_cb no data or stop read len = %d get len = %d\n",readLen,len); readLen = 0; return -1; } return (ssize_t)readLen;}void media_close_cb(void *opaque){

//printf("%s", __FUNCTION__);

}int media_seek_cb(void *opaque, uint64_t offset){ return 0;}voidJava_org_videolan_libvlc_Media_nativeNewFromBufferCallBack(JNIEnv *env, jobject thiz, jobject libVlc){ vlcjni_object *p_obj; int fd = (*env)->GetIntField(env, jfd, fields.FileDescriptor.descriptorID); if ((*env)->ExceptionOccurred(env)) { (*env)->ExceptionClear(env); fd = -1; } if (fd == -1) { throw_IllegalArgumentException(env, "fd invalid"); return; } p_obj = VLCJniObject_newFromJavaLibVlc(env, thiz, libVlc); if (!p_obj) return; p_obj->u.p_m = libvlc_media_new_callbacks(p_obj->p_libvlc, media_open_cb, media_read_cb, media_close_cb, media_seek_cb, &opaque); Media_nativeNewCommon(env, thiz, p_obj);} 在media.java中实现调用

 private native void nativeNewFromBufferCallBack(LibVLC libVLC);public Media(LibVLC libVLC) {nativeNewFromBufferCallBack(libVLC);}

如果,不希望在jni中实现数据的读取接口,则可以在Java中实现,在回调函数中调用Java类中实现的接口即可,此次略过;

实现的另外一种方法,是不通过更改media的jni,而通过更改mediaplay jni来更改media的参数即可;

方法如下:

#include <android/log.h>
#include <vlc/libvlc.h>
#include <vlc/libvlc_media.h>
#include <vlc/libvlc_media_list.h> // For the subitems, here for convenience
#include <vlc/libvlc_events.h>
#include <vlc_common.h>
#include <vlc_input.h>
#include <vlc_meta.h>
#include <vlc_playlist.h> /* For the preparser */
#include <vlc_url.h>
#include "libvlc_internal.h"
#include "media_internal.h"
#include "Fifobuf.h"....
void
Java_org_videolan_libvlc_MediaPlayer_nativeSetMediaBufferCallback(JNIEnv *env,jobject thiz,jobject jmedia)
{libvlc_media_t *p_m = NULL;vlcjni_object *p_obj = VLCJniObject_getInstance(env, thiz);if (!p_obj)return;if (jmedia){vlcjni_object *p_m_obj = VLCJniObject_getInstance(env, jmedia);if (!p_m_obj)return;p_m = p_m_obj->u.p_m;LOGI("register media buffer callback\n");input_item_AddOpaque(p_m->p_input_item, "imem-data", opaque);input_item_AddOpaque(p_m->p_input_item, "imem-open", media_open_cb);input_item_AddOpaque(p_m->p_input_item, "imem-read", media_read_cb);input_item_AddOpaque(p_m->p_input_item, "imem-seek", media_seek_cb);input_item_AddOpaque(p_m->p_input_item, "imem-close", media_close_cb);}}

Java实现如下:

private native void nativeSetMediaBufferCallback(Media media);public void setSetMediaBufferCallback(Media media){nativeSetMediaBufferCallback(media);}

调用方法不变,但是参数需要更改为:

           String playUrl = "imem://";Uri uri = Uri.parse(playUrl);if(mMedia != null){mMedia.release();}mMedia = new Media(libvlc, uri);mVlcPlayer.setSetMediaBufferCallback(mMedia);mVlcPlayer.setMedia(mMedia);

LVC 播放器buffer自定义读写的方法相关推荐

  1. bt种子播放器WebTorrent for Mac使用方法

    WebTorrent for Mac这是一款Mac平台上非常好用的bt种子在线播放器,支持种子和边播放边下载.WebTorrent Mac版不仅可以用来BT下载,还可以边下边播,使用简单,拖动种子文件 ...

  2. PPT中WMP播放器控件的使用方法

    Windows Media Player是个十分好用的播放器,它支持多个格式视频.音频文件的播放,在PPT 2003中使用的频率非常的高. 本文以PPT 2003为例,讲解一下PPT 2003中WMP ...

  3. 直播商城系统源码,播放器aliPlayer自定义清晰度切换

    直播商城系统源码,播放器aliPlayer自定义清晰度切换 <!DOCTYPE html> <html><head><meta charset="u ...

  4. iOS 使用AVPlayer自定义的播放器,当手机在静音模式播放器也静音的解决方法!

    在appdelegate中添加一下代码,可解决手机在静音模式播放器也静音的问题! AVAudioSession *avSession = [AVAudioSessionsharedInstance]; ...

  5. 网页播放器实现全屏的方法总结

    网页播放器全屏的方法(有点气,少写了)这是自己总结的,刚刚要完的时候点错了,重新发送一次,老子好气,该打游戏的时间,浪费了,这里就偷工减料了! 1.media player全屏方法 <scrip ...

  6. H.265网页播放器EasyPlayer对外开放录像的方法

    我们在前期的文章中给大家介绍过关于EasyPlayer可支持视频实时录像的功能,实现了轻量化.便捷化的视频资源下载能力,极大节省了带宽与计算资源,感兴趣的用户可以翻阅我们往期的文章进行了解. 今天我们 ...

  7. 【安卓】Android播放器的三种实现方法

    转载自:http://blog.csdn.net/wozuihaole/article/details/60867076 今天来说一下Android中怎么实现视频播放,我主要说三种: 1.MediaP ...

  8. SkeyePlayer Windows播放器OSD字幕叠加接口方法和使用效果全解析

    SkeyePlayer RTSP Windows播放器新增OSD字幕叠加接口方法,这个接口和码率信息显示接口方法类似,都是调用FFRender库的接口实现的多OSD叠加,下面讲解下该方法的调用和注意事 ...

  9. Android播放器的三种实现方法

    转载自:http://blog.csdn.net/wozuihaole/article/details/60867076 今天来说一下Android中怎么实现视频播放,我主要说三种: 1.MediaP ...

最新文章

  1. 研究一下,如何实现一个文件系统
  2. 洛谷P1020/CODEVS1044 导弹拦截(拦截导弹)
  3. 像“打游戏”一样用Numpy,可视化编程环境Math Inspector了解一下? | 代码开源
  4. idea springboot 无法run_2021 最新版 Spring Boot 速记教程
  5. 打开工程会提示下载的可能原因和可能解决方法
  6. 分布式文件系统研究-fastDFS安装及配置文件说明
  7. 第九次psp例行报告
  8. 前端学习(2382):js编码规范说明
  9. C#面向对象17 23种设计模式
  10. 用Python下载风云四号高清卫星云图
  11. 管家婆服务器支持win7,Windows7多种措施 打造无敌驱动管家婆
  12. android actionBar searchview 默认展开,并且放大镜图标在编辑框内。
  13. 第十一章 性能与可伸缩性(待续)
  14. 收集的一些学习ios的好网站
  15. 软件测试有白和黑盒和灰盒,白盒测试、灰盒测试和黑盒测试的区别
  16. Meteor android apk打包两种方式
  17. 认证管理(锐捷业软篇)
  18. python 笔记6:格式化时间缩写
  19. Spring boot系统拦截处理异常调转404/500页面
  20. 联想服务器x3250 m5文档,【联想x3250 M5参数】联想x3250 M5系列服务器参数-ZOL中关村在线...

热门文章

  1. 重磅 | 揭秘IARPA项目:解码大脑算法或将彻底改变机器学习
  2. python 协程库gevent学习 -- 超时、互斥锁(BoundedSemaphore)、local
  3. Linux0号进程,1号进程,2号进程
  4. pycharm中的红色小闪电
  5. 单元格中公式结果为0如何不显示0符号?
  6. 英伟达 Jetson Nano 新手必备:使用CSI或USB摄像头拍摄第一张照片
  7. 英特尔的新硬件套装使制作机器人和无人机更加简单
  8. 有人负责,才有质量:写给在集市中迷失的一代
  9. python基础----文件处理
  10. Cent OS虚拟机安装最新详细教程