首页 文章 精选 留言 我的

精选列表

搜索[多媒体框架],共10008篇文章
优秀的个人博客,低调大师

GStreamer 1.28.5 发布,开源多媒体框架

GStreamer 1.28.5 现已发布,此版本包含错误修复和一些安全修复。具体更新内容如下: 修复了多个安全问题和播放问题 修复 AMD GPU上使用 VA 解码器时字幕出现 green flickering的问题 appsrc:统一处理推送的 EOS 事件 audio-resampler-neon 无法为带有 neon 但没有 thumb 的目标构建 avtp:从 avtp 时间戳正确生成 ptime gldownload:修复导致 R/B 声道互换的错误 DRM 格式协商。 gdkpixbufdec:将 rank 降至 NONE 并处理分辨率/格式更改 gopbuffer:添加对 H.266/VVC 的支持 mp4mux:修复 AC-3 template caps,使复用器能够接受来自 ac3parse 的输入 mpegtsmux:在 CBR 模式下始终将 PTS 分配给输出缓冲区 mpegtsmux:仅包含 PCR 比特率填充包的输出缓冲区具有错误的 PTS rtcpbuffer:修复 SR+SDES 复合数据包的解析问题(安全修复导致的回归问题) rtspsrc2:允许禁用 SRTP/SRTCP 加密和 SRTP 身份验证 tsdemux:改进ignore-pcr 模式下的 PTS rollover 处理,修复 YouTube HLS 流的间歇性损坏问题 textaccumulate:输出合并后的单个缓冲区,并将列表添加为元数据 threadshare:添加 ts-clocksync webrtcsink:negotiation 修复和改进 修复了各种错误、build修复、内存泄漏问题,并提高了稳定性和可靠性。 有关更多详细信息,可参阅GStreamer 1.28.5 发行说明。 Android、iOS、Mac OS X 和 Windows 的二进制文件即将推出,并将发布在下载页面上。

优秀的个人博客,低调大师

GStreamer 1.26.10 发布,开源多媒体框架

GStreamer 1.26.10 现已发布,此版本仅包含错误修复。具体更新内容如下: curlhttpsrc 的修复和改进 decklinkvideosink:修复firmware14.3 及更高版本中的 rame completion callbacks flac:修复 6.1 和 7.1 channel layouts,并支持 32 位音频的编码和解码 glimagesink:修复对奇数高度缓冲区的处理 matroskademux:将允许的最大块大小设置得足够大,以支持 4K 无压缩视频。 mxf:添加对自定义 Sony XDCAM 视频变体的支持 opusenc:多声道和环绕声处理改进 playbin3:改进了 HLS/DASH 流选择处理,修复了使用 adaptivedemux2 时禁用和重新启用音频/视频流的问题。 qtmux:针对以时间戳偏移量开头的流,改进了稳健的录制模式剩余空间估算。 splitmuxsrc seeking 改进 在 DASH 清单中支持 FLAC 音频。 Python bindings:修复了 pad probe callbacks 中缓冲区不再可写的问题 Cerbero:为 GstApp 添加 Python 绑定;Windows 安装程序改进 修复了各种错误、版本问题、内存泄漏问题,并提高了稳定性和可靠性。 有关更多详细信息,可参阅GStreamer 1.26.10 发行说明。 Android、iOS、Mac OS X 和 Windows 的二进制文件即将推出,并将发布在下载页面上。

优秀的个人博客,低调大师

GStreamer 1.26.9 发布,开源多媒体框架

GStreamer 1.26.9 现已发布,此版本仅包含错误修复。具体更新内容如下: playback:playbin3 和 decodebin3 稳定性修复 针对 AJA playout 和 Blackmagic Decklink capture cards 的辅助元数据处理修复 HLS 和 DASH 自适应流媒体客户端稳定性改进 gst-play-1.0 现可重新输出缺失插件的详细信息 gtk4paintablesink:添加属性以微调窗口大小调整时的重新配置行为 macOS device monitoring:修复探测音频设备时可能发生的崩溃问题 macOS 视频解码器稳定性改进 NDI source:修复非交错音频带步长填充时的音频损坏问题 添加 SMPTE ST291-1 辅助元数据 RTP payloader 和 depayloader 添加 ST-2038 元数据组合器和提取器 webrtcsink:支持来自 `va` VA-API 插件的硬件加速编码器 spotifysrc:通过使用 Spotify 的扩展元数据端点来修复 Spotify 集成。 Python 绑定交叉编译修复 cerbero:添加 Visual Studio 2026 支持,修复在 C:\ 以外的驱动器上构建的问题,并在 Windows 上发布 svtjpegxs 插件。 修复了各种错误、版本问题、内存泄漏问题,并提高了稳定性和可靠性。 有关更多详细信息,可参阅GStreamer 1.26.9 发行说明。 Android、iOS、Mac OS X 和 Windows 的二进制文件即将推出,并将发布在下载页面上。

优秀的个人博客,低调大师

GStreamer 1.26.7 发布,开源多媒体框架

GStreamer 1.26.7 现已发布,此版本仅包含错误修复。具体更新内容如下: cea608overlay:改进非系统内存的处理 cuda:修复 CUDA 13.0 环境下的运行时内核编译 d3d12:修复转换器中的 crop meta 支持和 deinterlacer 中的 passthrough handling fallbacksrc:源处理改进;no-more-pads signal for streams-unaware parents inter:添加属性来微调内部元素 qtdemux:GoPro 视频的环绕声通道布局处理修复和性能改进 rtp:添加线性音频(L8、L16、L24)RTP payloaders / depayloaders rtspsrc:以 TCP/interleaved 模式发送 RTSP keepalive rtpamrpay2:帧质量指示器标志相关修复 rtpbasepay2:尽可能重用最后一个 PTS,以解决 NVIDIA Jetson AV1 编码器的问题 mpegtsmux、tsdemux:Opus 音频处理修复 threadshare:与延迟相关的改进和许多其他修复 matroskamux、tsmux、flvmux、cea608mux:修复 EOS 状态下的最佳缓冲区确定机制 视频速率未知缓冲区持续时间断言失败,帧速率可变 editing services:使 GESTimeline 遵守“SELECT_ELEMENT_TRACK”signal discard decision;修复内存泄漏 gobject-introspection 注释修复 cerbero:将 meson 更新至 1.9.0 以实现 Xcode 26 兼容性 各种错误修复、构建修复、内存泄漏修复以及其他稳定性和可靠性改进 有关更多详细信息, 可参阅GStreamer 1.26.7 发行说明。

优秀的个人博客,低调大师

android中的多媒体应用camera

MainActivity.java 代码 packagecom.amaker.ch11.app; importjava.io.File; importjava.io.FileOutputStream; importjava.io.IOException; importandroid.app.Activity; importandroid.graphics.PixelFormat; importandroid.hardware.Camera; importandroid.os.AsyncTask; importandroid.os.Bundle; importandroid.os.Environment; importandroid.view.KeyEvent; importandroid.view.SurfaceHolder; importandroid.view.SurfaceView; publicclassMainActivityextendsActivity{ //声明拍照界面组件SurfaceView privateSurfaceViewsurfaceView; //声明界面控制组件SurfaceHolder privateSurfaceHoldersurfaceHolder; //声明照相机 privateCameracamera; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); //实例化拍照界面组件 surfaceView=(SurfaceView)findViewById(R.id.preview); //从SurfaceView中获得SurfaceHolder surfaceHolder=surfaceView.getHolder(); //为SurfaceHolder添加回调 surfaceHolder.addCallback(surfaceCallback); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } //响应按键事件 @Override publicbooleanonKeyDown(intkeyCode,KeyEventevent){ if(keyCode==KeyEvent.KEYCODE_CAMERA||keyCode==KeyEvent.KEYCODE_SEARCH){ takePic(); returntrue; } returnsuper.onKeyDown(keyCode,event); } //拍照方法 privatevoidtakePic(){ //停止预览 camera.stopPreview(); //拍照 camera.takePicture(null,null,pictureCallback); } //照片回调 Camera.PictureCallbackpictureCallback=newCamera.PictureCallback(){ @Override publicvoidonPictureTaken(byte[]data,Cameracamera){ newSavePictureTask().execute(data); camera.startPreview(); } }; //保存照片任务类 classSavePictureTaskextendsAsyncTask<byte[],String,String>{ @Override protectedStringdoInBackground(byte[]...params){ //创建文件 Filepicture=newFile(Environment.getExternalStorageDirectory(),"picture.jpg"); //如果文件存在删除掉 if(picture.exists())picture.delete(); try{ //获得文件输出流 FileOutputStreamfos=newFileOutputStream(picture.getPath()); //写到该文件 fos.write(params[0]); //关闭文件流 fos.close(); }catch(Exceptione){ e.printStackTrace(); } returnnull; } } //SurfaceHodler回调,处理打开相机,关闭相机以及照片尺寸的改变 SurfaceHolder.CallbacksurfaceCallback=newSurfaceHolder.Callback(){ @Override publicvoidsurfaceCreated(SurfaceHolderholder){ //打开相机 camera=Camera.open(); try{ //设置预览 camera.setPreviewDisplay(holder); }catch(IOExceptione){ e.printStackTrace(); } } @Override publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth, intheight){ //获得相机参数 Camera.Parametersparameters=camera.getParameters(); //设置照片大小 parameters.setPreviewSize(width,height); //设置照片格式 parameters.setPictureFormat(PixelFormat.JPEG); //设置相机参数 camera.setParameters(parameters); //开始预览 camera.startPreview(); } @Override publicvoidsurfaceDestroyed(SurfaceHolderholder){ //停止预览 camera.stopPreview(); //释放相机资源 camera.release(); camera=null; } }; } 代码 package com.amaker.ch11.app; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import android.app.Activity; import android.graphics.PixelFormat; import android.hardware.Camera; import android.os.AsyncTask; import android.os.Bundle; import android.os.Environment; import android.view.KeyEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; public class MainActivity extends Activity { // 声明拍照界面组件SurfaceView private SurfaceView surfaceView; // 声明界面控制组件SurfaceHolder private SurfaceHolder surfaceHolder; // 声明照相机 private Camera camera; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 实例化拍照界面组件 surfaceView = (SurfaceView)findViewById(R.id.preview); // 从SurfaceView中获得SurfaceHolder surfaceHolder = surfaceView.getHolder(); // 为SurfaceHolder 添加回调 surfaceHolder.addCallback(surfaceCallback); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } // 响应按键事件 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_CAMERA||keyCode==KeyEvent.KEYCODE_SEARCH){ takePic(); return true; } return super.onKeyDown(keyCode, event); } // 拍照方法 private void takePic(){ // 停止预览 camera.stopPreview(); // 拍照 camera.takePicture(null,null, pictureCallback); } // 照片回调 Camera.PictureCallback pictureCallback = new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { new SavePictureTask().execute(data); camera.startPreview(); } }; // 保存照片任务类 class SavePictureTask extends AsyncTask<byte[],String,String>{ @Override protected String doInBackground(byte[]... params) { // 创建文件 File picture = new File(Environment.getExternalStorageDirectory(),"picture.jpg"); // 如果文件存在删除掉 if(picture.exists())picture.delete(); try { // 获得文件输出流 FileOutputStream fos = new FileOutputStream(picture.getPath()); // 写到该文件 fos.write(params[0]); // 关闭文件流 fos.close(); } catch (Exception e) { e.printStackTrace(); } return null; } } // SurfaceHodler 回调,处理打开相机,关闭相机以及照片尺寸的改变 SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { // 打开相机 camera = Camera.open(); try { // 设置预览 camera.setPreviewDisplay(holder); } catch (IOException e) { e.printStackTrace(); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // 获得相机参数 Camera.Parameters parameters = camera.getParameters(); // 设置照片大小 parameters.setPreviewSize(width, height); // 设置照片格式 parameters.setPictureFormat(PixelFormat.JPEG); // 设置相机参数 camera.setParameters(parameters); // 开始预览 camera.startPreview(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { // 停止预览 camera.stopPreview(); // 释放相机资源 camera.release(); camera = null; } }; } 本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1079348

优秀的个人博客,低调大师

android中的多媒体应用MediaPlayer

MediaPlayer可以播放音频和视频,另外也可以通过VideoView来播放视频,虽然VideoView比MediaPlayer简单易用,但定制性不如用MediaPlayer,要视情况选择了。MediaPlayer播放音频比较简单,但是要播放视频就需要SurfaceView。SurfaceView比普通的自定义View更有绘图上的优势,它支持完全的OpenGL ES库。 迷你音乐播放器 /Chapter11_Media_MiniPlayer/src/com/amaker/test/MainActivity.java 代码 packagecom.amaker.test; importandroid.app.Activity; importandroid.app.AlertDialog; importandroid.media.MediaPlayer; importandroid.os.Bundle; importandroid.view.View; importandroid.widget.ImageButton; publicclassMainActivityextendsActivityimplementsMediaPlayer.OnCompletionListener{ privateImageButtonplay,pause,stop; privateMediaPlayermp; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); play=(ImageButton)findViewById(R.id.play); pause=(ImageButton)findViewById(R.id.pause); stop=(ImageButton)findViewById(R.id.stop); play.setOnClickListener(newView.OnClickListener(){ publicvoidonClick(Viewview){ play(); } }); pause.setOnClickListener(newView.OnClickListener(){ publicvoidonClick(Viewview){ pause(); } }); stop.setOnClickListener(newView.OnClickListener(){ publicvoidonClick(Viewview){ stop(); } }); setup(); } @Override publicvoidonDestroy(){ super.onDestroy(); if(stop.isEnabled()){ stop(); } } publicvoidonCompletion(MediaPlayermp){ stop(); } privatevoidplay(){ mp.start(); play.setEnabled(false); pause.setEnabled(true); stop.setEnabled(true); } privatevoidstop(){ mp.stop(); pause.setEnabled(false); stop.setEnabled(false); try{ mp.prepare(); mp.seekTo(0); play.setEnabled(true); } catch(Throwablet){ error(t); } } privatevoidpause(){ mp.pause(); play.setEnabled(true); pause.setEnabled(false); stop.setEnabled(true); } privatevoidloadClip(){ try{ mp=MediaPlayer.create(this,R.raw.test); mp.setOnCompletionListener(this); } catch(Throwablet){ error(t); } } privatevoidsetup(){ loadClip(); play.setEnabled(true); pause.setEnabled(false); stop.setEnabled(false); } privatevoiderror(Throwablet){ AlertDialog.Builderbuilder=newAlertDialog.Builder(this); builder .setTitle("报错啦!") .setMessage(t.toString()) .setPositiveButton("确定",null) .show(); } } /Chapter11_Media_MiniPlayer/res/layout/main.xml 代码 <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="迷你音乐播放器"/> <LinearLayout android:orientation="horizontal"android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageButton android:id="@+id/play" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/play" /> <ImageButton android:id="@+id/pause" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/pause" /> <ImageButton android:id="@+id/stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/stop" /> </LinearLayout> </LinearLayout> /Chapter11_Media_MiniPlayer/AndroidManifest.xml 代码 <?xmlversion="1.0"encoding="utf-8"?> <manifestxmlns:android="http://schemas.android.com/apk/res/android" package="com.amaker.test" android:versionCode="1" android:versionName="1.0"> <applicationandroid:icon="@drawable/icon"android:label="@string/app_name"> <activityandroid:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> <uses-sdkandroid:minSdkVersion="3"/> </manifest> 本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1081707

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册