Android MPEG-4视频解密

服务器上的视频别人用算法加密过,已经知道算法,在手机播放需要解密,视频数据需要解密后才能播放,怎么操作,我想知道有算法怎么解密这个视频。

3个回答

如果是特定的、非视频流通用的加密算法,就必须先在客户端自己解密,否则无法播放。这样,就需要自己实现播放软件,因为别人的播放软件不会支持这样的过程。

上面回复的有问题请忽略

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
网络摄像机视频编码H.264、H.263、MPEG-4、MPEG-3、MPEG-2兼容性?
我的网络摄像机监控客户端可以播放视频编码为H.264和MPEG-4的网络监控视频,请问它能不能播放编码为H.263和MPEG-2和MPEG-3的视频流呢? 由于手上的网络摄像机只有H.264和MPEG-4这两个选项,没法测试,希望有人知道的话告诉我下,谢谢了
UDP+Directhsow 视频传输,采用xvid软件的mpeg-4编码,急求,谢谢
传输视频时,接收端在接收大约七、 八分钟的时候会出现卡死的情况,并且在第一次传输视频的时候,接收端会黑屏,传输第二次的时候便会出现上述问题。 。QQ:2418658062.能解决此问题的高酬劳。可QQ谈价。 。
Android开发 简易音乐播放器列表无法显示
Android编程,设计一个简易的音乐播放器 主要是通过 ContentResolver 查询 MediaStore 多媒体文件获取文件名,列表显示的。目前真机调试是正常的,可以正常显示列表。 但是在模拟机上调试,列表显示是空白。logcat提示如下截图: ![图片说明](https://img-ask.csdn.net/upload/201906/05/1559744153_342027.png) MainActivity.java中代码如下: ``` package com.example.hp.ggmusic; import android.Manifest; import android.content.ContentResolver; import android.content.Context; import android.content.pm.PackageManager; import android.database.Cursor; import android.os.Build; import android.provider.MediaStore; import android.support.annotation.RequiresApi; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.CursorAdapter; import android.widget.ListView; import android.widget.MediaController; public class MainActivity extends AppCompatActivity { private final int REQUEST_EXTERNAL_STORAGE= 1; private static String[] PERMISSIONS_STORAGE={ Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE }; private ContentResolver mContentResolver; private ListView mPlaylist; private MediaCursorAdapter mCursorAdapter; //private Cursor mCursor; //音频文件是否属于音乐类型 private final String SELECTION = MediaStore.Audio.Media.IS_MUSIC + " = ?" + " AND " + MediaStore.Audio.Media.MIME_TYPE + " LIKE ?"; //音频文件的MIME类型,MP3对应的是“audio/mpeg” private final String[] SELECTION_ARGS ={ Integer.toString(1), "audio/mpeg"}; // @RequiresApi(api = Build.VERSION_CODES.M) @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContentResolver=getContentResolver(); //获取本地资源文件列表 mCursorAdapter=new MediaCursorAdapter(MainActivity.this); mPlaylist=findViewById(R.id.lv_playlist); mPlaylist.setAdapter(mCursorAdapter); if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) !=PackageManager.PERMISSION_GRANTED) { if(ActivityCompat.shouldShowRequestPermissionRationale( MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE)){ }else { requestPermissions(PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE); } }else { initPlaylist(); } } public void onRequestPermissionsResult(int requestCode, String[] permissions,int[] grantResults){ switch (requestCode){ case REQUEST_EXTERNAL_STORAGE: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){ initPlaylist(); } break; default: break; } } private void initPlaylist(){ //查询本地资源 Cursor mCursor=mContentResolver.query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, SELECTION, SELECTION_ARGS, MediaStore.Audio.Media.DEFAULT_SORT_ORDER ); mCursorAdapter.swapCursor(mCursor); mCursorAdapter.notifyDataSetChanged(); } } ``` 编写的适配器MediaCursorAdapter.java中的代码如下 ``` package com.example.hp.ggmusic; import android.content.Context; import android.database.Cursor; import android.provider.MediaStore; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CursorAdapter; import android.widget.TextView; public class MediaCursorAdapter extends CursorAdapter { private Context mContext; private LayoutInflater mLayoutInflater; public MediaCursorAdapter(Context context){ super(context,null,0); mContext=context; mLayoutInflater=LayoutInflater.from(mContext); } @Override public View newView(Context context, Cursor cursor, ViewGroup viewGroup){ View itemView =mLayoutInflater.inflate(R.layout.list_item, viewGroup,false); if (itemView != null){ ViewHolder vh = new ViewHolder(); vh.tvTitle = itemView.findViewById(R.id.tv_title); vh.tvArtist=itemView.findViewById(R.id.tv_artist); vh.tvOrder=itemView.findViewById(R.id.tv_order); vh.divider=itemView.findViewById(R.id.divider); itemView.setTag(vh); return itemView; } return null; } public class ViewHolder{ TextView tvTitle; TextView tvArtist; TextView tvOrder; View divider; } @Override public void bindView(View view, Context context, Cursor cursor) { ViewHolder vh=(ViewHolder) view.getTag(); int titleIndex=cursor.getColumnIndex( MediaStore.Audio.Media.TITLE); int artistIndex=cursor.getColumnIndex( MediaStore.Audio.Media.ARTIST); String title =cursor.getString(titleIndex); String artist =cursor.getString(artistIndex); int position=cursor.getPosition(); if (vh!=null){ vh.tvTitle.setText(title); vh.tvArtist.setText(artist); vh.tvOrder.setText(Integer.toString(position + 1)); } } } ```
监控dav转成MP4 阿里云不能预览视频
将监控视频转MP4 后 上传阿里云不能预览 阿里云设置了 video/mp4 转换方法 ``` ffmpeg -i down.dav -vcodec copy -an -f mp4 test.mp4 ``` 视频格式 ``` General Complete name : C:\Users\pc\Desktop\test.mp4 Format : MPEG-4 Format profile : Base Media Codec ID : isom (isom/iso2/mp41) File size : 370 MiB Duration : 49 min 44 s Overall bit rate : 1 040 kb/s Writing application : Lavf56.40.101 Video ID : 1 Format : HEVC Format/Info : High Efficiency Video Coding Codec ID : hev1 Codec ID/Info : High Efficiency Video Coding Duration : 49 min 44 s Duration_FirstFrame : -160 ms Bit rate : 1 040 kb/s Width : 1 280 pixels Height : 720 pixels Display aspect ratio : 3:2 Frame rate mode : Constant Frame rate : 5.000 FPS Bits/(Pixel*Frame) : 0.226 Stream size : 370 MiB (100%) Codec configuration box : hvcC ```
Android传输基于socket传输视频文件到pc
我写了一个录制视频的app然后把录制的视频传送到pc端,但是传输到pc端的视频文件变大,而且无法播放,传输方式是DataOutputStream,具体代码如下; package com.example.lenovo.viedoapp; import android.app.Activity; import android.hardware.Camera; import android.media.MediaRecorder; import android.os.Bundle; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.widget.Button; import com.google.android.gms.common.api.GoogleApiClient; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import static com.example.lenovo.viedoapp.R.id.surfaceView; public class viedoApp extends Activity implements View.OnClickListener, SurfaceHolder.Callback { Button but_start; Button but_stop; Button but_send; SurfaceView sfv; SurfaceHolder sfh; Camera camera; MediaRecorder mediaRecorder; File videoFile; File aduioFile; Send send; /** * ATTENTION: This was auto-generated to implement the App Indexing API. * See https://g.co/AppIndexing/AndroidStudio for more information. */ private GoogleApiClient client; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_viedo_app); but_start = (Button) findViewById(R.id.but_start); but_start.setOnClickListener(this); but_stop = (Button) findViewById(R.id.but_stop); but_stop.setOnClickListener(this); but_send=(Button)findViewById(R.id.but_send); but_send.setOnClickListener(this); sfv = (SurfaceView) findViewById(surfaceView); sfh = sfv.getHolder(); sfh.addCallback(this); } public void onClick(View v) { if (v.getId() == but_start.getId()) { camera.stopPreview(); camera.release(); camera = null; mediaRecorder = new MediaRecorder(); mediaRecorder.setPreviewDisplay(sfh.getSurface()); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); mediaRecorder.setVideoSize(320, 240); mediaRecorder.setVideoFrameRate(15); mediaRecorder.setOrientationHint(90); videoFile = new File(getExternalCacheDir(), "video.mp4"); mediaRecorder.setOutputFile(videoFile.getAbsolutePath()); try { mediaRecorder.prepare(); mediaRecorder.start(); //send = new Send(videoFile); //new Thread(send).start(); } catch (IOException e) { e.printStackTrace(); } } else if (v.getId() == but_stop.getId()) { //send.flag = false; mediaRecorder.stop(); mediaRecorder.release(); mediaRecorder = null; camera = Camera.open(); try { camera.setPreviewDisplay(sfh); camera.setDisplayOrientation(90); camera.startPreview(); } catch (IOException e) { e.printStackTrace(); } } else if(v.getId()==but_send.getId()){ send = new Send(videoFile); new Thread(send).start(); // Toast.makeText(viedoApp.this, "完成", Toast.LENGTH_SHORT).show(); } } public void surfaceCreated(SurfaceHolder holder) { camera = Camera.open(); try { camera.setPreviewDisplay(holder); camera.setDisplayOrientation(90); camera.startPreview(); } catch (IOException e) { e.printStackTrace(); } } public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } public void surfaceDestroyed(SurfaceHolder holder) { camera.stopPreview(); camera.release(); camera = null; sfv = null; sfh = null; mediaRecorder = null; } } class Send implements Runnable { Socket socket = null; OutputStream os = null; File file = null; FileInputStream fis = null; byte[] bytes; boolean flag = true; DataOutputStream dos=null; Send(File file) { this.file = file; } public void connect() { try { socket = new Socket("192.168.1.108", 9991); os = socket.getOutputStream(); dos = new DataOutputStream(os); fis= new FileInputStream(file); String a = file.getAbsolutePath(); // Log.d("Send", a); } catch (IOException e) { } bytes = new byte[1024]; long a=0; String b=null; try { while ( fis.read(bytes, 0, bytes.length)>0) { dos.write(bytes,0,bytes.length); dos.flush(); a=(a+bytes.length); } b=a+""; Log.v("Send",b); // Log.v("Send",a.toString()); System.out.print(b); } catch (IOException e) { e.printStackTrace(); } finally{ if(fis!=null){ try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } if(dos!=null){ try { dos.flush(); dos.close(); } catch (IOException e) { e.printStackTrace(); } } } } public void run() { connect(); } } 求求懂得大神给我解答一下,急需
Android拍视频预览的界面被拉伸
最近 Android 需要做一个拍视频保存然后上传的功能,基本功能实现了,但是有一个小 bug,就是预览的时候界面明显被拉长了,但是各种预览设置的参数也都试过了,都没有用,来请教一下。 #代码如下: ##1. Activity ``` public class RecordActivity extends AppCompatActivity implements SurfaceHolder.Callback { private SurfaceView mSurfaceView; private SurfaceHolder mSurfaceHolder; private Button btnStartStop; private boolean isRecording = false; // 标记是否已经在录制 private MediaRecorder mRecorder; // 音视频录制类 private Camera mCamera = null; // 相机 private List<Camera.Size> mSupportedPreviewSizes = null; private Camera.Size mPreviewSize; private Camera.Size mSize = null;// 相机的尺寸 private int mCameraFacing = Camera.CameraInfo.CAMERA_FACING_BACK; // 默认后置摄像头 private static final SparseIntArray orientations = new SparseIntArray(); // 手机旋转对应的调整角度 static { orientations.append(Surface.ROTATION_0, 90); orientations.append(Surface.ROTATION_90, 0); orientations.append(Surface.ROTATION_180, 270); orientations.append(Surface.ROTATION_270, 180); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initWindow(); setContentView(R.layout.activity_record); initViews(); } /** * 初始化窗口 */ private void initWindow() { requestWindowFeature(Window.FEATURE_NO_TITLE); // 去掉标题栏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // 设置全屏 // 设置竖屏显示 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // 选择支持半透明模式,在有 surfaceView 的 activity 中使用。 getWindow().setFormat(PixelFormat.TRANSLUCENT); } /** * 视图对象初始化 */ private void initViews() { mSurfaceView = (SurfaceView) findViewById(R.id.surfaceview); btnStartStop = (Button) findViewById(R.id.btnStartStop); btnStartStop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!isRecording) { startRecord(); } else { stopRecord(); } } }); SurfaceHolder holder = mSurfaceView.getHolder(); // 取得holder holder.setFormat(PixelFormat.TRANSPARENT); holder.setKeepScreenOn(true); holder.addCallback(this); // holder加入回调接口 } /** * 初始化相机 */ private void initCamera() { /** * 默认打开后置摄像头 */ if (Camera.getNumberOfCameras() == 2) { mCamera = Camera.open(mCameraFacing); } else { mCamera = Camera.open(); } CameraSizeComparator sizeComparator = new CameraSizeComparator(); Camera.Parameters parameters = mCamera.getParameters(); if (mSize == null) { mSupportedPreviewSizes = parameters.getSupportedPreviewSizes(); Collections.sort(mSupportedPreviewSizes, sizeComparator); for (int num = 0; num < mSupportedPreviewSizes.size(); num++) { Camera.Size size = mSupportedPreviewSizes.get(num); if (size.width >= 1000 && size.height >= 1000) { this.mSize = size; break; } } mSize = mSupportedPreviewSizes.get(0); /** * 增加对聚焦模式的判断 */ List<String> focusModesList = parameters.getSupportedFocusModes(); if (focusModesList.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) { parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO); } else if (focusModesList.contains(Camera.Parameters.FOCUS_MODE_AUTO)) { parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); } mCamera.setParameters(parameters); } int rotation = getWindowManager().getDefaultDisplay().getRotation(); int orientation = orientations.get(rotation); mCamera.setDisplayOrientation(orientation); } @Override protected void onResume() { super.onResume(); initCamera(); } @Override public void onPause() { releaseCamera(); super.onPause(); } /** * 开始录制 */ private void startRecord() { if (mRecorder == null) { mRecorder = new MediaRecorder(); // 创建MediaRecorder } if (mCamera != null) { mCamera.stopPreview(); mCamera.unlock(); mRecorder.setCamera(mCamera); } try { // 设置音频采集方式 mRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); // 设置视频的采集方式 mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); /* mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); // 设置文件的输出格式 mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // 设置audio的编码格式 mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); // 设置video的编码格式 mRecorder.setVideoEncodingBitRate(10 * 1024 * 1024); // 设置录制的视频编码比特率 mRecorder.setVideoFrameRate(30); // 设置录制的视频帧率 mRecorder.setVideoSize(1920, 1080); // 设置相机分辨率 */ // 设置要捕获的视频的宽度和高度 // mSurfaceHolder.setFixedSize(optimalSize.width, optimalSize.height); mRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); // 设置记录会话的最大持续时间(毫秒) mRecorder.setMaxDuration(180 * 1000); mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); /** * 获取外部路径,然后将视频保存进去 */ String path = Environment.getExternalStorageDirectory().getPath(); if (path != null) { File dir = new File(path + "/crafts_videos"); if (!dir.exists()) { dir.mkdir(); } /** * 将 currentTimeMillis() 作为文件名 */ path = dir + "/" + System.currentTimeMillis() + ".mp4"; mRecorder.setOutputFile(path); //设置输出文件的路径 mRecorder.prepare(); //准备录制 mRecorder.start(); //开始录制 isRecording = true; btnStartStop.setText("停止"); } } catch (Exception e) { e.printStackTrace(); } } /** * 停止录制 */ private void stopRecord() { try { mRecorder.stop(); // 停止录制 mRecorder.reset(); // 重置 btnStartStop.setText("开始"); } catch (Exception e) { e.printStackTrace(); } isRecording = false; } /** * 释放 MediaRecorder */ private void releaseMediaRecorder() { if (mRecorder != null) { mRecorder.release(); mRecorder = null; } } /** * 释放相机资源 */ private void releaseCamera() { try { if (mCamera != null) { mCamera.stopPreview(); mCamera.setPreviewCallback(null); mCamera.unlock(); mCamera.release(); } } catch (RuntimeException e) { } finally { mCamera = null; } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // 将holder,这个holder为开始在onCreate里面取得的holder,将它赋给mSurfaceHolder mSurfaceHolder = holder; if (mCamera == null) { return; } try { //设置显示 mCamera.setPreviewDisplay(holder); mCamera.startPreview(); } catch (Exception e) { e.printStackTrace(); releaseCamera(); finish(); } } @Override public void surfaceCreated(SurfaceHolder holder) { // 将holder,这个holder为开始在onCreate里面取得的holder,将它赋给mSurfaceHolder mSurfaceHolder = holder; try { mCamera.setPreviewDisplay(mSurfaceHolder); mCamera.startPreview(); } catch (IOException e) { e.printStackTrace(); } } @Override public void surfaceDestroyed(SurfaceHolder holder) { // surfaceDestroyed的时候同时对象设置为null if (isRecording && mCamera != null) { mCamera.lock(); } mSurfaceView = null; mSurfaceHolder = null; releaseMediaRecorder(); releaseCamera(); } private class CameraSizeComparator implements Comparator<Camera.Size> { public int compare(Camera.Size lhs, Camera.Size rhs) { if (lhs.width == rhs.width) { return 0; } else if (lhs.width > rhs.width) { return 1; } else { return -1; } } } } ``` ##2. 布局 ``` <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <SurfaceView android:id="@+id/surfaceview" android:layout_width="match_parent" android:layout_height="match_parent" /> <Button android:id="@+id/btnStartStop" android:layout_width="60dp" android:layout_height="40dip" android:layout_centerHorizontal="true" android:layout_alignParentBottom="true" android:text="开始" /> </RelativeLayout> ``` ##3. 权限 ``` <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ``` 求大神解答
RTSP 接收UDP流媒体数据问题
RequestPlay() 执行成功, 抓包工具能抓到RTP包, vlc播放正常(rtsp://192.168.1.64:554/MPEG-4/ch1/main/av_stream), 但pRtp->Read(..)一直读不到数据, 是 socket::select(...)返回0 (超时)。 原因在哪?
ffmpeg实现web上视频转码为mp4格式用video标签却无法播放
1.问题描述:调用ffmpeg将avi格式视频转码->mp4格式,使用最简单的<video>标签进行播放只能播放声音,没有画面(黑屏)。而暴风影音等本地视频播放软件却能够正常播放转码后的视频。 2.环境:SSH框架准备实现视频上传后的自动转码并且能够网页内播放,火狐浏览器。 3.已知mp4格式分为两种,其中H264类型才能进行html播放,但按照转码命令说已经转码成:视频H264、音频aac格式了,但是仍然是黑屏(有声音)。 4.未知:(1)转码时显示的相关命令行具体意义。(2)网上所说用格式工厂进行转码即可,有没有能够通过代码调用的视频转码方法予以解决呢? 5.以下为问题截图: (1)视频转码Java代码: ``` List<String> convert = new ArrayList<String>(); convert.add(ffmpegPath); // 添加转换工具路径 convert.add("-i"); // 添加参数"-i",该参数指定要转换的文件 convert.add(sourceVideoPath); // 添加要转换格式的视频文件的路径 convert.add("-acodec"); convert.add("aac"); convert.add("-vcodec"); convert.add("libx264"); convert.add("-y"); convert.add(targetFolder+fileRealNameNoExtension+targetExtension); ``` (2)转码时的输出: ``` ffmpeg version N-93678-g4b7166c9d5 Copyright (c) 2000-2019 the FFmpeg developers built with gcc 8.3.1 (GCC) 20190414 configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt libavutil 56. 26.100 / 56. 26.100 libavcodec 58. 52.100 / 58. 52.100 libavformat 58. 27.103 / 58. 27.103 libavdevice 58. 7.100 / 58. 7.100 libavfilter 7. 50.100 / 7. 50.100 libswscale 5. 4.100 / 5. 4.100 libswresample 3. 4.100 / 3. 4.100 libpostproc 55. 4.100 / 55. 4.100 Input #0, avi, from 'E:\Test\projectVideos\temp\1557994804863.avi': Metadata: genre : Other track : 1 encoder : Lavf54.63.104 Duration: 00:00:16.80, start: 0.000000, bitrate: 2286 kb/s Stream #0:0: Video: h264 (Main) (H264 / 0x34363248), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 2151 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 44100 Hz, mono, fltp, 128 kb/s Stream mapping: Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264)) Stream #0:1 -> #0:1 (mp3 (mp3float) -> aac (native)) Press [q] to stop, [?] for help [libx264 @ 0000000002ebf4c0] using SAR=1/1 [libx264 @ 0000000002ebf4c0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX [libx264 @ 0000000002ebf4c0] profile Progressive High, level 4.0, 4:2:0, 8-bit [libx264 @ 0000000002ebf4c0] 264 - core 157 r2970 5493be8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2019 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00 Output #0, mp4, to 'E:\Test\projectVideos\encvideos\1557994804863.mp4': Metadata: genre : Other track : 1 encoder : Lavf58.27.103 Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=-1--1, 25 fps, 12800 tbn, 25 tbc Metadata: encoder : Lavc58.52.100 libx264 Side data: cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1 Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 69 kb/s Metadata: encoder : Lavc58.52.100 aac frame= 1 fps=0.0 q=0.0 size= 0kB time=00:00:00.06 bitrate= 5.5kbits/s speed=0.138x frame= 46 fps= 23 q=0.0 size= 0kB time=00:00:01.88 bitrate= 0.2kbits/s speed=0.936x frame= 64 fps= 25 q=28.0 size= 0kB time=00:00:02.57 bitrate= 0.1kbits/s speed=1.02x frame= 88 fps= 29 q=28.0 size= 0kB time=00:00:03.55 bitrate= 0.1kbits/s speed=1.17x frame= 108 fps= 31 q=28.0 size= 0kB time=00:00:04.34 bitrate= 0.1kbits/s speed=1.23x frame= 133 fps= 33 q=28.0 size= 0kB time=00:00:05.34 bitrate= 0.1kbits/s speed=1.32x frame= 155 fps= 34 q=28.0 size= 0kB time=00:00:06.22 bitrate= 0.1kbits/s speed=1.35x frame= 171 fps= 33 q=28.0 size= 0kB time=00:00:06.87 bitrate= 0.1kbits/s speed=1.33x frame= 186 fps= 33 q=28.0 size= 0kB time=00:00:07.47 bitrate= 0.1kbits/s speed=1.32x frame= 195 fps= 31 q=28.0 size= 0kB time=00:00:07.82 bitrate= 0.0kbits/s speed=1.25x frame= 206 fps= 30 q=28.0 size= 0kB time=00:00:08.26 bitrate= 0.0kbits/s speed=1.22x frame= 214 fps= 29 q=28.0 size= 0kB time=00:00:08.59 bitrate= 0.0kbits/s speed=1.17x frame= 223 fps= 28 q=28.0 size= 0kB time=00:00:08.96 bitrate= 0.0kbits/s speed=1.14x frame= 229 fps= 27 q=28.0 size= 0kB time=00:00:09.19 bitrate= 0.0kbits/s speed=1.09x frame= 232 fps= 25 q=28.0 size= 0kB time=00:00:09.28 bitrate= 0.0kbits/s speed=1.01x frame= 235 fps= 24 q=28.0 size= 256kB time=00:00:09.42 bitrate= 222.5kbits/s speed=0.965x frame= 240 fps= 23 q=28.0 size= 256kB time=00:00:09.63 bitrate= 217.7kbits/s speed=0.928x frame= 243 fps= 22 q=28.0 size= 256kB time=00:00:09.72 bitrate= 215.6kbits/s speed=0.894x frame= 247 fps= 21 q=28.0 size= 256kB time=00:00:09.89 bitrate= 212.1kbits/s speed=0.856x frame= 253 fps= 21 q=28.0 size= 512kB time=00:00:10.12 bitrate= 414.3kbits/s speed=0.832x frame= 258 fps= 20 q=28.0 size= 512kB time=00:00:10.33 bitrate= 406.0kbits/s speed=0.812x frame= 264 fps= 20 q=28.0 size= 512kB time=00:00:10.56 bitrate= 397.0kbits/s speed=0.791x frame= 268 fps= 19 q=28.0 size= 768kB time=00:00:10.72 bitrate= 586.5kbits/s speed=0.773x frame= 272 fps= 19 q=28.0 size= 768kB time=00:00:10.91 bitrate= 576.5kbits/s speed=0.753x frame= 278 fps= 19 q=28.0 size= 768kB time=00:00:11.14 bitrate= 564.5kbits/s speed=0.743x frame= 281 fps= 18 q=28.0 size= 768kB time=00:00:11.26 bitrate= 558.7kbits/s speed=0.725x frame= 286 fps= 18 q=28.0 size= 1024kB time=00:00:11.47 bitrate= 731.3kbits/s speed=0.715x frame= 291 fps= 17 q=28.0 size= 1024kB time=00:00:11.67 bitrate= 718.3kbits/s speed=0.701x frame= 296 fps= 17 q=25.0 size= 1024kB time=00:00:11.86 bitrate= 707.0kbits/s speed=0.687x frame= 303 fps= 17 q=28.0 size= 1280kB time=00:00:12.14 bitrate= 863.5kbits/s speed=0.681x frame= 308 fps= 17 q=28.0 size= 1280kB time=00:00:12.35 bitrate= 848.9kbits/s speed=0.67x frame= 312 fps= 16 q=28.0 size= 1280kB time=00:00:12.51 bitrate= 837.8kbits/s speed=0.661x frame= 319 fps= 16 q=28.0 size= 1280kB time=00:00:12.79 bitrate= 819.6kbits/s speed=0.658x frame= 341 fps= 17 q=28.0 size= 1280kB time=00:00:13.65 bitrate= 768.0kbits/s speed=0.684x frame= 362 fps= 18 q=28.0 size= 1280kB time=00:00:14.48 bitrate= 723.7kbits/s speed=0.708x frame= 391 fps= 19 q=28.0 size= 1280kB time=00:00:15.67 bitrate= 669.0kbits/s speed=0.746x frame= 419 fps= 19 q=28.0 size= 1280kB time=00:00:16.67 bitrate= 629.0kbits/s speed=0.774x frame= 419 fps= 19 q=-1.0 Lsize= 1538kB time=00:00:16.71 bitrate= 753.7kbits/s speed=0.753x video:1480kB audio:43kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.976535% [libx264 @ 0000000002ebf4c0] frame I:2 Avg QP:13.37 size: 32816 [libx264 @ 0000000002ebf4c0] frame P:143 Avg QP:14.70 size: 6977 [libx264 @ 0000000002ebf4c0] frame B:274 Avg QP:13.65 size: 1647 [libx264 @ 0000000002ebf4c0] consecutive B-frames: 9.8% 7.6% 4.3% 78.3% [libx264 @ 0000000002ebf4c0] mb I I16..4: 38.7% 53.1% 8.1% [libx264 @ 0000000002ebf4c0] mb P I16..4: 17.5% 18.5% 0.2% P16..4: 5.5% 0.4% 0.2% 0.0% 0.0% skip:57.7% [libx264 @ 0000000002ebf4c0] mb B I16..4: 2.0% 0.7% 0.0% B16..8: 3.7% 0.2% 0.0% direct: 2.9% skip:90.5% L0:49.2% L1:48.4% BI: 2.4% [libx264 @ 0000000002ebf4c0] 8x8 transform intra:48.1% inter:84.8% [libx264 @ 0000000002ebf4c0] coded y,uvDC,uvAC intra: 3.9% 31.3% 4.5% inter: 0.7% 5.4% 0.2% [libx264 @ 0000000002ebf4c0] i16 v,h,dc,p: 22% 68% 4% 6% [libx264 @ 0000000002ebf4c0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 29% 27% 42% 0% 0% 0% 0% 0% 0% [libx264 @ 0000000002ebf4c0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 31% 28% 24% 2% 4% 3% 4% 2% 3% [libx264 @ 0000000002ebf4c0] i8c dc,h,v,p: 48% 39% 11% 2% [libx264 @ 0000000002ebf4c0] Weighted P-Frames: Y:23.1% UV:22.4% [libx264 @ 0000000002ebf4c0] ref P L0: 65.5% 9.2% 23.1% 1.9% 0.3% [libx264 @ 0000000002ebf4c0] ref B L0: 71.1% 28.4% 0.5% [libx264 @ 0000000002ebf4c0] ref B L1: 98.8% 1.2% [libx264 @ 0000000002ebf4c0] kb/s:723.03 [aac @ 0000000002dc0980] Qavg: 47784.133 生成mp4视频为:E:\Test\projectVideos\temp\1557994804863.mp4 ``` (3)播放时的截图 ![图片说明](https://img-ask.csdn.net/upload/201905/16/1557997780_707491.png) (4) 播放视频jsp代码(使用的是video-js,但测试时也试了一下不加视频插件直接<video>标签播放,结果一样) ``` <video id="playVideo" class="video-js vjs-default-skin" controls ="true" preload="auto" width="960" height="480" poster="/images/${VIDEO.vpicture}" data-setup='{}'> <source src="/videos/${VIDEO.vpath}" type='video/mp4' /> </video> ``` ("/videos"为虚拟路径 实为本地存储地址) 希望好心人能够予以慷慨解答!~ 补充:在转wmv格式到MP4格式时出现了 ``` ConverVideoTest说:传入工具类的源视频为:E:\Test\projectVideos\temp\1558578421815.wmv ----接收到文件(E:\Test\projectVideos\temp\1558578421815.wmv)需要转换------- ----开始转文件(E:\Test\projectVideos\temp\1558578421815.wmv)-------------------------- 源视频类型为:wmv 可以转换,统一转为mp4文件 调用了ffmpeg.exe工具 该文件夹存在。 ffmpeg输入的命令:E:\ffmpeg\bin\ffmpeg.exe-iE:\Test\projectVideos\temp\1558578421815.wmv-acodecaac-vcodeclibx264-yE:\Test\projectVideos\encvideos\1558578421815.mp4 ffmpeg version N-93678-g4b7166c9d5 Copyright (c) 2000-2019 the FFmpeg developers built with gcc 8.3.1 (GCC) 20190414 configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt libavutil 56. 26.100 / 56. 26.100 libavcodec 58. 52.100 / 58. 52.100 libavformat 58. 27.103 / 58. 27.103 libavdevice 58. 7.100 / 58. 7.100 libavfilter 7. 50.100 / 7. 50.100 libswscale 5. 4.100 / 5. 4.100 libswresample 3. 4.100 / 3. 4.100 libpostproc 55. 4.100 / 55. 4.100 Input #0, asf, from 'E:\Test\projectVideos\temp\1558578421815.wmv': Metadata: DeviceConformanceTemplate: M1 WMFSDKNeeded : 0.0.0.0000 WM/WMADRCPeakReference: 7851 WM/WMADRCPeakTarget: 7851 WM/WMADRCAverageReference: 1027 WM/WMADRCAverageTarget: 1027 WMFSDKVersion : 12.0.7601.17514 IsVBR : 0 Duration: 00:00:16.58, bitrate: 1969 kb/s Stream #0:0(chi): Audio: wmapro (b[1][0][0] / 0x0162), 48000 Hz, stereo, fltp, 256 kb/s Stream #0:1(chi): Video: vc1 (Advanced) (WVC1 / 0x31435657), yuv420p, 1352x696 [SAR 1:1 DAR 169:87], 3400 kb/s, 30 tbr, 1k tbn, 60 tbc Stream mapping: Stream #0:1 -> #0:0 (vc1 (native) -> h264 (libx264)) Stream #0:0 -> #0:1 (wmapro (native) -> aac (native)) Press [q] to stop, [?] for help [libx264 @ 0000000000531c80] using SAR=1/1 [libx264 @ 0000000000531c80] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX [libx264 @ 0000000000531c80] profile Progressive High, level 3.2, 4:2:0, 8-bit [libx264 @ 0000000000531c80] 264 - core 157 r2970 5493be8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2019 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00 frame= 11 fps=0.0 q=0.0 size= 0kB time=-577014:32:22.77 bitrate= -0.0kbits/s dup=1 drop=0 speed=N/A frame= 52 fps= 48 q=0.0 size= 0kB time=-577014:32:22.77 bitrate= -0.0kbits/s dup=1 drop=0 speed=N/A frame= 85 fps= 54 q=0.0 size= 0kB time=-577014:32:22.77 bitrate= -0.0kbits/s dup=1 drop=0 speed=N/A frame= 145 fps= 64 q=0.0 size= 0kB time=-577014:32:22.77 bitrate= -0.0kbits/s dup=47 drop=0 speed=N/A frame= 171 fps= 61 q=0.0 size= 0kB time=-577014:32:22.77 bitrate= -0.0kbits/s dup=55 drop=0 speed=N/A Too many packets buffered for output stream 0:0. [libx264 @ 0000000000531c80] frame I:2 Avg QP:15.28 size: 56950 [libx264 @ 0000000000531c80] frame P:34 Avg QP:14.18 size: 1252 [libx264 @ 0000000000531c80] frame B:93 Avg QP:15.53 size: 140 [libx264 @ 0000000000531c80] consecutive B-frames: 3.1% 1.6% 2.3% 93.0% [libx264 @ 0000000000531c80] mb I I16..4: 14.9% 79.5% 5.6% [libx264 @ 0000000000531c80] mb P I16..4: 0.7% 1.1% 0.0% P16..4: 4.1% 1.4% 1.3% 0.0% 0.0% skip:91.4% [libx264 @ 0000000000531c80] mb B I16..4: 0.0% 0.0% 0.0% B16..8: 3.6% 0.0% 0.0% direct: 0.0% skip:96.4% L0:36.8% L1:63.2% BI: 0.0% [libx264 @ 0000000000531c80] 8x8 transform intra:74.4% inter:80.1% [libx264 @ 0000000000531c80] coded y,uvDC,uvAC intra: 38.4% 33.4% 20.3% inter: 0.5% 0.2% 0.0% [libx264 @ 0000000000531c80] i16 v,h,dc,p: 61% 25% 9% 6% [libx264 @ 0000000000531c80] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 32% 31% 21% 2% 3% 3% 3% 3% 3% [libx264 @ 0000000000531c80] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 27% 32% 14% 4% 5% 5% 5% 4% 6% [libx264 @ 0000000000531c80] i8c dc,h,v,p: 76% 13% 8% 4% [libx264 @ 0000000000531c80] Weighted P-Frames: Y:0.0% UV:0.0% [libx264 @ 0000000000531c80] ref P L0: 85.1% 6.8% 6.5% 1.6% [libx264 @ 0000000000531c80] ref B L0: 48.1% 47.5% 4.4% [libx264 @ 0000000000531c80] ref B L1: 93.2% 6.8% [libx264 @ 0000000000531c80] kb/s:315.41 **Conversion failed!** 生成mp4视频为:E:\Test\projectVideos\temp1558578421815.mp4 ===========视频转码结束,开始截图================= 该文件夹存在。 截图命令:E:\ffmpeg\bin\ffmpeg.exe-ss00:00:01-iE:\Test\projectVideos\temp\1558578421815.wmv-y-fimage2-s154x90E:\Test\projectVideos\images\1558578421815.jpg ffmpeg version N-93678-g4b7166c9d5 Copyright (c) 2000-2019 the FFmpeg developers built with gcc 8.3.1 (GCC) 20190414 configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt libavutil 56. 26.100 / 56. 26.100 libavcodec 58. 52.100 / 58. 52.100 libavformat 58. 27.103 / 58. 27.103 libavdevice 58. 7.100 / 58. 7.100 libavfilter 7. 50.100 / 7. 50.100 libswscale 5. 4.100 / 5. 4.100 libswresample 3. 4.100 / 3. 4.100 libpostproc 55. 4.100 / 55. 4.100 Input #0, asf, from 'E:\Test\projectVideos\temp\1558578421815.wmv': Metadata: DeviceConformanceTemplate: M1 WMFSDKNeeded : 0.0.0.0000 WM/WMADRCPeakReference: 7851 WM/WMADRCPeakTarget: 7851 WM/WMADRCAverageReference: 1027 WM/WMADRCAverageTarget: 1027 WMFSDKVersion : 12.0.7601.17514 IsVBR : 0 Duration: 00:00:16.58, bitrate: 1969 kb/s Stream #0:0(chi): Audio: wmapro (b[1][0][0] / 0x0162), 48000 Hz, stereo, fltp, 256 kb/s Stream #0:1(chi): Video: vc1 (Advanced) (WVC1 / 0x31435657), yuv420p, 1352x696 [SAR 1:1 DAR 169:87], 3400 kb/s, 30 tbr, 1k tbn, 60 tbc Stream mapping: Stream #0:1 -> #0:0 (vc1 (native) -> mjpeg (native)) Press [q] to stop, [?] for help [swscaler @ 0000000002ecd4c0] deprecated pixel format used, make sure you did set range correctly Output #0, image2, to 'E:\Test\projectVideos\images\1558578421815.jpg': Metadata: DeviceConformanceTemplate: M1 WMFSDKNeeded : 0.0.0.0000 WM/WMADRCPeakReference: 7851 WM/WMADRCPeakTarget: 7851 WM/WMADRCAverageReference: 1027 WM/WMADRCAverageTarget: 1027 WMFSDKVersion : 12.0.7601.17514 IsVBR : 0 encoder : Lavf58.27.103 Stream #0:0(chi): Video: mjpeg, yuvj420p(pc), 154x90 [SAR 2535:2233 DAR 169:87], q=2-31, 200 kb/s, 30 fps, 30 tbn, 30 tbc Metadata: encoder : Lavc58.52.100 mjpeg Side data: cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1 [image2 @ 0000000000628e00] Could not get frame filename number 2 from pattern 'E:\Test\projectVideos\images\1558578421815.jpg'. Use '-frames:v 1' for a single image, or '-update' option, or use a pattern such as %03d within the filename. av_interleaved_write_frame(): Invalid argument frame= 2 fps=0.0 q=1.6 size=N/A time=00:00:00.06 bitrate=N/A speed=0.102x frame= 2 fps=0.0 q=1.6 Lsize=N/A time=00:00:00.06 bitrate=N/A speed=0.097x video:3kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown Conversion failed! 截图进程结束 截图成功! ``` 即出现了Conversion failed!!!
Android关于录制音频时mediaRecorder.setAudioSamplingRate()的大小
mediaRecorder = new MediaRecorder(); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); mediaRecorder.setAudioChannels(1); //采样频率和bit频率有待提高(前提不会导致bug) mediaRecorder.setAudioSamplingRate(8000); mediaRecorder.setAudioEncodingBitRate(8000); 当我把setAudioSamplingRate(8000)的参数调到10000以上的时候,代码就崩溃了。 求大神解惑,谢谢
Jwplayer 两个mp4文件,一个可以播放,一个不可以播放
大家好,我现在的网页采用jwplayer播放mp4文件,一个可以播放,一个不可以播放。 求解决思路!谢谢! 1)两个文件在本地采用播放软件,如系统自带WMP的都可以正常播放。 2)两个文件的编码格式是一样的,详情如下:(右侧,who.mp4为正常播放的文件) ![图片说明](https://img-ask.csdn.net/upload/201505/06/1430877912_87425.png) 完整信息如下: General Complete name : possi.mp4 Format : MPEG-4 Format profile : Base Media / Version 2 Codec ID : mp42 File size : 69.4 MiB Duration : 5mn 36s Overall bit rate : 1 727 Kbps Video ID : 1 Format : AVC Format/Info : Advanced Video Codec Format profile : Baseline@L3.1 Format settings, CABAC : No Format settings, ReFrames : 1 frame Codec ID : avc1 Codec ID/Info : Advanced Video Coding Duration : 5mn 36s Bit rate mode : Variable Bit rate : 1 566 Kbps Width : 1 280 pixels Height : 720 pixels Display aspect ratio : 16:9 Frame rate mode : Variable Frame rate : 30.300 fps Minimum frame rate : 15.150 fps Maximum frame rate : 30.300 fps Color space : YUV Chroma subsampling : 4:2:0 Bit depth : 8 bits Scan type : Progressive Bits/(Pixel*Frame) : 0.056 Stream size : 62.9 MiB (91%) Audio ID : 2 Format : AAC Format/Info : Advanced Audio Codec Format profile : LC Codec ID : 40 Duration : 5mn 36s Bit rate mode : Constant Bit rate : 158 Kbps Nominal bit rate : 192 Kbps Channel(s) : 2 channels Channel positions : Front: L R Sampling rate : 44.1 KHz Compression mode : Lossy Stream size : 6.35 MiB (9%) 可以播放的视频格式: General Complete name : who.mp4 Format : MPEG-4 Format profile : Base Media / Version 2 Codec ID : mp42 File size : 96.2 MiB Duration : 2mn 41s Overall bit rate : 4 981 Kbps Encoded date : UTC 2015-03-19 14:48:59 Tagged date : UTC 2015-03-19 14:49:01 Video ID : 2 Format : AVC Format/Info : Advanced Video Codec Format profile : Main@L4.0 Format settings, CABAC : No Format settings, ReFrames : 2 frames Format settings, GOP : M=2, N=48 Codec ID : avc1 Codec ID/Info : Advanced Video Coding Duration : 2mn 41s Duration_LastFrame : 5mn 4s Bit rate mode : Variable Bit rate : 4 869 Kbps Width : 1 920 pixels Height : 1 080 pixels Display aspect ratio : 16:9 Frame rate mode : Constant Frame rate : 23.976 fps Color space : YUV Chroma subsampling : 4:2:0 Bit depth : 8 bits Scan type : Progressive Bits/(Pixel*Frame) : 0.098 Stream size : 94.0 MiB (98%) Title : Apple 视频媒体处理程序 Language : English Encoded date : UTC 2015-03-19 14:41:04 Tagged date : UTC 2015-03-19 14:49:01 Color primaries : BT.709-5, BT.1361, IEC 61966-2-4, SMPTE RP177 Transfer characteristics : BT.709-5, BT.1361 Matrix coefficients : BT.709-5, BT.1361, IEC 61966-2-4 709, SMPTE RP177 Audio ID : 1 Format : AAC Format/Info : Advanced Audio Codec Format profile : LC Codec ID : 40 Duration : 2mn 41s Bit rate mode : Constant Bit rate : 107 Kbps Nominal bit rate : 128 Kbps Channel(s) : 2 channels Channel positions : Front: L R Sampling rate : 44.1 KHz Compression mode : Lossy Stream size : 2.07 MiB (2%) Title : Apple 声音媒体处理程序 Language : English Encoded date : UTC 2015-03-19 14:41:04 Tagged date : UTC 2015-03-19 14:49:01 采用对比软件比较,仅有细小的差别,格式是一致的 从后台请求来看,也没有发送解析错误的报告,只是视频显示播放不了 ![图片说明](https://img-ask.csdn.net/upload/201505/06/1430877707_423015.png)
Android camera录制视频没有preview为什么不能成功?API21
http://developer.android.com/guide/topics/media/camera.html Note: It is possible to use MediaRecorder without creating a camera preview first and skip the first few steps of this process. However, since users typically prefer to see a preview before starting a recording, that process is not discussed here. Android的文档如上,我想不创建一个照相机的预览界面,按理来说是可行的。我参考文档里的步骤,省去startpreview.核心代码如下 ``` public void init(){ CameraManager manager = (CameraManager)getSystemService(Context.CAMERA_SERVICE); Log.e(TAG, "OpenCamera-Video E"); String cameraId = null; try { if(!mCameraOpenCloseLock.tryAcquire(2500, TimeUnit.MILLISECONDS)){ throw new RuntimeException("Time out waiting to lock Camera opening"); } cameraId = manager.getCameraIdList()[0]; CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); mVideoSize = chooseVideoSize(map.getOutputSizes(MediaRecorder.class)); mMediaRecorder = new MediaRecorder(); manager.openCamera(cameraId,mStateCallback,null); setUpMediaRecorder(); } catch (CameraAccessException e) { e.printStackTrace(); Log.e(TAG,"cannot access the camera"); } catch (InterruptedException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Log.e(TAG,"openCamera-video X"); } private void setUpMediaRecorder() throws IOException { mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE); mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mMediaRecorder.setVideoEncodingBitRate(10000000); mMediaRecorder.setVideoFrameRate(30); mMediaRecorder.setVideoSize(mVideoSize.getWidth(), mVideoSize.getHeight()); mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); mMediaRecorder.setOutputFile(String.valueOf(getVideoFile())); //mMediaRecorder.setOrientationHint(orientation); mMediaRecorder.prepare(); } private CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() { @Override public void onOpened(CameraDevice cameraDevice) { mCameraDevice = cameraDevice; mCameraOpenCloseLock.release(); } @Override public void onDisconnected(CameraDevice cameraDevice) { mCameraOpenCloseLock.release(); cameraDevice.close(); mCameraDevice = null; } @Override public void onError(CameraDevice cameraDevice, int i) { mCameraOpenCloseLock.release(); cameraDevice.close(); mCameraDevice = null; } }; private void startRecordingVideo() { try { // UI // mButtonVideo.setText(R.string.stop); mIsRecordingVideo = true; Log.i("VideoService","在startRecordingVideo里"); // Start recording mMediaRecorder.start(); } catch (IllegalStateException e) { e.printStackTrace(); } } private boolean mIsRecordingVideo = false; private void stopRecordingVideo() { // UI mIsRecordingVideo = false; // mButtonVideo.setText(R.string.record); // Stop recording mMediaRecorder.stop(); mMediaRecorder.reset(); mMediaRecorder.release(); // Activity activity = getActivity(); Toast.makeText(this, "Video saved: " + getVideoFile(), Toast.LENGTH_SHORT).show(); // startPreview(); } ``` 在初始化的时候执行init()函数,之后,点击button按钮,对mIsRecordingVideo值判断,若为false,进入startRecordingVideo(),启动录像;若为true,进入stopRecordingVideo(),停止录像。 请问,是不是我的过程错误呢?急需!
HTML5中的视频播出就只能是Ogg、MPEG 4、WebM吗?
那如果我在HTML5中播放视频。那都得转换成这三种格式才行吗?那这样的工作量岂不是很大啊? 上传一个视频必须得先转换成这些格式才行?[HTML5视频格式][1] [1]: http://www.44lan.cn/lan_html/html5/ht5_video.aspx
FFmpeg 视频压缩问题 麻烦大虾们进来看下
``` 08-04 13:15:43.566 19531-20681/com.bike.main D/QCloud: 压缩中/data/data/com.bike.main/app_bin/ffmpeg -threads 4 -y -i /storage/emulated/0/DCIM/Camera/VID_20160804_102832.mp4 -strict -2 -vf crop=360:480:0:0 -preset ultrafast -tune zerolatency -s 360x480 -b:a 128k -r 30 -vcodec libx264 -acodec copy /storage/emulated/0/DCIM/Camera/VID_20160804_102832.mp4 08-04 13:15:43.612 19531-20714/com.bike.main D/QCloud: 压缩中WARNING: linker: /data/data/com.bike.main/app_bin/ffmpeg has text relocations. This is wasting memory and prevents security hardening. Please fix. 08-04 13:15:43.628 19531-20714/com.bike.main D/QCloud: 压缩中ffmpeg version n2.4.2 Copyright (c) 2000-2014 the FFmpeg developers 08-04 13:15:43.628 19531-20714/com.bike.main D/QCloud: 压缩中 built on Oct 7 2014 15:05:17 with gcc 4.8 (GCC) 08-04 13:15:43.629 19531-20714/com.bike.main D/QCloud: 压缩中 configuration: --target-os=linux --cross-prefix=/home/sb/Source-Code/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/home/sb/Source-Code/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-libx264 --enable-libass --enable-libfreetype --enable-libfribidi --enable-fontconfig --enable-pthreads --disable-debug --disable-ffserver --enable-version3 --enable-hardcoded-tables --disable-ffplay --disable-ffprobe --enable-gpl --enable-yasm --disable-doc --disable-shared --enable-static --pkg-config=/home/sb/Source-Code/ffmpeg-android/ffmpeg-pkg-config --prefix=/home/sb/Source-Code/ffmpeg-android/build/armeabi-v7a --extra-cflags='-I/home/sb/Source-Code/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all' --extra-ldflags='-L/home/sb/Source-Code/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-libs='-lpng -lexpat -lm' --extra-cxxflags= 08-04 13:15:43.629 19531-20714/com.bike.main D/QCloud: 压缩中 libavutil 54. 7.100 / 54. 7.100 08-04 13:15:43.629 19531-20714/com.bike.main D/QCloud: 压缩中 libavcodec 56. 1.100 / 56. 1.100 08-04 13:15:43.630 19531-20714/com.bike.main D/QCloud: 压缩中 libavformat 56. 4.101 / 56. 4.101 08-04 13:15:43.630 19531-20714/com.bike.main D/QCloud: 压缩中 libavdevice 56. 0.100 / 56. 0.100 08-04 13:15:43.630 19531-20714/com.bike.main D/QCloud: 压缩中 libavfilter 5. 1.100 / 5. 1.100 08-04 13:15:43.630 19531-20714/com.bike.main D/QCloud: 压缩中 libswscale 3. 0.100 / 3. 0.100 08-04 13:15:43.631 19531-20714/com.bike.main D/QCloud: 压缩中 libswresample 1. 1.100 / 1. 1.100 08-04 13:15:43.631 19531-20714/com.bike.main D/QCloud: 压缩中 libpostproc 53. 0.100 / 53. 0.100 08-04 13:15:43.968 19531-20714/com.bike.main D/QCloud: 压缩中Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/storage/emulated/0/DCIM/Camera/VID_20160804_102832.mp4': 08-04 13:15:43.969 19531-20714/com.bike.main D/QCloud: 压缩中 Metadata: 08-04 13:15:43.969 19531-20714/com.bike.main D/QCloud: 压缩中 major_brand : mp42 08-04 13:15:43.969 19531-20714/com.bike.main D/QCloud: 压缩中 minor_version : 0 08-04 13:15:43.970 19531-20714/com.bike.main D/QCloud: 压缩中 compatible_brands: isommp42 08-04 13:15:43.970 19531-20714/com.bike.main D/QCloud: 压缩中 creation_time : 2016-08-04 02:28:43 08-04 13:15:43.970 19531-20714/com.bike.main D/QCloud: 压缩中 location : +30.1914+120.1892/ 08-04 13:15:43.971 19531-20714/com.bike.main D/QCloud: 压缩中 location-eng : +30.1914+120.1892/ 08-04 13:15:43.972 19531-20714/com.bike.main D/QCloud: 压缩中 Duration: 00:00:10.18, start: 0.000000, bitrate: 41899 kb/s 08-04 13:15:43.973 19531-20714/com.bike.main D/QCloud: 压缩中 Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 3840x2160, 41699 kb/s, SAR 65536:65536 DAR 16:9, 29.24 fps, 30 tbr, 90k tbn, 180k tbc (default) 08-04 13:15:43.973 19531-20714/com.bike.main D/QCloud: 压缩中 Metadata: 08-04 13:15:43.973 19531-20714/com.bike.main D/QCloud: 压缩中 rotate : 90 08-04 13:15:43.974 19531-20714/com.bike.main D/QCloud: 压缩中 creation_time : 2016-08-04 02:28:43 08-04 13:15:43.974 19531-20714/com.bike.main D/QCloud: 压缩中 handler_name : VideoHandle 08-04 13:15:43.974 19531-20714/com.bike.main D/QCloud: 压缩中 Side data: 08-04 13:15:43.975 19531-20714/com.bike.main D/QCloud: 压缩中 displaymatrix: rotation of -90.00 degrees 08-04 13:15:43.975 19531-20714/com.bike.main D/QCloud: 压缩中 Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 96 kb/s (default) 08-04 13:15:43.975 19531-20714/com.bike.main D/QCloud: 压缩中 Metadata: 08-04 13:15:43.976 19531-20714/com.bike.main D/QCloud: 压缩中 creation_time : 2016-08-04 02:28:43 08-04 13:15:43.976 19531-20714/com.bike.main D/QCloud: 压缩中 handler_name : SoundHandle 08-04 13:15:43.990 19531-20714/com.bike.main D/QCloud: 压缩中[libx264 @ 0xb5ec4400] using SAR=1/1 08-04 13:15:44.003 19531-20714/com.bike.main D/QCloud: 压缩中[libx264 @ 0xb5ec4400] using cpu capabilities: none! 08-04 13:15:44.067 19531-20714/com.bike.main D/QCloud: 压缩中[libx264 @ 0xb5ec4400] profile Constrained Baseline, level 3.0 08-04 13:15:44.067 19531-20714/com.bike.main D/QCloud: 压缩中[libx264 @ 0xb5ec4400] 264 - core 142 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=4 lookahead_threads=4 sliced_threads=1 slices=4 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=crf mbtree=0 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=0 08-04 13:15:44.075 19531-20714/com.bike.main D/QCloud: 压缩中Output #0, mp4, to '/storage/emulated/0/DCIM/Camera/VID_20160804_102832.mp4': 08-04 13:15:44.075 19531-20714/com.bike.main D/QCloud: 压缩中 Metadata: 08-04 13:15:44.076 19531-20714/com.bike.main D/QCloud: 压缩中 major_brand : mp42 08-04 13:15:44.076 19531-20714/com.bike.main D/QCloud: 压缩中 minor_version : 0 08-04 13:15:44.076 19531-20714/com.bike.main D/QCloud: 压缩中 compatible_brands: isommp42 08-04 13:15:44.077 19531-20714/com.bike.main D/QCloud: 压缩中 location-eng : +30.1914+120.1892/ 08-04 13:15:44.077 19531-20714/com.bike.main D/QCloud: 压缩中 location : +30.1914+120.1892/ 08-04 13:15:44.077 19531-20714/com.bike.main D/QCloud: 压缩中 encoder : Lavf56.4.101 08-04 13:15:44.079 19531-20714/com.bike.main D/QCloud: 压缩中 Stream #0:0(eng): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 360x480 [SAR 1:1 DAR 3:4], q=-1--1, 30 fps, 15360 tbn, 30 tbc (default) 08-04 13:15:44.079 19531-20714/com.bike.main D/QCloud: 压缩中 Metadata: 08-04 13:15:44.079 19531-20714/com.bike.main D/QCloud: 压缩中 rotate : 90 08-04 13:15:44.079 19531-20714/com.bike.main D/QCloud: 压缩中 creation_time : 2016-08-04 02:28:43 08-04 13:15:44.080 19531-20714/com.bike.main D/QCloud: 压缩中 handler_name : VideoHandle 08-04 13:15:44.080 19531-20714/com.bike.main D/QCloud: 压缩中 encoder : Lavc56.1.100 libx264 08-04 13:15:44.081 19531-20714/com.bike.main D/QCloud: 压缩中 Stream #0:1(eng): Audio: aac ([64][0][0][0] / 0x0040), 48000 Hz, stereo, 128 kb/s (default) 08-04 13:15:44.081 19531-20714/com.bike.main D/QCloud: 压缩中 Metadata: 08-04 13:15:44.081 19531-20714/com.bike.main D/QCloud: 压缩中 creation_time : 2016-08-04 02:28:43 08-04 13:15:44.082 19531-20714/com.bike.main D/QCloud: 压缩中 handler_name : SoundHandle 08-04 13:15:44.082 19531-20714/com.bike.main D/QCloud: 压缩中Stream mapping: 08-04 13:15:44.082 19531-20714/com.bike.main D/QCloud: 压缩中 Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264)) 08-04 13:15:44.083 19531-20714/com.bike.main D/QCloud: 压缩中 Stream #0:1 -> #0:1 (copy) 08-04 13:15:44.083 19531-20714/com.bike.main D/QCloud: 压缩中Press [q] to stop, [?] for help 08-04 13:15:44.413 19531-20714/com.bike.main D/QCloud: 压缩中[mov,mp4,m4a,3gp,3g2,mj2 @ 0xb5efa000] stream 1, offset 0x66172: partial file 08-04 13:15:44.414 19531-20714/com.bike.main D/QCloud: 压缩中/storage/emulated/0/DCIM/Camera/VID_20160804_102832.mp4: Invalid data found when processing input 08-04 13:15:44.431 19531-20714/com.bike.main D/QCloud: 压缩中frame= 1 fps=0.0 q=20.0 Lsize= 25kB time=00:00:01.00 bitrate= 201.3kbits/s 08-04 13:15:44.431 19531-20714/com.bike.main D/QCloud: 压缩中video:11kB audio:12kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 6.192641% 08-04 13:15:44.447 19531-20714/com.bike.main D/QCloud: 压缩中[libx264 @ 0xb5ec4400] frame I:1 Avg QP:20.00 size: 10420 08-04 13:15:44.448 19531-20714/com.bike.main D/QCloud: 压缩中[libx264 @ 0xb5ec4400] mb I I16..4: 100.0% 0.0% 0.0% 08-04 13:15:44.448 19531-20714/com.bike.main D/QCloud: 压缩中[libx264 @ 0xb5ec4400] coded y,uvDC,uvAC intra: 55.9% 40.3% 19.7% 08-04 13:15:44.448 19531-20714/com.bike.main D/QCloud: 压缩中[libx264 @ 0xb5ec4400] i16 v,h,dc,p: 34% 22% 32% 12% 08-04 13:15:44.448 19531-20714/com.bike.main D/QCloud: 压缩中[libx264 @ 0xb5ec4400] i8c dc,h,v,p: 67% 13% 17% 4% 08-04 13:15:44.449 19531-20714/com.bike.main D/QCloud: 压缩中[libx264 @ 0xb5ec4400] kb/s:2500.80 08-04 13:15:44.453 19531-20715/com.bike.main I/123: OUTPUT::null 08-04 13:15:44.454 19531-20714/com.bike.main I/123: ERROR::null 08-04 13:15:44.458 19531-20681/com.bike.main D/QCloud: 压缩成功 ``` * 麻烦大神们帮忙看看问题出在哪里啊 压缩好的视频**不能播放**而且**大小没变化**
Android 竖屏录制 在PC端播放被逆时针旋转了90度
Android 竖屏录制 在PC端播放被逆时针旋转了90度 mCamera.setDisplayOrientation(90); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); if (mCameraPosition == 1) mRecorder.setOrientationHint(270);//前置摄像头视频旋转270度 else mRecorder.setOrientationHint(90);//后置摄像头转90 我是用的是源生的录制视频方式,他的方法里不管是旋转摄像头还是旋转录制好的视频,在移动端播放没有问题,但是在后台下载到PC端播放就一直是被逆时针旋转了90度。有大神遇到过这个问题吗,是怎么解决的?
支持MPEG4的DVD机,能够播放什么格式的视频
家里的DVD机支持MPEG4的编码格式 1.我现在将多个视频都转成了MP4(用的是MPEG4的编码格式),现在想将这多个MP4通过nero刻录成**数据DVD**,不知道数据光盘能不能在DVD机上播放。 2.或者将视频转成avi格式(同样选用MPEG4的编码格式),然后刻录成**数据DVD**,这样不知道能不能播放。 3.或者都不行的话,请问用什么方法最好? 我刻录的时候选的是数据DVD光盘,不是选择的视频光盘 网上都说DVD支持MPEG的视频文件,但是MPEG只是编码格式,跟文件后缀应该没什么太大关系,所以上面MP4和AVI转码的时候都选的是MPEG4的编码格式。还有说转成VOB的,VOB是MPEG2编码格式的,但是VOB占的空间太大。 如果有真正懂行的,请帮忙解答下上面三个问题,多谢了 顺便再问下 那种一张碟上有好多个电影的光盘,里面视频是什么格式的
vc4000视频卡win7只显示1路,求教!
delphi开发天敏vc4000视频卡,XP系统4路画面正常显示,win7只显示1路,怎样解决? procedure InitGlobalVar(); begin //主窗口用到的全局变量 g_nCard :=0; g_nCard1 := 1; g_hWnd := HWND(0); g_hWnd1 := HWND(0); g_szVidSize.cx := 360; g_szVidSize.cy := 288; g_nCurVs := 0; g_nFrameRate := 25; g_strCurComp := 'XviD MPEG-4 Codec'; g_bBmp := False; g_nPlayState := 0; end; procedure Connect(); begin VCAConnectDevice( g_nCard, ToVcbool(True), g_hWnd, g_szVidSize, VIDEOSOURCE(0), g_nFrameRate,VideoSubType_YUY2); VCAConnectDevice( g_nCard1, ToVcbool(True), g_hWnd1,g_szVidSize, VIDEOSOURCE(0), g_nFrameRate,VideoSubType_YUY2); //全局变量更新 g_nPlayState := 1; end;
node项目运行后提示错误信息ERR_HTTP_INVALID_HEADER_VALUE
我在运行node项目时提示运行错误 ``` D:\hichat>node app.js server on *:3000 _http_outgoing.js:475 throw new ERR_HTTP_INVALID_HEADER_VALUE(value, name); ^ TypeError [ERR_HTTP_INVALID_HEADER_VALUE]: Invalid value "undefined" for header "Content-Type" at storeHeader (_http_outgoing.js:432:5) at processHeader (_http_outgoing.js:427:3) at ServerResponse._storeHeader (_http_outgoing.js:332:11) at ServerResponse.writeHead (_http_server.js:303:8) at D:\hichat\modules\StaticService.js:30:8 at FSReqCallback.readFileAfterClose [as oncomplete] (internal/fs/read_file_context.js:61:3) { code: 'ERR_HTTP_INVALID_HEADER_VALUE' } ``` 网上找了很多,都没有找到相应的方法和出现的原因 ``` StaticService.js var fs = require("fs"),//内部模块 处理文件操作 path =require("path"),//内部模块 处理路径操作 mime =require("./mime").types;//自定义模块请求处理文档类型操作 /** * 404 NOT FOUNT 函数 * @param {[type]} res [请求对象] */ function send404(res){ res.writeHead(404,{"Content-Type":"text/plain"}); res.end("404 not found"); } /** * 静态文件请求函数 * @param {[type]} realpath [绝对路径] * @param {[type]} res [服务器请求对象] */ function staticServer(realpath,res){ fs.readFile(realpath,function(err,data){ if(!err){ var extname=path.extname(realpath); res.writeHead(200,{"Content-Type":mime[extname]}); //这行报错 res.end(data); }else{ send404(res); } }); } /** * 静态服务器主入口模块 * @param {[type]} pathname [请求路径名称] * @param {[type]} res [请求对象] * @param {[type]} base_dir [根目录] */ exports.staticRender=function(pathname,res,base_dir){ var reg = /^\/static|upload/;//目录匹配 if(reg.test(pathname)){ fs.exists(path.join(base_dir,pathname),function(exists){ if(exists){ staticServer(path.join(base_dir,pathname),res) }else{ send404(res); } }) }else{ send404(res); } } ``` ``` /** * title hichat聊天室 文件mime类型对象 */ exports.types = { '.hqx':'application/mac-binhex40', '.cpt':'application/mac-compactpro', '.csv':['text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel'], '.bin':'application/macbinary', '.dms':'application/octet-stream', '.lha':'application/octet-stream', '.lzh':'application/octet-stream', '.exe':['application/octet-stream', 'application/x-msdownload'], '.class':'application/octet-stream', '.psd':'application/x-photoshop', '.so':'application/octet-stream', '.sea':'application/octet-stream', '.dll':'application/octet-stream', '.oda':'application/oda', '.pdf':['application/pdf', 'application/x-download'], '.ai':'application/postscript', '.eps':'application/postscript', '.ps':'application/postscript', '.smi':'application/smil', '.smil':'application/smil', '.mif':'application/vnd.mif', '.xls':['application/excel', 'application/vnd.ms-excel', 'application/msexcel'], '.ppt':['application/powerpoint', 'application/vnd.ms-powerpoint'], '.wbxml':'application/wbxml', '.wmlc':'application/wmlc', '.dcr':'application/x-director', '.dir':'application/x-director', '.dxr':'application/x-director', '.dvi':'application/x-dvi', '.gtar':'application/x-gtar', '.gz':'application/x-gzip', '.php':'application/x-httpd-php', '.php4':'application/x-httpd-php', '.php3':'application/x-httpd-php', '.phtml':'application/x-httpd-php', '.phps':'application/x-httpd-php-source', '.js':'application/x-javascript', '.swf':'application/x-shockwave-flash', '.sit':'application/x-stuffit', '.tar':'application/x-tar', '.tgz':['application/x-tar', 'application/x-gzip-compressed'], '.xhtml':'application/xhtml+xml', '.xht':'application/xhtml+xml', '.zip':['application/x-zip', 'application/zip', 'application/x-zip-compressed'], '.mid':'audio/midi', '.midi':'audio/midi', '.mpga':'audio/mpeg', '.mp2':'audio/mpeg', '.mp3':['audio/mpeg', 'audio/mpg', 'audio/mpeg3', 'audio/mp3'], '.aif':'audio/x-aiff', '.aiff':'audio/x-aiff', '.aifc':'audio/x-aiff', '.ram':'audio/x-pn-realaudio', '.rm':'audio/x-pn-realaudio', '.rpm':'audio/x-pn-realaudio-plugin', '.ra':'audio/x-realaudio', '.rv':'video/vnd.rn-realvideo', '.wav':['audio/x-wav', 'audio/wave', 'audio/wav'], '.bmp':['image/bmp', 'image/x-windows-bmp'], '.gif':'image/gif', '.jpeg':['image/jpeg', 'image/pjpeg'], '.jpg':['image/jpeg', 'image/pjpeg'], '.jpe':['image/jpeg', 'image/pjpeg'], '.png':['image/png', 'image/x-png'], '.tiff':'image/tiff', '.tif':'image/tiff', '.css':'text/css', '.html':'text/html', '.htm':'text/html', '.shtml':'text/html', '.txt':'text/plain', '.text':'text/plain', '.log':['text/plain', 'text/x-log'], '.rtx':'text/richtext', '.rtf':'text/rtf', '.xml':'text/xml', '.xsl':'text/xml', '.mpeg':'video/mpeg', '.mpg':'video/mpeg', '.mpe':'video/mpeg', '.qt':'video/quicktime', '.mov':'video/quicktime', '.avi':'video/x-msvideo', '.movie':'video/x-sgi-movie', '.doc':'application/msword', '.docx':['application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip'], '.xlsx':['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip'], '.word':['application/msword', 'application/octet-stream'], '.xl':'application/excel', '.eml':'message/rfc822', '.json':['application/json', 'text/json'] }; ```
Android 中MediaRecorder+SurfaceView 录制视频的时图像变形
项目需要一个能录制十分钟左右自动停止的功能,找SDK发现满足不了需求,没办法就自己写了 基本都写完了,但是在录制的时候图像会拉伸变形,查了好多资料一直也没有一个好办法,现在 我解决了预览变形的,下面不知道怎么弄了,请教那位大神帮助一下 MediaRecorder配置类 if (!isRecorder && mMediaRecorder == null) { mMediaRecorder = new MediaRecorder(); try { mMediaRecorder.setCamera(mCamera); // 设置从摄像头采集图像 mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); // 设置从麦克风采集声音(或来自录像机的声音AudioSource.CAMCORDER) mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置视频文件的输出格式 // 必须在设置声音编码格式、图像编码格式之前设置 mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); // mMediaRecorder.setMaxDuration(1000); // 设置图像编码的格式 mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); //mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); //Use myVideoSize from above mMediaRecorder.setVideoSize(320, 240); // 设置声音编码的格式 mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); // mMediaRecorder.setOrientationHint(180);// 输出旋转90度,保持竖屏录制 /* * mMediaRecorder.setAudioChannels(1);//1单声道 2 多声道 * mMediaRecorder.setAudioSamplingRate(12500); * //设置录制的音频采样率——频率越高,音质越好 * mMediaRecorder.setAudioEncodingBitRate(16); // 设置录制的音频编码比特率 */ // mMediaRecorder.setOrientationHint(180);// 输出旋转90度,保持竖屏录制 // 每秒 4帧 mMediaRecorder.setVideoFrameRate(30); mMediaRecorder.setVideoEncodingBitRate(10 * 1024 * 1024); // 文件输出路劲 mMediaRecorder.setOutputFile(mVecordFile.getAbsolutePath()); mMediaRecorder.setPreviewDisplay(mHolder.getSurface()); mMediaRecorder.prepare(); // mCamera.startPreview(); mMediaRecorder.start(); } 设置照相机 if (mCamera != null) { freeCameraResource(); } try { mCamera = Camera.open(); if(mCamera != null && isOpenCamera) setCameraParams(); mCamera.startPreview(); mCamera.setDisplayOrientation(0); mCamera.setPreviewDisplay(mHolder); mCamera.unlock(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // 设置照相机 private void setCameraParams() { // TODO Auto-generated method stub if (mCamera != null) { params = mCamera.getParameters(); WindowManager manager = (WindowManager) VideotTranscribe.this.getSystemService(VideotTranscribe.this.WINDOW_SERVICE); Display display = manager.getDefaultDisplay(); // Point screenResolution = new Point(display.getWidth(), display.getHeight()); //Point p = getBestCameraResolution(params, screenResolution); params.setPreviewSize(display.getWidth(),display.getHeight());//防止录制预览图像变形 mCamera.setParameters(params); params = mCamera.getParameters(); } 跪求大神指导
使用MediaRecorder录制视频 录完后没有生成文件
代码如下:package com.example.meadiarecorder3; import java.io.File; import java.io.IOException; import android.app.Activity; import android.content.pm.ActivityInfo; import android.graphics.PixelFormat; import android.hardware.Camera; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.view.WindowManager; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity implements SurfaceHolder.Callback{ private SurfaceView mSurfaceView; private SurfaceHolder mSurfaceHolder; private TextView tvTime; private TextView tvSize; private Button btnStart; private Button btnStop; private Button btnCancel; private MediaRecorder recorder; private Handler handler; private Camera camera; private boolean recording; // 记录是否正在录像,fasle为未录像, true 为正在录像 private int minute = 0; private int second = 0; private String time = ""; private String size = ""; private String name; private File viodFile; private Runnable timeRun = new Runnable() { @Override public void run() { long fileLength = viodFile.length(); if (fileLength < 1024 && fileLength > 0) { size = String.format("%dB/10M", fileLength); } else if (fileLength >= 1024 && fileLength < (1024 * 1024)) { fileLength = fileLength / 1024; size = String.format("%dK/10M", fileLength); } else if (fileLength > (1024 * 1024 * 1024)) { fileLength = (fileLength / 1024) / 1024; size = String.format("%dM/10M", fileLength); } second++; if (second == 60) { minute++; second = 0; } time = String.format("%02d:%02d", minute, second); tvSize.setText(viodFile.getAbsolutePath()); tvTime.setText(time); handler.postDelayed(timeRun, 1000); } }; private Button start;// 开始录制按钮 private Button stop;// 停止录制按钮 private MediaRecorder mediarecorder;// 录制视频的类 private SurfaceView surfaceview;// 显示视频的控件 // 用来显示视频的一个接口,我靠不用还不行,也就是说用mediarecorder录制视频还得给个界面看 // 想偷偷录视频的同学可以考虑别的办法。。嗯需要实现这个接口的Callback接口 private SurfaceHolder surfaceHolder; private String fileName; private SurfaceHolder holder; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉标题栏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);// 设置全屏 // 设置横屏显示 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); // 选择支持半透明模式,在有surfaceview的activity中使用。 getWindow().setFormat(PixelFormat.TRANSLUCENT); setContentView(R.layout.activity_main); fileName = Environment.getExternalStorageDirectory().getAbsolutePath(); name = "video_" + System.currentTimeMillis() + ".mp4"; fileName += File.separator + File.separator + "Ruanko_Jobseeker" + File.separator + name; name = "video_" + System.currentTimeMillis() + ".mp4"; tvSize = (TextView) findViewById(R.id.tv_video_size); tvTime = (TextView) findViewById(R.id.tv_video_time); handler= new Handler(); init(); } private void init() { start = (Button) this.findViewById(R.id.start); stop = (Button) this.findViewById(R.id.stop); start.setOnClickListener(new TestVideoListener()); stop.setOnClickListener(new TestVideoListener()); surfaceview = (SurfaceView) this.findViewById(R.id.surfaceview); holder = surfaceview.getHolder(); holder.addCallback(this); // holder加入回调接口 // setType必须设置,要不出错. holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } class TestVideoListener implements OnClickListener { private static final String TAG = "MainActivity"; @Override public void onClick(View v) { if (v == start) { try { viodFile = new File(Environment.getExternalStorageDirectory().getCanonicalFile() + "/myvideo.mp4"); if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { Toast.makeText(getApplicationContext(), "SD卡不存在,请插卡", 0).show(); return; }else{ if(!viodFile.exists()){ viodFile.getParentFile().mkdirs(); viodFile.createNewFile(); } } mediarecorder = new MediaRecorder();// 创建mediarecorder对象 // 设置录制视频源为Camera(相机) mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); // 设置从麦克风采集声音 mediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置录制完成后视频的封装格式THREE_GPP为3gp.MPEG_4为mp4 mediarecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); // 设置录制的视频编码h263 h264 mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); mediarecorder.setAudioEncoder(MediaRecorder.VideoEncoder.DEFAULT); // 设置视频录制的分辨率。必须放在设置编码和格式的后面,否则报错 mediarecorder.setVideoSize(176, 144); // 设置录制的视频帧率。必须放在设置编码和格式的后面,否则报错 mediarecorder.setVideoFrameRate(20); mediarecorder.setPreviewDisplay(holder.getSurface()); // 设置视频文件输出的路径 mediarecorder.setOutputFile(viodFile.getAbsolutePath()); System.out.println("viodFile.getAbsolutePath()的值为:"+viodFile.getAbsolutePath()); // 准备录制 mediarecorder.prepare(); // 开始录制 mediarecorder.start(); handler.post(timeRun); } catch (IOException e2) { e2.printStackTrace(); } } if (v == stop) { Log.i(TAG, viodFile.toString()); if (mediarecorder != null) { handler.removeCallbacks(timeRun); // 停止录制 mediarecorder.stop(); // 释放资源 mediarecorder.release(); mediarecorder = null; } } } } public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // 将holder,这个holder为开始在oncreat里面取得的holder,将它赋给surfaceHolder surfaceHolder = holder; } public void surfaceCreated(SurfaceHolder holder) { // 将holder,这个holder为开始在oncreat里面取得的holder,将它赋给surfaceHolder surfaceHolder = holder; } public void surfaceDestroyed(SurfaceHolder holder) { // surfaceDestroyed的时候同时对象设置为null surfaceview = null; holder = null; mediarecorder = null; } } 代码是没问题的 可以运行 可以录制和暂停 设置录制视频地址的代码是 viodFile = new File(Environment.getExternalStorageDirectory().getCanonicalFile() + "/myvideo.mp4"); mediarecorder.setOutputFile(viodFile.getAbsolutePath()); 这两行已经把地址设置好了 按道理来说 录完之后就可以找到文件了 但是没有! 求助各位大神,到底是哪里出了问题,有录制视频的号框架推荐就指点一二,或者有更好的代码就发小弟一份,不胜感激。。
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
《阿里巴巴开发手册》读书笔记-编程规约
Java编程规约命名风格 命名风格 类名使用UpperCamelCase风格 方法名,参数名,成员变量,局部变量都统一使用lowerCamelcase风格 常量命名全部大写,单词间用下划线隔开, 力求语义表达完整清楚,不要嫌名字长 ...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。 2.解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
Python绘图,圣诞树,花,爱心 | Turtle篇
1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle() circle.shape('circle') circle.color('red') circle.speed('fastest') circle.up() square = turtle.Turtle()
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
Linux 命令(122)—— watch 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] watch(1) manual
Linux 命令(121)—— cal 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] cal(1) manual
记jsp+servlet+jdbc实现的新闻管理系统
1.工具:eclipse+SQLyog 2.介绍:实现的内容就是显示新闻的基本信息,然后一个增删改查的操作。 3.数据库表设计 列名 中文名称 数据类型 长度 非空 newsId 文章ID int 11 √ newsTitle 文章标题 varchar 20 √ newsContent 文章内容 text newsStatus 是否审核 varchar 10 news...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告(本文) 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允
相关热词 c#导入fbx c#中屏蔽键盘某个键 c#正态概率密度 c#和数据库登陆界面设计 c# 高斯消去法 c# codedom c#读取cad文件文本 c# 控制全局鼠标移动 c# temp 目录 bytes初始化 c#
立即提问